distance operator dont work

Поиск
Список
Период
Сортировка
От bernard snyers
Тема distance operator dont work
Дата
Msg-id 44DD7AC0.9020601@ionicsoft.com
обсуждение исходный текст
Ответы Re: distance operator dont work  (Michael Fuhr <mike@fuhr.org>)
Re: distance operator dont work  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-bugs
Dear all,

I have a table containing polygon and I try a distance operator which
fails. (select * from mytable order by point(10,10) <-> mycol)

Postgres responds that the operator <-> between a point and a polygon is
unknown.

I look in the pg_operator.h (in src/include/catalog) where I think all
builtin operators are defined and found these definitions

DATA(insert OID = 517 (  "<->"       PGNSP PGUID b f 600 600 701 517
 0     0     0     0     0 point_distance - - ));

DATA(insert OID = 613 (  "<->"       PGNSP PGUID b f 600 628 701
 0     0    0  0   0   0 dist_pl - - ));
DATA(insert OID = 614 (  "<->"       PGNSP PGUID b f 600 601 701
 0     0    0  0   0   0 dist_ps - - ));
DATA(insert OID = 615 (  "<->"       PGNSP PGUID b f 600 603 701
 0     0    0  0   0   0 dist_pb - - ));
DATA(insert OID = 616 (  "<->"       PGNSP PGUID b f 601 628 701
 0     0    0  0   0   0 dist_sl - - ));
DATA(insert OID = 617 (  "<->"       PGNSP PGUID b f 601 603 701
 0     0    0  0   0   0 dist_sb - - ));
DATA(insert OID = 618 (  "<->"       PGNSP PGUID b f 600 602 701
 0     0    0  0   0   0 dist_ppath - - ));

DATA(insert OID = 706 (  "<->"       PGNSP PGUID b f 603 603 701 706
 0    0  0   0   0 box_distance - - ));
DATA(insert OID = 707 (  "<->"       PGNSP PGUID b f 602 602 701 707
 0    0  0   0   0 path_distance - - ));
DATA(insert OID = 708 (  "<->"       PGNSP PGUID b f 628 628 701 708
 0    0  0   0   0 line_distance - - ));
DATA(insert OID = 709 (  "<->"       PGNSP PGUID b f 601 601 701 709
 0    0  0   0   0 lseg_distance - - ));
DATA(insert OID = 712 (  "<->"       PGNSP PGUID b f 604 604 701 712
 0    0  0   0   0 poly_distance - - ));

DATA(insert OID = 1522 (  "<->"   PGNSP PGUID b f  600    718  701
0    0    0     0     0     0 dist_pc - - ));
DATA(insert OID = 1523 (  "<->"   PGNSP PGUID b f  718    604  701
0    0    0     0     0     0 dist_cpoly - - ));
DATA(insert OID = 1520 (  "<->"   PGNSP PGUID b f  718    718  701
1520     0    0     0     0     0 circle_distance - - ));
DATA(insert OID = 1524 (  "<->"   PGNSP PGUID b f  628    603  701
0  0 0 0 0 0 dist_lb - - ));

and there is none between a point and a polygon. (600 604) (furthermore
the 628 type is defined in ptypes.h as not implemented.

I did the following test,
I patch the line
DATA(insert OID = 613 (  "<->"       PGNSP PGUID b f 600 628 701
 0     0    0  0   0   0 dist_pl - - ));

replacing 628 by 604 ,
compiling and reinstalling everything including the database
and It works (I didnt verify the result)

So I am wondering , if I miss something, do I have to convert my point
in a degenerated circle or polygon) or do you forget one definition ?

I have checked the source code in versions 7.4.2,7.4.3 , 8.1.0 & 8.1.4.

The version I patched is 8.1.4 and the lines above were extracted from 7.4.2

Thank you

Bernard SNYERS
Chief Architect
Ionic Software
bs@ionicsoft.com

В списке pgsql-bugs по дате отправления:

Предыдущее
От: "Jie Liang"
Дата:
Сообщение: Re: Restoring 7.4.2 pg_dumpall output in 8.1.4 fails
Следующее
От: "Emil J."
Дата:
Сообщение: BUG #2572: ALTER TABLE ADD COLUMN