-- -- 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 ,-5,-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.4,-1,-6} {-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.4,-1,-6} {-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)