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