diff options
| author | Peter Eisentraut | 2013-10-09 05:09:18 +0000 |
|---|---|---|
| committer | Peter Eisentraut | 2013-10-10 02:34:38 +0000 |
| commit | 261c7d4b653bc3e44c31fd456d94f292caa50d8f (patch) | |
| tree | c908259140d328054336afb57deb1afdc565f534 /src/test | |
| parent | 0ac5e5a7e152504c71ce2168acc9cef7fde7893c (diff) | |
Revive line type
Change the input/output format to {A,B,C}, to match the internal
representation.
Complete the implementations of line_in, line_out, line_recv, line_send.
Remove comments and error messages about the line type not being
implemented. Add regression tests for existing line operators and
functions.
Reviewed-by: rui hua <365507506hua@gmail.com>
Reviewed-by: Álvaro Herrera <alvherre@2ndquadrant.com>
Reviewed-by: Jeevan Chalke <jeevan.chalke@enterprisedb.com>
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/regress/expected/geometry.out | 3 | ||||
| -rw-r--r-- | src/test/regress/expected/line.out | 271 | ||||
| -rw-r--r-- | src/test/regress/expected/sanity_check.out | 3 | ||||
| -rw-r--r-- | src/test/regress/output/misc.source | 3 | ||||
| -rw-r--r-- | src/test/regress/parallel_schedule | 2 | ||||
| -rw-r--r-- | src/test/regress/serial_schedule | 1 | ||||
| -rw-r--r-- | src/test/regress/sql/geometry.sql | 4 | ||||
| -rw-r--r-- | src/test/regress/sql/line.sql | 87 |
8 files changed, 364 insertions, 10 deletions
diff --git a/src/test/regress/expected/geometry.out b/src/test/regress/expected/geometry.out index 81237252eb7..21ad555c798 100644 --- a/src/test/regress/expected/geometry.out +++ b/src/test/regress/expected/geometry.out @@ -146,9 +146,6 @@ SELECT '' AS thirty, p.f1, l.s, p.f1 ## l.s AS closest (30 rows) -- --- Lines --- --- -- Boxes -- SELECT '' as six, box(f1) AS box FROM CIRCLE_TBL; diff --git a/src/test/regress/expected/line.out b/src/test/regress/expected/line.out new file mode 100644 index 00000000000..7d222fc0c2c --- /dev/null +++ b/src/test/regress/expected/line.out @@ -0,0 +1,271 @@ +-- +-- LINE +-- Infinite lines +-- +--DROP TABLE LINE_TBL; +CREATE TABLE LINE_TBL (s line); +INSERT INTO LINE_TBL VALUES ('{1,-1,1}'); +INSERT INTO LINE_TBL VALUES ('(0,0),(6,6)'); +INSERT INTO LINE_TBL VALUES ('10,-10 ,-3,-4'); +INSERT INTO LINE_TBL VALUES ('[-1e6,2e2,3e5, -4e1]'); +INSERT INTO LINE_TBL VALUES ('(11,22,33,44)'); +INSERT INTO LINE_TBL VALUES ('[(1,0),(1,0)]'); +ERROR: invalid line specification: must be two distinct points +LINE 1: INSERT INTO LINE_TBL VALUES ('[(1,0),(1,0)]'); + ^ +-- horizontal +INSERT INTO LINE_TBL VALUES ('[(1,3),(2,3)]'); +-- vertical +INSERT INTO LINE_TBL VALUES ('[(3,1),(3,2)]'); +-- bad values for parser testing +INSERT INTO LINE_TBL VALUES ('{0,0,1}'); +ERROR: invalid line specification: A and B cannot both be zero +LINE 1: INSERT INTO LINE_TBL VALUES ('{0,0,1}'); + ^ +INSERT INTO LINE_TBL VALUES ('(3asdf,2 ,3,4r2)'); +ERROR: invalid input syntax for type line: "(3asdf,2 ,3,4r2)" +LINE 1: INSERT INTO LINE_TBL VALUES ('(3asdf,2 ,3,4r2)'); + ^ +INSERT INTO LINE_TBL VALUES ('[1,2,3, 4'); +ERROR: invalid input syntax for type line: "[1,2,3, 4" +LINE 1: INSERT INTO LINE_TBL VALUES ('[1,2,3, 4'); + ^ +INSERT INTO LINE_TBL VALUES ('[(,2),(3,4)]'); +ERROR: invalid input syntax for type line: "[(,2),(3,4)]" +LINE 1: INSERT INTO LINE_TBL VALUES ('[(,2),(3,4)]'); + ^ +INSERT INTO LINE_TBL VALUES ('[(1,2),(3,4)'); +ERROR: invalid input syntax for type line: "[(1,2),(3,4)" +LINE 1: INSERT INTO LINE_TBL VALUES ('[(1,2),(3,4)'); + ^ +select * from LINE_TBL; + s +--------------------------------------------- + {1,-1,1} + {1,-1,0} + {-0.461538461538462,-1,-5.38461538461538} + {-0.000184615384615385,-1,15.3846153846154} + {1,-1,11} + {0,-1,3} + {-1,0,3} +(7 rows) + +-- functions and operators +SELECT * FROM LINE_TBL WHERE (s <-> line '[(1,2),(3,4)]') < 10; + s +--------------------------------------------- + {1,-1,1} + {1,-1,0} + {-0.461538461538462,-1,-5.38461538461538} + {-0.000184615384615385,-1,15.3846153846154} + {1,-1,11} + {0,-1,3} + {-1,0,3} +(7 rows) + +SELECT * FROM LINE_TBL WHERE (point '(0.1,0.1)' <-> s) < 1; + s +---------- + {1,-1,1} + {1,-1,0} +(2 rows) + +SELECT * FROM LINE_TBL WHERE (lseg '[(0.1,0.1),(0.2,0.2)]' <-> s) < 1; + s +---------- + {1,-1,1} + {1,-1,0} +(2 rows) + +SELECT line '[(1,1),(2,1)]' <-> line '[(-1,-1),(-2,-1)]'; + ?column? +---------- + 2 +(1 row) + +SELECT lseg '[(1,1),(2,1)]' <-> line '[(-1,-1),(-2,-1)]'; + ?column? +---------- + 2 +(1 row) + +SELECT point '(-1,1)' <-> line '[(-3,0),(-4,0)]'; + ?column? +---------- + 1 +(1 row) + +SELECT lseg '[(1,1),(5,5)]' ?# line '[(2,0),(0,2)]'; -- true + ?column? +---------- + t +(1 row) + +SELECT lseg '[(1,1),(5,5)]' ?# line '[(0,0),(1,0)]'; -- false + ?column? +---------- + f +(1 row) + +SELECT line '[(0,0),(1,1)]' ?# box '(0,0,2,2)'; -- true + ?column? +---------- + t +(1 row) + +SELECT line '[(3,0),(4,1)]' ?# box '(0,0,2,2)'; -- false + ?column? +---------- + f +(1 row) + +SELECT point '(1,1)' <@ line '[(0,0),(2,2)]'; -- true + ?column? +---------- + t +(1 row) + +SELECT point '(1,1)' <@ line '[(0,0),(1,0)]'; -- false + ?column? +---------- + f +(1 row) + +SELECT point '(1,1)' @ line '[(0,0),(2,2)]'; -- true + ?column? +---------- + t +(1 row) + +SELECT point '(1,1)' @ line '[(0,0),(1,0)]'; -- false + ?column? +---------- + f +(1 row) + +SELECT lseg '[(1,1),(2,2)]' <@ line '[(0,0),(2,2)]'; -- true + ?column? +---------- + t +(1 row) + +SELECT lseg '[(1,1),(2,1)]' <@ line '[(0,0),(1,0)]'; -- false + ?column? +---------- + f +(1 row) + +SELECT lseg '[(1,1),(2,2)]' @ line '[(0,0),(2,2)]'; -- true + ?column? +---------- + t +(1 row) + +SELECT lseg '[(1,1),(2,1)]' @ line '[(0,0),(1,0)]'; -- false + ?column? +---------- + f +(1 row) + +SELECT point '(0,1)' ## line '[(0,0),(1,1)]'; + ?column? +----------- + (0.5,0.5) +(1 row) + +SELECT line '[(0,0),(1,1)]' ## lseg '[(1,0),(2,0)]'; + ?column? +---------- + (1,0) +(1 row) + +SELECT line '[(0,0),(1,1)]' ?# line '[(1,0),(2,1)]'; -- false + ?column? +---------- + f +(1 row) + +SELECT line '[(0,0),(1,1)]' ?# line '[(1,0),(1,1)]'; -- true + ?column? +---------- + t +(1 row) + +SELECT line '[(0,0),(1,1)]' # line '[(1,0),(2,1)]'; + ?column? +---------- + +(1 row) + +SELECT line '[(0,0),(1,1)]' # line '[(1,0),(1,1)]'; + ?column? +---------- + (1,1) +(1 row) + +SELECT line '[(0,0),(1,1)]' ?|| line '[(1,0),(2,1)]'; -- true + ?column? +---------- + t +(1 row) + +SELECT line '[(0,0),(1,1)]' ?|| line '[(1,0),(1,1)]'; -- false + ?column? +---------- + f +(1 row) + +SELECT line '[(0,0),(1,0)]' ?-| line '[(0,0),(0,1)]'; -- true + ?column? +---------- + t +(1 row) + +SELECT line '[(0,0),(1,1)]' ?-| line '[(1,0),(1,1)]'; -- false + ?column? +---------- + f +(1 row) + +SELECT ?- line '[(0,0),(1,0)]'; -- true + ?column? +---------- + t +(1 row) + +SELECT ?- line '[(0,0),(1,1)]'; -- false + ?column? +---------- + f +(1 row) + +SELECT ?| line '[(0,0),(0,1)]'; -- true + ?column? +---------- + t +(1 row) + +SELECT ?| line '[(0,0),(1,1)]'; -- false + ?column? +---------- + f +(1 row) + +SELECT line(point '(1,2)', point '(3,4)'); + line +---------- + {1,-1,1} +(1 row) + +SELECT line '[(1,2),(3,4)]' = line '[(3,4),(4,5)]'; -- true + ?column? +---------- + t +(1 row) + +SELECT line '[(1,2),(3,4)]' = line '[(3,4),(4,4)]'; -- false + ?column? +---------- + f +(1 row) + diff --git a/src/test/regress/expected/sanity_check.out b/src/test/regress/expected/sanity_check.out index 432d39a4911..cee35aff3ab 100644 --- a/src/test/regress/expected/sanity_check.out +++ b/src/test/regress/expected/sanity_check.out @@ -64,6 +64,7 @@ SELECT relname, relhasindex interval_tbl | f iportaltest | f kd_point_tbl | t + line_tbl | f log_table | f lseg_tbl | f main_table | f @@ -166,7 +167,7 @@ SELECT relname, relhasindex timetz_tbl | f tinterval_tbl | f varchar_tbl | f -(155 rows) +(156 rows) -- -- another sanity check: every system catalog that has OIDs should have diff --git a/src/test/regress/output/misc.source b/src/test/regress/output/misc.source index 29cbb22fb85..e194f7ed5cd 100644 --- a/src/test/regress/output/misc.source +++ b/src/test/regress/output/misc.source @@ -638,6 +638,7 @@ SELECT user_relns() AS user_relns interval_tbl iportaltest kd_point_tbl + line_tbl log_table lseg_tbl main_table @@ -696,7 +697,7 @@ SELECT user_relns() AS user_relns tvvmv varchar_tbl xacttest -(118 rows) +(119 rows) SELECT name(equipment(hobby_construct(text 'skywalking', text 'mer'))); name diff --git a/src/test/regress/parallel_schedule b/src/test/regress/parallel_schedule index fd08e8ddf00..1c1491c3f3e 100644 --- a/src/test/regress/parallel_schedule +++ b/src/test/regress/parallel_schedule @@ -23,7 +23,7 @@ test: numerology # ---------- # The second group of parallel tests # ---------- -test: point lseg box path polygon circle date time timetz timestamp timestamptz interval abstime reltime tinterval inet macaddr tstypes comments +test: point lseg line box path polygon circle date time timetz timestamp timestamptz interval abstime reltime tinterval inet macaddr tstypes comments # ---------- # Another group of parallel tests diff --git a/src/test/regress/serial_schedule b/src/test/regress/serial_schedule index 1ed059be6ef..c4d451ab00c 100644 --- a/src/test/regress/serial_schedule +++ b/src/test/regress/serial_schedule @@ -23,6 +23,7 @@ test: strings test: numerology test: point test: lseg +test: line test: box test: path test: polygon diff --git a/src/test/regress/sql/geometry.sql b/src/test/regress/sql/geometry.sql index 73f8032bb15..af7f8a51cc7 100644 --- a/src/test/regress/sql/geometry.sql +++ b/src/test/regress/sql/geometry.sql @@ -59,10 +59,6 @@ SELECT '' AS thirty, p.f1, l.s, p.f1 ## l.s AS closest FROM LSEG_TBL l, POINT_TBL p; -- --- Lines --- - --- -- Boxes -- diff --git a/src/test/regress/sql/line.sql b/src/test/regress/sql/line.sql new file mode 100644 index 00000000000..cd9280be47d --- /dev/null +++ b/src/test/regress/sql/line.sql @@ -0,0 +1,87 @@ +-- +-- LINE +-- Infinite lines +-- + +--DROP TABLE LINE_TBL; +CREATE TABLE LINE_TBL (s line); + +INSERT INTO LINE_TBL VALUES ('{1,-1,1}'); +INSERT INTO LINE_TBL VALUES ('(0,0),(6,6)'); +INSERT INTO LINE_TBL VALUES ('10,-10 ,-3,-4'); +INSERT INTO LINE_TBL VALUES ('[-1e6,2e2,3e5, -4e1]'); +INSERT INTO LINE_TBL VALUES ('(11,22,33,44)'); + +INSERT INTO LINE_TBL VALUES ('[(1,0),(1,0)]'); + +-- horizontal +INSERT INTO LINE_TBL VALUES ('[(1,3),(2,3)]'); +-- vertical +INSERT INTO LINE_TBL VALUES ('[(3,1),(3,2)]'); + +-- bad values for parser testing +INSERT INTO LINE_TBL VALUES ('{0,0,1}'); +INSERT INTO LINE_TBL VALUES ('(3asdf,2 ,3,4r2)'); +INSERT INTO LINE_TBL VALUES ('[1,2,3, 4'); +INSERT INTO LINE_TBL VALUES ('[(,2),(3,4)]'); +INSERT INTO LINE_TBL VALUES ('[(1,2),(3,4)'); + +select * from LINE_TBL; + + +-- functions and operators + +SELECT * FROM LINE_TBL WHERE (s <-> line '[(1,2),(3,4)]') < 10; + +SELECT * FROM LINE_TBL WHERE (point '(0.1,0.1)' <-> s) < 1; + +SELECT * FROM LINE_TBL WHERE (lseg '[(0.1,0.1),(0.2,0.2)]' <-> s) < 1; + +SELECT line '[(1,1),(2,1)]' <-> line '[(-1,-1),(-2,-1)]'; +SELECT lseg '[(1,1),(2,1)]' <-> line '[(-1,-1),(-2,-1)]'; +SELECT point '(-1,1)' <-> line '[(-3,0),(-4,0)]'; + +SELECT lseg '[(1,1),(5,5)]' ?# line '[(2,0),(0,2)]'; -- true +SELECT lseg '[(1,1),(5,5)]' ?# line '[(0,0),(1,0)]'; -- false + +SELECT line '[(0,0),(1,1)]' ?# box '(0,0,2,2)'; -- true +SELECT line '[(3,0),(4,1)]' ?# box '(0,0,2,2)'; -- false + +SELECT point '(1,1)' <@ line '[(0,0),(2,2)]'; -- true +SELECT point '(1,1)' <@ line '[(0,0),(1,0)]'; -- false + +SELECT point '(1,1)' @ line '[(0,0),(2,2)]'; -- true +SELECT point '(1,1)' @ line '[(0,0),(1,0)]'; -- false + +SELECT lseg '[(1,1),(2,2)]' <@ line '[(0,0),(2,2)]'; -- true +SELECT lseg '[(1,1),(2,1)]' <@ line '[(0,0),(1,0)]'; -- false + +SELECT lseg '[(1,1),(2,2)]' @ line '[(0,0),(2,2)]'; -- true +SELECT lseg '[(1,1),(2,1)]' @ line '[(0,0),(1,0)]'; -- false + +SELECT point '(0,1)' ## line '[(0,0),(1,1)]'; + +SELECT line '[(0,0),(1,1)]' ## lseg '[(1,0),(2,0)]'; + +SELECT line '[(0,0),(1,1)]' ?# line '[(1,0),(2,1)]'; -- false +SELECT line '[(0,0),(1,1)]' ?# line '[(1,0),(1,1)]'; -- true + +SELECT line '[(0,0),(1,1)]' # line '[(1,0),(2,1)]'; +SELECT line '[(0,0),(1,1)]' # line '[(1,0),(1,1)]'; + +SELECT line '[(0,0),(1,1)]' ?|| line '[(1,0),(2,1)]'; -- true +SELECT line '[(0,0),(1,1)]' ?|| line '[(1,0),(1,1)]'; -- false + +SELECT line '[(0,0),(1,0)]' ?-| line '[(0,0),(0,1)]'; -- true +SELECT line '[(0,0),(1,1)]' ?-| line '[(1,0),(1,1)]'; -- false + +SELECT ?- line '[(0,0),(1,0)]'; -- true +SELECT ?- line '[(0,0),(1,1)]'; -- false + +SELECT ?| line '[(0,0),(0,1)]'; -- true +SELECT ?| line '[(0,0),(1,1)]'; -- false + +SELECT line(point '(1,2)', point '(3,4)'); + +SELECT line '[(1,2),(3,4)]' = line '[(3,4),(4,5)]'; -- true +SELECT line '[(1,2),(3,4)]' = line '[(3,4),(4,4)]'; -- false |
