1-- 2-- LINE 3-- Infinite lines 4-- 5 6--DROP TABLE LINE_TBL; 7CREATE TABLE LINE_TBL (s line); 8 9INSERT INTO LINE_TBL VALUES ('{1,-1,1}'); 10INSERT INTO LINE_TBL VALUES ('(0,0),(6,6)'); 11INSERT INTO LINE_TBL VALUES ('10,-10 ,-5,-4'); 12INSERT INTO LINE_TBL VALUES ('[-1e6,2e2,3e5, -4e1]'); 13INSERT INTO LINE_TBL VALUES ('(11,22,33,44)'); 14 15INSERT INTO LINE_TBL VALUES ('[(1,0),(1,0)]'); 16 17-- horizontal 18INSERT INTO LINE_TBL VALUES ('[(1,3),(2,3)]'); 19-- vertical 20INSERT INTO LINE_TBL VALUES ('[(3,1),(3,2)]'); 21 22-- bad values for parser testing 23INSERT INTO LINE_TBL VALUES ('{0,0,1}'); 24INSERT INTO LINE_TBL VALUES ('(3asdf,2 ,3,4r2)'); 25INSERT INTO LINE_TBL VALUES ('[1,2,3, 4'); 26INSERT INTO LINE_TBL VALUES ('[(,2),(3,4)]'); 27INSERT INTO LINE_TBL VALUES ('[(1,2),(3,4)'); 28 29select * from LINE_TBL; 30 31 32-- functions and operators 33 34SELECT * FROM LINE_TBL WHERE (s <-> line '[(1,2),(3,4)]') < 10; 35 36SELECT * FROM LINE_TBL WHERE (point '(0.1,0.1)' <-> s) < 1; 37 38SELECT * FROM LINE_TBL WHERE (lseg '[(0.1,0.1),(0.2,0.2)]' <-> s) < 1; 39 40SELECT line '[(1,1),(2,1)]' <-> line '[(-1,-1),(-2,-1)]'; 41SELECT lseg '[(1,1),(2,1)]' <-> line '[(-1,-1),(-2,-1)]'; 42SELECT point '(-1,1)' <-> line '[(-3,0),(-4,0)]'; 43 44SELECT lseg '[(1,1),(5,5)]' ?# line '[(2,0),(0,2)]'; -- true 45SELECT lseg '[(1,1),(5,5)]' ?# line '[(0,0),(1,0)]'; -- false 46 47SELECT line '[(0,0),(1,1)]' ?# box '(0,0,2,2)'; -- true 48SELECT line '[(3,0),(4,1)]' ?# box '(0,0,2,2)'; -- false 49 50SELECT point '(1,1)' <@ line '[(0,0),(2,2)]'; -- true 51SELECT point '(1,1)' <@ line '[(0,0),(1,0)]'; -- false 52 53SELECT point '(1,1)' @ line '[(0,0),(2,2)]'; -- true 54SELECT point '(1,1)' @ line '[(0,0),(1,0)]'; -- false 55 56SELECT lseg '[(1,1),(2,2)]' <@ line '[(0,0),(2,2)]'; -- true 57SELECT lseg '[(1,1),(2,1)]' <@ line '[(0,0),(1,0)]'; -- false 58 59SELECT lseg '[(1,1),(2,2)]' @ line '[(0,0),(2,2)]'; -- true 60SELECT lseg '[(1,1),(2,1)]' @ line '[(0,0),(1,0)]'; -- false 61 62SELECT point '(0,1)' ## line '[(0,0),(1,1)]'; 63 64SELECT line '[(0,0),(1,1)]' ## lseg '[(1,0),(2,0)]'; 65 66SELECT line '[(0,0),(1,1)]' ?# line '[(1,0),(2,1)]'; -- false 67SELECT line '[(0,0),(1,1)]' ?# line '[(1,0),(1,1)]'; -- true 68 69SELECT line '[(0,0),(1,1)]' # line '[(1,0),(2,1)]'; 70SELECT line '[(0,0),(1,1)]' # line '[(1,0),(1,1)]'; 71 72SELECT line '[(0,0),(1,1)]' ?|| line '[(1,0),(2,1)]'; -- true 73SELECT line '[(0,0),(1,1)]' ?|| line '[(1,0),(1,1)]'; -- false 74 75SELECT line '[(0,0),(1,0)]' ?-| line '[(0,0),(0,1)]'; -- true 76SELECT line '[(0,0),(1,1)]' ?-| line '[(1,0),(1,1)]'; -- false 77 78SELECT ?- line '[(0,0),(1,0)]'; -- true 79SELECT ?- line '[(0,0),(1,1)]'; -- false 80 81SELECT ?| line '[(0,0),(0,1)]'; -- true 82SELECT ?| line '[(0,0),(1,1)]'; -- false 83 84SELECT line(point '(1,2)', point '(3,4)'); 85 86SELECT line '[(1,2),(3,4)]' = line '[(3,4),(4,5)]'; -- true 87SELECT line '[(1,2),(3,4)]' = line '[(3,4),(4,4)]'; -- false 88