272 lines
5.2 KiB
Plaintext
272 lines
5.2 KiB
Plaintext
--
|
|
-- 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)
|
|
|