1--
2-- LINE
3-- Infinite lines
4--
5--DROP TABLE LINE_TBL;
6CREATE TABLE LINE_TBL (s line);
7INSERT INTO LINE_TBL VALUES ('{1,-1,1}');
8INSERT INTO LINE_TBL VALUES ('(0,0),(6,6)');
9INSERT INTO LINE_TBL VALUES ('10,-10 ,-5,-4');
10INSERT INTO LINE_TBL VALUES ('[-1e6,2e2,3e5, -4e1]');
11INSERT INTO LINE_TBL VALUES ('(11,22,33,44)');
12INSERT INTO LINE_TBL VALUES ('[(1,0),(1,0)]');
13ERROR:  invalid line specification: must be two distinct points
14LINE 1: INSERT INTO LINE_TBL VALUES ('[(1,0),(1,0)]');
15                                     ^
16-- horizontal
17INSERT INTO LINE_TBL VALUES ('[(1,3),(2,3)]');
18-- vertical
19INSERT INTO LINE_TBL VALUES ('[(3,1),(3,2)]');
20-- bad values for parser testing
21INSERT INTO LINE_TBL VALUES ('{0,0,1}');
22ERROR:  invalid line specification: A and B cannot both be zero
23LINE 1: INSERT INTO LINE_TBL VALUES ('{0,0,1}');
24                                     ^
25INSERT INTO LINE_TBL VALUES ('(3asdf,2 ,3,4r2)');
26ERROR:  invalid input syntax for type line: "(3asdf,2 ,3,4r2)"
27LINE 1: INSERT INTO LINE_TBL VALUES ('(3asdf,2 ,3,4r2)');
28                                     ^
29INSERT INTO LINE_TBL VALUES ('[1,2,3, 4');
30ERROR:  invalid input syntax for type line: "[1,2,3, 4"
31LINE 1: INSERT INTO LINE_TBL VALUES ('[1,2,3, 4');
32                                     ^
33INSERT INTO LINE_TBL VALUES ('[(,2),(3,4)]');
34ERROR:  invalid input syntax for type line: "[(,2),(3,4)]"
35LINE 1: INSERT INTO LINE_TBL VALUES ('[(,2),(3,4)]');
36                                     ^
37INSERT INTO LINE_TBL VALUES ('[(1,2),(3,4)');
38ERROR:  invalid input syntax for type line: "[(1,2),(3,4)"
39LINE 1: INSERT INTO LINE_TBL VALUES ('[(1,2),(3,4)');
40                                     ^
41select * from LINE_TBL;
42                      s
43---------------------------------------------
44 {1,-1,1}
45 {1,-1,0}
46 {-0.4,-1,-6}
47 {-0.000184615384615385,-1,15.3846153846154}
48 {1,-1,11}
49 {0,-1,3}
50 {-1,0,3}
51(7 rows)
52
53-- functions and operators
54SELECT * FROM LINE_TBL WHERE (s <-> line '[(1,2),(3,4)]') < 10;
55                      s
56---------------------------------------------
57 {1,-1,1}
58 {1,-1,0}
59 {-0.4,-1,-6}
60 {-0.000184615384615385,-1,15.3846153846154}
61 {1,-1,11}
62 {0,-1,3}
63 {-1,0,3}
64(7 rows)
65
66SELECT * FROM LINE_TBL WHERE (point '(0.1,0.1)' <-> s) < 1;
67    s
68----------
69 {1,-1,1}
70 {1,-1,0}
71(2 rows)
72
73SELECT * FROM LINE_TBL WHERE (lseg '[(0.1,0.1),(0.2,0.2)]' <-> s) < 1;
74    s
75----------
76 {1,-1,1}
77 {1,-1,0}
78(2 rows)
79
80SELECT line '[(1,1),(2,1)]' <-> line '[(-1,-1),(-2,-1)]';
81 ?column?
82----------
83        2
84(1 row)
85
86SELECT lseg '[(1,1),(2,1)]' <-> line '[(-1,-1),(-2,-1)]';
87 ?column?
88----------
89        2
90(1 row)
91
92SELECT point '(-1,1)' <-> line '[(-3,0),(-4,0)]';
93 ?column?
94----------
95        1
96(1 row)
97
98SELECT lseg '[(1,1),(5,5)]' ?# line '[(2,0),(0,2)]';  -- true
99 ?column?
100----------
101 t
102(1 row)
103
104SELECT lseg '[(1,1),(5,5)]' ?# line '[(0,0),(1,0)]';  -- false
105 ?column?
106----------
107 f
108(1 row)
109
110SELECT line '[(0,0),(1,1)]' ?# box '(0,0,2,2)';  -- true
111 ?column?
112----------
113 t
114(1 row)
115
116SELECT line '[(3,0),(4,1)]' ?# box '(0,0,2,2)';  -- false
117 ?column?
118----------
119 f
120(1 row)
121
122SELECT point '(1,1)' <@ line '[(0,0),(2,2)]';  -- true
123 ?column?
124----------
125 t
126(1 row)
127
128SELECT point '(1,1)' <@ line '[(0,0),(1,0)]';  -- false
129 ?column?
130----------
131 f
132(1 row)
133
134SELECT point '(1,1)' @ line '[(0,0),(2,2)]';  -- true
135 ?column?
136----------
137 t
138(1 row)
139
140SELECT point '(1,1)' @ line '[(0,0),(1,0)]';  -- false
141 ?column?
142----------
143 f
144(1 row)
145
146SELECT lseg '[(1,1),(2,2)]' <@ line '[(0,0),(2,2)]';  -- true
147 ?column?
148----------
149 t
150(1 row)
151
152SELECT lseg '[(1,1),(2,1)]' <@ line '[(0,0),(1,0)]';  -- false
153 ?column?
154----------
155 f
156(1 row)
157
158SELECT lseg '[(1,1),(2,2)]' @ line '[(0,0),(2,2)]';  -- true
159 ?column?
160----------
161 t
162(1 row)
163
164SELECT lseg '[(1,1),(2,1)]' @ line '[(0,0),(1,0)]';  -- false
165 ?column?
166----------
167 f
168(1 row)
169
170SELECT point '(0,1)' ## line '[(0,0),(1,1)]';
171 ?column?
172-----------
173 (0.5,0.5)
174(1 row)
175
176SELECT line '[(0,0),(1,1)]' ## lseg '[(1,0),(2,0)]';
177 ?column?
178----------
179 (1,0)
180(1 row)
181
182SELECT line '[(0,0),(1,1)]' ?# line '[(1,0),(2,1)]';  -- false
183 ?column?
184----------
185 f
186(1 row)
187
188SELECT line '[(0,0),(1,1)]' ?# line '[(1,0),(1,1)]';  -- true
189 ?column?
190----------
191 t
192(1 row)
193
194SELECT line '[(0,0),(1,1)]' # line '[(1,0),(2,1)]';
195 ?column?
196----------
197
198(1 row)
199
200SELECT line '[(0,0),(1,1)]' # line '[(1,0),(1,1)]';
201 ?column?
202----------
203 (1,1)
204(1 row)
205
206SELECT line '[(0,0),(1,1)]' ?|| line '[(1,0),(2,1)]';  -- true
207 ?column?
208----------
209 t
210(1 row)
211
212SELECT line '[(0,0),(1,1)]' ?|| line '[(1,0),(1,1)]';  -- false
213 ?column?
214----------
215 f
216(1 row)
217
218SELECT line '[(0,0),(1,0)]' ?-| line '[(0,0),(0,1)]';  -- true
219 ?column?
220----------
221 t
222(1 row)
223
224SELECT line '[(0,0),(1,1)]' ?-| line '[(1,0),(1,1)]';  -- false
225 ?column?
226----------
227 f
228(1 row)
229
230SELECT ?- line '[(0,0),(1,0)]';  -- true
231 ?column?
232----------
233 t
234(1 row)
235
236SELECT ?- line '[(0,0),(1,1)]';  -- false
237 ?column?
238----------
239 f
240(1 row)
241
242SELECT ?| line '[(0,0),(0,1)]';  -- true
243 ?column?
244----------
245 t
246(1 row)
247
248SELECT ?| line '[(0,0),(1,1)]';  -- false
249 ?column?
250----------
251 f
252(1 row)
253
254SELECT line(point '(1,2)', point '(3,4)');
255   line
256----------
257 {1,-1,1}
258(1 row)
259
260SELECT line '[(1,2),(3,4)]' = line '[(3,4),(4,5)]';  -- true
261 ?column?
262----------
263 t
264(1 row)
265
266SELECT line '[(1,2),(3,4)]' = line '[(3,4),(4,4)]';  -- false
267 ?column?
268----------
269 f
270(1 row)
271
272