~vcs-imports/mammoth-replicator/trunk

« back to all changes in this revision

Viewing changes to contrib/cube/expected/cube_2.out

  • Committer: alvherre
  • Date: 2005-12-16 21:24:52 UTC
  • Revision ID: svn-v4:db760fc0-0f08-0410-9d63-cc6633f64896:trunk:1
Initial import of the REL8_0_3 sources from the Pgsql CVS repository.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
--
 
2
--  Test cube datatype
 
3
--
 
4
--
 
5
-- first, define the datatype.  Turn off echoing so that expected file
 
6
-- does not depend on contents of cube.sql.
 
7
--
 
8
\set ECHO none
 
9
psql:cube.sql:10: NOTICE:  type "cube" is not yet defined
 
10
DETAIL:  Creating a shell type definition.
 
11
psql:cube.sql:15: NOTICE:  argument type cube is only a shell
 
12
--
 
13
-- testing the input and output functions
 
14
--
 
15
-- Any number (a one-dimensional point)
 
16
SELECT '1'::cube AS cube;
 
17
 cube 
 
18
------
 
19
 (1)
 
20
(1 row)
 
21
 
 
22
SELECT '-1'::cube AS cube;
 
23
 cube 
 
24
------
 
25
 (-1)
 
26
(1 row)
 
27
 
 
28
SELECT '1.'::cube AS cube;
 
29
 cube 
 
30
------
 
31
 (1)
 
32
(1 row)
 
33
 
 
34
SELECT '-1.'::cube AS cube;
 
35
 cube 
 
36
------
 
37
 (-1)
 
38
(1 row)
 
39
 
 
40
SELECT '.1'::cube AS cube;
 
41
 cube  
 
42
-------
 
43
 (0.1)
 
44
(1 row)
 
45
 
 
46
SELECT '-.1'::cube AS cube;
 
47
  cube  
 
48
--------
 
49
 (-0.1)
 
50
(1 row)
 
51
 
 
52
SELECT '1.0'::cube AS cube;
 
53
 cube 
 
54
------
 
55
 (1)
 
56
(1 row)
 
57
 
 
58
SELECT '-1.0'::cube AS cube;
 
59
 cube 
 
60
------
 
61
 (-1)
 
62
(1 row)
 
63
 
 
64
SELECT '1e27'::cube AS cube;
 
65
   cube   
 
66
----------
 
67
 (1e+027)
 
68
(1 row)
 
69
 
 
70
SELECT '-1e27'::cube AS cube;
 
71
   cube    
 
72
-----------
 
73
 (-1e+027)
 
74
(1 row)
 
75
 
 
76
SELECT '1.0e27'::cube AS cube;
 
77
   cube   
 
78
----------
 
79
 (1e+027)
 
80
(1 row)
 
81
 
 
82
SELECT '-1.0e27'::cube AS cube;
 
83
   cube    
 
84
-----------
 
85
 (-1e+027)
 
86
(1 row)
 
87
 
 
88
SELECT '1e+27'::cube AS cube;
 
89
   cube   
 
90
----------
 
91
 (1e+027)
 
92
(1 row)
 
93
 
 
94
SELECT '-1e+27'::cube AS cube;
 
95
   cube    
 
96
-----------
 
97
 (-1e+027)
 
98
(1 row)
 
99
 
 
100
SELECT '1.0e+27'::cube AS cube;
 
101
   cube   
 
102
----------
 
103
 (1e+027)
 
104
(1 row)
 
105
 
 
106
SELECT '-1.0e+27'::cube AS cube;
 
107
   cube    
 
108
-----------
 
109
 (-1e+027)
 
110
(1 row)
 
111
 
 
112
SELECT '1e-7'::cube AS cube;
 
113
   cube   
 
114
----------
 
115
 (1e-007)
 
116
(1 row)
 
117
 
 
118
SELECT '-1e-7'::cube AS cube;
 
119
   cube    
 
120
-----------
 
121
 (-1e-007)
 
122
(1 row)
 
123
 
 
124
SELECT '1.0e-7'::cube AS cube;
 
125
   cube   
 
126
----------
 
127
 (1e-007)
 
128
(1 row)
 
129
 
 
130
SELECT '-1.0e-7'::cube AS cube;
 
131
   cube    
 
132
-----------
 
133
 (-1e-007)
 
134
(1 row)
 
135
 
 
136
SELECT '1e-700'::cube AS cube;
 
137
 cube 
 
138
------
 
139
 (0)
 
140
(1 row)
 
141
 
 
142
SELECT '-1e-700'::cube AS cube;
 
143
 cube 
 
144
------
 
145
 (0)
 
146
(1 row)
 
147
 
 
148
SELECT '1234567890123456'::cube AS cube;
 
149
          cube           
 
150
-------------------------
 
151
 (1.23456789012346e+015)
 
152
(1 row)
 
153
 
 
154
SELECT '+1234567890123456'::cube AS cube;
 
155
          cube           
 
156
-------------------------
 
157
 (1.23456789012346e+015)
 
158
(1 row)
 
159
 
 
160
SELECT '-1234567890123456'::cube AS cube;
 
161
           cube           
 
162
--------------------------
 
163
 (-1.23456789012346e+015)
 
164
(1 row)
 
165
 
 
166
SELECT '.1234567890123456'::cube AS cube;
 
167
        cube         
 
168
---------------------
 
169
 (0.123456789012346)
 
170
(1 row)
 
171
 
 
172
SELECT '+.1234567890123456'::cube AS cube;
 
173
        cube         
 
174
---------------------
 
175
 (0.123456789012346)
 
176
(1 row)
 
177
 
 
178
SELECT '-.1234567890123456'::cube AS cube;
 
179
         cube         
 
180
----------------------
 
181
 (-0.123456789012346)
 
182
(1 row)
 
183
 
 
184
-- simple lists (points)
 
185
SELECT '1,2'::cube AS cube;
 
186
  cube  
 
187
--------
 
188
 (1, 2)
 
189
(1 row)
 
190
 
 
191
SELECT '(1,2)'::cube AS cube;
 
192
  cube  
 
193
--------
 
194
 (1, 2)
 
195
(1 row)
 
196
 
 
197
SELECT '1,2,3,4,5'::cube AS cube;
 
198
      cube       
 
199
-----------------
 
200
 (1, 2, 3, 4, 5)
 
201
(1 row)
 
202
 
 
203
SELECT '(1,2,3,4,5)'::cube AS cube;
 
204
      cube       
 
205
-----------------
 
206
 (1, 2, 3, 4, 5)
 
207
(1 row)
 
208
 
 
209
-- double lists (cubes)
 
210
SELECT '(0),(0)'::cube AS cube;
 
211
 cube 
 
212
------
 
213
 (0)
 
214
(1 row)
 
215
 
 
216
SELECT '(0),(1)'::cube AS cube;
 
217
  cube   
 
218
---------
 
219
 (0),(1)
 
220
(1 row)
 
221
 
 
222
SELECT '[(0),(0)]'::cube AS cube;
 
223
 cube 
 
224
------
 
225
 (0)
 
226
(1 row)
 
227
 
 
228
SELECT '[(0),(1)]'::cube AS cube;
 
229
  cube   
 
230
---------
 
231
 (0),(1)
 
232
(1 row)
 
233
 
 
234
SELECT '(0,0,0,0),(0,0,0,0)'::cube AS cube;
 
235
     cube     
 
236
--------------
 
237
 (0, 0, 0, 0)
 
238
(1 row)
 
239
 
 
240
SELECT '(0,0,0,0),(1,0,0,0)'::cube AS cube;
 
241
           cube            
 
242
---------------------------
 
243
 (0, 0, 0, 0),(1, 0, 0, 0)
 
244
(1 row)
 
245
 
 
246
SELECT '[(0,0,0,0),(0,0,0,0)]'::cube AS cube;
 
247
     cube     
 
248
--------------
 
249
 (0, 0, 0, 0)
 
250
(1 row)
 
251
 
 
252
SELECT '[(0,0,0,0),(1,0,0,0)]'::cube AS cube;
 
253
           cube            
 
254
---------------------------
 
255
 (0, 0, 0, 0),(1, 0, 0, 0)
 
256
(1 row)
 
257
 
 
258
-- invalid input: parse errors
 
259
SELECT ''::cube AS cube;
 
260
ERROR:  bad cube representation
 
261
DETAIL:  syntax error at end of input
 
262
SELECT 'ABC'::cube AS cube;
 
263
ERROR:  bad cube representation
 
264
DETAIL:  syntax error at or near "A"
 
265
SELECT '()'::cube AS cube;
 
266
ERROR:  bad cube representation
 
267
DETAIL:  syntax error at or near ")"
 
268
SELECT '[]'::cube AS cube;
 
269
ERROR:  bad cube representation
 
270
DETAIL:  syntax error at or near "]"
 
271
SELECT '[()]'::cube AS cube;
 
272
ERROR:  bad cube representation
 
273
DETAIL:  syntax error at or near ")"
 
274
SELECT '[(1)]'::cube AS cube;
 
275
ERROR:  bad cube representation
 
276
DETAIL:  syntax error at or near "]"
 
277
SELECT '[(1),]'::cube AS cube;
 
278
ERROR:  bad cube representation
 
279
DETAIL:  syntax error at or near "]"
 
280
SELECT '[(1),2]'::cube AS cube;
 
281
ERROR:  bad cube representation
 
282
DETAIL:  syntax error at or near "2"
 
283
SELECT '[(1),(2),(3)]'::cube AS cube;
 
284
ERROR:  bad cube representation
 
285
DETAIL:  syntax error at or near ","
 
286
SELECT '1,'::cube AS cube;
 
287
ERROR:  bad cube representation
 
288
DETAIL:  syntax error at end of input
 
289
SELECT '1,2,'::cube AS cube;
 
290
ERROR:  bad cube representation
 
291
DETAIL:  syntax error at end of input
 
292
SELECT '1,,2'::cube AS cube;
 
293
ERROR:  bad cube representation
 
294
DETAIL:  syntax error at or near ","
 
295
SELECT '(1,)'::cube AS cube;
 
296
ERROR:  bad cube representation
 
297
DETAIL:  syntax error at or near ")"
 
298
SELECT '(1,2,)'::cube AS cube;
 
299
ERROR:  bad cube representation
 
300
DETAIL:  syntax error at or near ")"
 
301
SELECT '(1,,2)'::cube AS cube;
 
302
ERROR:  bad cube representation
 
303
DETAIL:  syntax error at or near ","
 
304
-- invalid input: semantic errors and trailing garbage
 
305
SELECT '[(1),(2)],'::cube AS cube; -- 0
 
306
ERROR:  bad cube representation
 
307
DETAIL:  syntax error at or near ","
 
308
SELECT '[(1,2,3),(2,3)]'::cube AS cube; -- 1
 
309
ERROR:  bad cube representation
 
310
DETAIL:  different point dimensions in (1,2,3) and (2,3)
 
311
SELECT '[(1,2),(1,2,3)]'::cube AS cube; -- 1
 
312
ERROR:  bad cube representation
 
313
DETAIL:  different point dimensions in (1,2) and (1,2,3)
 
314
SELECT '(1),(2),'::cube AS cube; -- 2
 
315
ERROR:  bad cube representation
 
316
DETAIL:  syntax error at or near ","
 
317
SELECT '(1,2,3),(2,3)'::cube AS cube; -- 3
 
318
ERROR:  bad cube representation
 
319
DETAIL:  different point dimensions in (1,2,3) and (2,3)
 
320
SELECT '(1,2),(1,2,3)'::cube AS cube; -- 3
 
321
ERROR:  bad cube representation
 
322
DETAIL:  different point dimensions in (1,2) and (1,2,3)
 
323
SELECT '(1,2,3)ab'::cube AS cube; -- 4
 
324
ERROR:  bad cube representation
 
325
DETAIL:  syntax error at or near "a"
 
326
SELECT '(1,2,3)a'::cube AS cube; -- 5
 
327
ERROR:  bad cube representation
 
328
DETAIL:  syntax error at or near "a"
 
329
SELECT '(1,2)('::cube AS cube; -- 5
 
330
ERROR:  bad cube representation
 
331
DETAIL:  syntax error at or near "("
 
332
SELECT '1,2ab'::cube AS cube; -- 6
 
333
ERROR:  bad cube representation
 
334
DETAIL:  syntax error at or near "a"
 
335
SELECT '1 e7'::cube AS cube; -- 6
 
336
ERROR:  bad cube representation
 
337
DETAIL:  syntax error at or near "e"
 
338
SELECT '1,2a'::cube AS cube; -- 7
 
339
ERROR:  bad cube representation
 
340
DETAIL:  syntax error at or near "a"
 
341
SELECT '1..2'::cube AS cube; -- 7
 
342
ERROR:  bad cube representation
 
343
DETAIL:  syntax error at or near ".2"
 
344
--
 
345
-- Testing building cubes from float8 values
 
346
--
 
347
SELECT cube(0::float8);
 
348
 cube 
 
349
------
 
350
 (0)
 
351
(1 row)
 
352
 
 
353
SELECT cube(1::float8);
 
354
 cube 
 
355
------
 
356
 (1)
 
357
(1 row)
 
358
 
 
359
SELECT cube(1,2);
 
360
  cube   
 
361
---------
 
362
 (1),(2)
 
363
(1 row)
 
364
 
 
365
SELECT cube(cube(1,2),3);
 
366
     cube      
 
367
---------------
 
368
 (1, 3),(2, 3)
 
369
(1 row)
 
370
 
 
371
SELECT cube(cube(1,2),3,4);
 
372
     cube      
 
373
---------------
 
374
 (1, 3),(2, 4)
 
375
(1 row)
 
376
 
 
377
SELECT cube(cube(cube(1,2),3,4),5);
 
378
        cube         
 
379
---------------------
 
380
 (1, 3, 5),(2, 4, 5)
 
381
(1 row)
 
382
 
 
383
SELECT cube(cube(cube(1,2),3,4),5,6);
 
384
        cube         
 
385
---------------------
 
386
 (1, 3, 5),(2, 4, 6)
 
387
(1 row)
 
388
 
 
389
--
 
390
-- Test that the text -> cube cast was installed.
 
391
--
 
392
SELECT '(0)'::text::cube;
 
393
 cube 
 
394
------
 
395
 (0)
 
396
(1 row)
 
397
 
 
398
--
 
399
-- Testing limit of CUBE_MAX_DIM dimensions check in cube_in.
 
400
--
 
401
select '(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)'::cube;
 
402
ERROR:  bad cube representation
 
403
DETAIL:  more than 100 dimensions
 
404
select '(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)'::cube;
 
405
ERROR:  bad cube representation
 
406
DETAIL:  more than 100 dimensions
 
407
--
 
408
-- testing the  operators
 
409
--
 
410
-- equality/inequality:
 
411
--
 
412
SELECT '24, 33.20'::cube    =  '24, 33.20'::cube AS bool;
 
413
 bool 
 
414
------
 
415
 t
 
416
(1 row)
 
417
 
 
418
SELECT '24, 33.20'::cube    != '24, 33.20'::cube AS bool;
 
419
 bool 
 
420
------
 
421
 f
 
422
(1 row)
 
423
 
 
424
SELECT '24, 33.20'::cube    =  '24, 33.21'::cube AS bool;
 
425
 bool 
 
426
------
 
427
 f
 
428
(1 row)
 
429
 
 
430
SELECT '24, 33.20'::cube    != '24, 33.21'::cube AS bool;
 
431
 bool 
 
432
------
 
433
 t
 
434
(1 row)
 
435
 
 
436
SELECT '(2,0),(3,1)'::cube  =  '(2,0,0,0,0),(3,1,0,0,0)'::cube AS bool;
 
437
 bool 
 
438
------
 
439
 f
 
440
(1 row)
 
441
 
 
442
SELECT '(2,0),(3,1)'::cube  =  '(2,0,0,0,0),(3,1,0,0,1)'::cube AS bool;
 
443
 bool 
 
444
------
 
445
 f
 
446
(1 row)
 
447
 
 
448
-- "lower than" / "greater than"
 
449
-- (these operators are not useful for anything but ordering)
 
450
--
 
451
SELECT '1'::cube   > '2'::cube AS bool;
 
452
 bool 
 
453
------
 
454
 f
 
455
(1 row)
 
456
 
 
457
SELECT '1'::cube   < '2'::cube AS bool;
 
458
 bool 
 
459
------
 
460
 t
 
461
(1 row)
 
462
 
 
463
SELECT '1,1'::cube > '1,2'::cube AS bool;
 
464
 bool 
 
465
------
 
466
 f
 
467
(1 row)
 
468
 
 
469
SELECT '1,1'::cube < '1,2'::cube AS bool;
 
470
 bool 
 
471
------
 
472
 t
 
473
(1 row)
 
474
 
 
475
SELECT '(2,0),(3,1)'::cube             > '(2,0,0,0,0),(3,1,0,0,1)'::cube AS bool;
 
476
 bool 
 
477
------
 
478
 f
 
479
(1 row)
 
480
 
 
481
SELECT '(2,0),(3,1)'::cube             < '(2,0,0,0,0),(3,1,0,0,1)'::cube AS bool;
 
482
 bool 
 
483
------
 
484
 t
 
485
(1 row)
 
486
 
 
487
SELECT '(2,0),(3,1)'::cube             > '(2,0,0,0,1),(3,1,0,0,0)'::cube AS bool;
 
488
 bool 
 
489
------
 
490
 f
 
491
(1 row)
 
492
 
 
493
SELECT '(2,0),(3,1)'::cube             < '(2,0,0,0,1),(3,1,0,0,0)'::cube AS bool;
 
494
 bool 
 
495
------
 
496
 t
 
497
(1 row)
 
498
 
 
499
SELECT '(2,0),(3,1)'::cube             > '(2,0,0,0,0),(3,1,0,0,0)'::cube AS bool;
 
500
 bool 
 
501
------
 
502
 f
 
503
(1 row)
 
504
 
 
505
SELECT '(2,0),(3,1)'::cube             < '(2,0,0,0,0),(3,1,0,0,0)'::cube AS bool;
 
506
 bool 
 
507
------
 
508
 t
 
509
(1 row)
 
510
 
 
511
SELECT '(2,0,0,0,0),(3,1,0,0,1)'::cube > '(2,0),(3,1)'::cube AS bool;
 
512
 bool 
 
513
------
 
514
 t
 
515
(1 row)
 
516
 
 
517
SELECT '(2,0,0,0,0),(3,1,0,0,1)'::cube < '(2,0),(3,1)'::cube AS bool;
 
518
 bool 
 
519
------
 
520
 f
 
521
(1 row)
 
522
 
 
523
SELECT '(2,0,0,0,1),(3,1,0,0,0)'::cube > '(2,0),(3,1)'::cube AS bool;
 
524
 bool 
 
525
------
 
526
 t
 
527
(1 row)
 
528
 
 
529
SELECT '(2,0,0,0,1),(3,1,0,0,0)'::cube < '(2,0),(3,1)'::cube AS bool;
 
530
 bool 
 
531
------
 
532
 f
 
533
(1 row)
 
534
 
 
535
SELECT '(2,0,0,0,0),(3,1,0,0,0)'::cube > '(2,0),(3,1)'::cube AS bool;
 
536
 bool 
 
537
------
 
538
 t
 
539
(1 row)
 
540
 
 
541
SELECT '(2,0,0,0,0),(3,1,0,0,0)'::cube < '(2,0),(3,1)'::cube AS bool;
 
542
 bool 
 
543
------
 
544
 f
 
545
(1 row)
 
546
 
 
547
-- "overlap"
 
548
--
 
549
SELECT '1'::cube && '1'::cube AS bool;
 
550
 bool 
 
551
------
 
552
 t
 
553
(1 row)
 
554
 
 
555
SELECT '1'::cube && '2'::cube AS bool;
 
556
 bool 
 
557
------
 
558
 f
 
559
(1 row)
 
560
 
 
561
SELECT '[(-1,-1,-1),(1,1,1)]'::cube && '0'::cube AS bool;
 
562
 bool 
 
563
------
 
564
 t
 
565
(1 row)
 
566
 
 
567
SELECT '[(-1,-1,-1),(1,1,1)]'::cube && '1'::cube AS bool;
 
568
 bool 
 
569
------
 
570
 t
 
571
(1 row)
 
572
 
 
573
SELECT '[(-1,-1,-1),(1,1,1)]'::cube && '1,1,1'::cube AS bool;
 
574
 bool 
 
575
------
 
576
 t
 
577
(1 row)
 
578
 
 
579
SELECT '[(-1,-1,-1),(1,1,1)]'::cube && '[(1,1,1),(2,2,2)]'::cube AS bool;
 
580
 bool 
 
581
------
 
582
 t
 
583
(1 row)
 
584
 
 
585
SELECT '[(-1,-1,-1),(1,1,1)]'::cube && '[(1,1),(2,2)]'::cube AS bool;
 
586
 bool 
 
587
------
 
588
 t
 
589
(1 row)
 
590
 
 
591
SELECT '[(-1,-1,-1),(1,1,1)]'::cube && '[(2,1,1),(2,2,2)]'::cube AS bool;
 
592
 bool 
 
593
------
 
594
 f
 
595
(1 row)
 
596
 
 
597
-- "overlap on the left" / "overlap on the right"
 
598
-- (these operators are not useful at all but R-tree seems to be
 
599
-- sensitive to their presence)
 
600
--
 
601
SELECT '1'::cube &< '0'::cube AS bool;
 
602
 bool 
 
603
------
 
604
 f
 
605
(1 row)
 
606
 
 
607
SELECT '1'::cube &< '1'::cube AS bool;
 
608
 bool 
 
609
------
 
610
 t
 
611
(1 row)
 
612
 
 
613
SELECT '1'::cube &< '2'::cube AS bool;
 
614
 bool 
 
615
------
 
616
 f
 
617
(1 row)
 
618
 
 
619
SELECT '(0),(1)'::cube &< '0'::cube AS bool;
 
620
 bool 
 
621
------
 
622
 t
 
623
(1 row)
 
624
 
 
625
SELECT '(0),(1)'::cube &< '1'::cube AS bool;
 
626
 bool 
 
627
------
 
628
 f
 
629
(1 row)
 
630
 
 
631
SELECT '(0),(1)'::cube &< '(0),(0.5)'::cube AS bool;
 
632
 bool 
 
633
------
 
634
 t
 
635
(1 row)
 
636
 
 
637
SELECT '(0),(1)'::cube &< '(0),(1)'::cube AS bool;
 
638
 bool 
 
639
------
 
640
 t
 
641
(1 row)
 
642
 
 
643
SELECT '(0),(1)'::cube &< '(0),(2)'::cube AS bool;
 
644
 bool 
 
645
------
 
646
 t
 
647
(1 row)
 
648
 
 
649
SELECT '(0),(1)'::cube &< '(1),(2)'::cube AS bool;
 
650
 bool 
 
651
------
 
652
 f
 
653
(1 row)
 
654
 
 
655
SELECT '(0),(1)'::cube &< '(2),(3)'::cube AS bool;
 
656
 bool 
 
657
------
 
658
 f
 
659
(1 row)
 
660
 
 
661
SELECT '0'::cube &> '1'::cube AS bool;
 
662
 bool 
 
663
------
 
664
 f
 
665
(1 row)
 
666
 
 
667
SELECT '1'::cube &> '1'::cube AS bool;
 
668
 bool 
 
669
------
 
670
 t
 
671
(1 row)
 
672
 
 
673
SELECT '2'::cube &> '1'::cube AS bool;
 
674
 bool 
 
675
------
 
676
 f
 
677
(1 row)
 
678
 
 
679
SELECT '0'::cube        &> '(0),(1)'::cube AS bool;
 
680
 bool 
 
681
------
 
682
 t
 
683
(1 row)
 
684
 
 
685
SELECT '1'::cube        &> '(0),(1)'::cube AS bool;
 
686
 bool 
 
687
------
 
688
 f
 
689
(1 row)
 
690
 
 
691
SELECT '(0),(0.5)'      &> '(0),(1)'::cube AS bool;
 
692
 bool 
 
693
------
 
694
 t
 
695
(1 row)
 
696
 
 
697
SELECT '(0),(1)'::cube  &> '(0),(1)'::cube AS bool;
 
698
 bool 
 
699
------
 
700
 t
 
701
(1 row)
 
702
 
 
703
SELECT '(0),(2)'::cube  &> '(0),(1)'::cube AS bool;
 
704
 bool 
 
705
------
 
706
 t
 
707
(1 row)
 
708
 
 
709
SELECT '(1),(2)'::cube  &> '(0),(1)'::cube AS bool;
 
710
 bool 
 
711
------
 
712
 f
 
713
(1 row)
 
714
 
 
715
SELECT '(2),(3)'::cube  &> '(0),(1)'::cube AS bool;
 
716
 bool 
 
717
------
 
718
 f
 
719
(1 row)
 
720
 
 
721
-- "left" / "right"
 
722
-- (these operators are not useful but for 1-D or 2-D cubes, but R-tree
 
723
-- seems to want them defined)
 
724
--
 
725
SELECT '1'::cube << '0'::cube AS bool;
 
726
 bool 
 
727
------
 
728
 f
 
729
(1 row)
 
730
 
 
731
SELECT '1'::cube << '1'::cube AS bool;
 
732
 bool 
 
733
------
 
734
 f
 
735
(1 row)
 
736
 
 
737
SELECT '1'::cube << '2'::cube AS bool;
 
738
 bool 
 
739
------
 
740
 t
 
741
(1 row)
 
742
 
 
743
SELECT '(0),(1)'::cube << '0'::cube AS bool;
 
744
 bool 
 
745
------
 
746
 f
 
747
(1 row)
 
748
 
 
749
SELECT '(0),(1)'::cube << '1'::cube AS bool;
 
750
 bool 
 
751
------
 
752
 t
 
753
(1 row)
 
754
 
 
755
SELECT '(0),(1)'::cube << '(0),(0.5)'::cube AS bool;
 
756
 bool 
 
757
------
 
758
 f
 
759
(1 row)
 
760
 
 
761
SELECT '(0),(1)'::cube << '(0),(1)'::cube AS bool;
 
762
 bool 
 
763
------
 
764
 f
 
765
(1 row)
 
766
 
 
767
SELECT '(0),(1)'::cube << '(0),(2)'::cube AS bool;
 
768
 bool 
 
769
------
 
770
 f
 
771
(1 row)
 
772
 
 
773
SELECT '(0),(1)'::cube << '(1),(2)'::cube AS bool;
 
774
 bool 
 
775
------
 
776
 t
 
777
(1 row)
 
778
 
 
779
SELECT '(0),(1)'::cube << '(2),(3)'::cube AS bool;
 
780
 bool 
 
781
------
 
782
 t
 
783
(1 row)
 
784
 
 
785
SELECT '0'::cube >> '1'::cube AS bool;
 
786
 bool 
 
787
------
 
788
 f
 
789
(1 row)
 
790
 
 
791
SELECT '1'::cube >> '1'::cube AS bool;
 
792
 bool 
 
793
------
 
794
 f
 
795
(1 row)
 
796
 
 
797
SELECT '2'::cube >> '1'::cube AS bool;
 
798
 bool 
 
799
------
 
800
 t
 
801
(1 row)
 
802
 
 
803
SELECT '0'::cube        >> '(0),(1)'::cube AS bool;
 
804
 bool 
 
805
------
 
806
 f
 
807
(1 row)
 
808
 
 
809
SELECT '1'::cube        >> '(0),(1)'::cube AS bool;
 
810
 bool 
 
811
------
 
812
 t
 
813
(1 row)
 
814
 
 
815
SELECT '(0),(0.5)'      >> '(0),(1)'::cube AS bool;
 
816
 bool 
 
817
------
 
818
 f
 
819
(1 row)
 
820
 
 
821
SELECT '(0),(1)'::cube  >> '(0),(1)'::cube AS bool;
 
822
 bool 
 
823
------
 
824
 f
 
825
(1 row)
 
826
 
 
827
SELECT '(0),(2)'::cube  >> '(0),(1)'::cube AS bool;
 
828
 bool 
 
829
------
 
830
 f
 
831
(1 row)
 
832
 
 
833
SELECT '(1),(2)'::cube  >> '(0),(1)'::cube AS bool;
 
834
 bool 
 
835
------
 
836
 t
 
837
(1 row)
 
838
 
 
839
SELECT '(2),(3)'::cube  >> '(0),(1)'::cube AS bool;
 
840
 bool 
 
841
------
 
842
 t
 
843
(1 row)
 
844
 
 
845
-- "contained in" (the left operand is the cube entirely enclosed by
 
846
-- the right operand):
 
847
--
 
848
SELECT '0'::cube                 ~ '0'::cube                        AS bool;
 
849
 bool 
 
850
------
 
851
 t
 
852
(1 row)
 
853
 
 
854
SELECT '0,0,0'::cube             ~ '0,0,0'::cube                    AS bool;
 
855
 bool 
 
856
------
 
857
 t
 
858
(1 row)
 
859
 
 
860
SELECT '0,0'::cube               ~ '0,0,1'::cube                    AS bool;
 
861
 bool 
 
862
------
 
863
 t
 
864
(1 row)
 
865
 
 
866
SELECT '0,0,0'::cube             ~ '0,0,1'::cube                    AS bool;
 
867
 bool 
 
868
------
 
869
 f
 
870
(1 row)
 
871
 
 
872
SELECT '1,0,0'::cube             ~ '0,0,1'::cube                    AS bool;
 
873
 bool 
 
874
------
 
875
 f
 
876
(1 row)
 
877
 
 
878
SELECT '(1,0,0),(0,0,1)'::cube   ~ '(1,0,0),(0,0,1)'::cube          AS bool;
 
879
 bool 
 
880
------
 
881
 t
 
882
(1 row)
 
883
 
 
884
SELECT '(1,0,0),(0,0,1)'::cube   ~ '(-1,-1,-1),(1,1,1)'::cube       AS bool;
 
885
 bool 
 
886
------
 
887
 t
 
888
(1 row)
 
889
 
 
890
SELECT '(1,0,0),(0,0,1)'::cube   ~ '(-1,-1,-1,-1),(1,1,1,1)'::cube  AS bool;
 
891
 bool 
 
892
------
 
893
 t
 
894
(1 row)
 
895
 
 
896
SELECT '0'::cube                 ~ '(-1),(1)'::cube                 AS bool;
 
897
 bool 
 
898
------
 
899
 t
 
900
(1 row)
 
901
 
 
902
SELECT '1'::cube                 ~ '(-1),(1)'::cube                 AS bool;
 
903
 bool 
 
904
------
 
905
 t
 
906
(1 row)
 
907
 
 
908
SELECT '-1'::cube                ~ '(-1),(1)'::cube                 AS bool;
 
909
 bool 
 
910
------
 
911
 t
 
912
(1 row)
 
913
 
 
914
SELECT '(-1),(1)'::cube          ~ '(-1),(1)'::cube                 AS bool;
 
915
 bool 
 
916
------
 
917
 t
 
918
(1 row)
 
919
 
 
920
SELECT '(-1),(1)'::cube          ~ '(-1,-1),(1,1)'::cube            AS bool;
 
921
 bool 
 
922
------
 
923
 t
 
924
(1 row)
 
925
 
 
926
SELECT '(-2),(1)'::cube          ~ '(-1),(1)'::cube                 AS bool;
 
927
 bool 
 
928
------
 
929
 f
 
930
(1 row)
 
931
 
 
932
SELECT '(-2),(1)'::cube          ~ '(-1,-1),(1,1)'::cube            AS bool;
 
933
 bool 
 
934
------
 
935
 f
 
936
(1 row)
 
937
 
 
938
-- "contains" (the left operand is the cube that entirely encloses the
 
939
-- right operand)
 
940
--
 
941
SELECT '0'::cube                        @ '0'::cube                 AS bool;
 
942
 bool 
 
943
------
 
944
 t
 
945
(1 row)
 
946
 
 
947
SELECT '0,0,0'::cube                    @ '0,0,0'::cube             AS bool;
 
948
 bool 
 
949
------
 
950
 t
 
951
(1 row)
 
952
 
 
953
SELECT '0,0,1'::cube                    @ '0,0'::cube               AS bool;
 
954
 bool 
 
955
------
 
956
 t
 
957
(1 row)
 
958
 
 
959
SELECT '0,0,1'::cube                    @ '0,0,0'::cube             AS bool;
 
960
 bool 
 
961
------
 
962
 f
 
963
(1 row)
 
964
 
 
965
SELECT '0,0,1'::cube                    @ '1,0,0'::cube             AS bool;
 
966
 bool 
 
967
------
 
968
 f
 
969
(1 row)
 
970
 
 
971
SELECT '(1,0,0),(0,0,1)'::cube          @ '(1,0,0),(0,0,1)'::cube   AS bool;
 
972
 bool 
 
973
------
 
974
 t
 
975
(1 row)
 
976
 
 
977
SELECT '(-1,-1,-1),(1,1,1)'::cube       @ '(1,0,0),(0,0,1)'::cube   AS bool;
 
978
 bool 
 
979
------
 
980
 t
 
981
(1 row)
 
982
 
 
983
SELECT '(-1,-1,-1,-1),(1,1,1,1)'::cube  @ '(1,0,0),(0,0,1)'::cube   AS bool;
 
984
 bool 
 
985
------
 
986
 t
 
987
(1 row)
 
988
 
 
989
SELECT '(-1),(1)'::cube                 @ '0'::cube                 AS bool;
 
990
 bool 
 
991
------
 
992
 t
 
993
(1 row)
 
994
 
 
995
SELECT '(-1),(1)'::cube                 @ '1'::cube                 AS bool;
 
996
 bool 
 
997
------
 
998
 t
 
999
(1 row)
 
1000
 
 
1001
SELECT '(-1),(1)'::cube                 @ '-1'::cube                AS bool;
 
1002
 bool 
 
1003
------
 
1004
 t
 
1005
(1 row)
 
1006
 
 
1007
SELECT '(-1),(1)'::cube                 @ '(-1),(1)'::cube          AS bool;
 
1008
 bool 
 
1009
------
 
1010
 t
 
1011
(1 row)
 
1012
 
 
1013
SELECT '(-1,-1),(1,1)'::cube            @ '(-1),(1)'::cube          AS bool;
 
1014
 bool 
 
1015
------
 
1016
 t
 
1017
(1 row)
 
1018
 
 
1019
SELECT '(-1),(1)'::cube                 @ '(-2),(1)'::cube          AS bool;
 
1020
 bool 
 
1021
------
 
1022
 f
 
1023
(1 row)
 
1024
 
 
1025
SELECT '(-1,-1),(1,1)'::cube            @ '(-2),(1)'::cube          AS bool;
 
1026
 bool 
 
1027
------
 
1028
 f
 
1029
(1 row)
 
1030
 
 
1031
-- Test of distance function
 
1032
--
 
1033
SELECT cube_distance('(0)'::cube,'(2,2,2,2)'::cube);
 
1034
 cube_distance 
 
1035
---------------
 
1036
             4
 
1037
(1 row)
 
1038
 
 
1039
SELECT cube_distance('(0)'::cube,'(.3,.4)'::cube);
 
1040
 cube_distance 
 
1041
---------------
 
1042
           0.5
 
1043
(1 row)
 
1044
 
 
1045
-- Test of cube function (text to cube)
 
1046
--
 
1047
SELECT cube('('||1||','||1.2||')');
 
1048
   cube   
 
1049
----------
 
1050
 (1, 1.2)
 
1051
(1 row)
 
1052
 
 
1053
SELECT cube(NULL);
 
1054
 cube 
 
1055
------
 
1056
 
 
1057
(1 row)
 
1058
 
 
1059
-- Test of cube_dim function (dimensions stored in cube)
 
1060
--
 
1061
SELECT cube_dim('(0)'::cube);
 
1062
 cube_dim 
 
1063
----------
 
1064
        1
 
1065
(1 row)
 
1066
 
 
1067
SELECT cube_dim('(0,0)'::cube);
 
1068
 cube_dim 
 
1069
----------
 
1070
        2
 
1071
(1 row)
 
1072
 
 
1073
SELECT cube_dim('(0,0,0)'::cube);
 
1074
 cube_dim 
 
1075
----------
 
1076
        3
 
1077
(1 row)
 
1078
 
 
1079
-- Test of cube_ll_coord function (retrieves LL coodinate values)
 
1080
--
 
1081
SELECT cube_ll_coord('(-1,1),(2,-2)'::cube, 1);
 
1082
 cube_ll_coord 
 
1083
---------------
 
1084
            -1
 
1085
(1 row)
 
1086
 
 
1087
SELECT cube_ll_coord('(-1,1),(2,-2)'::cube, 2);
 
1088
 cube_ll_coord 
 
1089
---------------
 
1090
            -2
 
1091
(1 row)
 
1092
 
 
1093
SELECT cube_ll_coord('(-1,1),(2,-2)'::cube, 3);
 
1094
 cube_ll_coord 
 
1095
---------------
 
1096
             0
 
1097
(1 row)
 
1098
 
 
1099
-- Test of cube_ur_coord function (retrieves UR coodinate values)
 
1100
--
 
1101
SELECT cube_ur_coord('(-1,1),(2,-2)'::cube, 1);
 
1102
 cube_ur_coord 
 
1103
---------------
 
1104
             2
 
1105
(1 row)
 
1106
 
 
1107
SELECT cube_ur_coord('(-1,1),(2,-2)'::cube, 2);
 
1108
 cube_ur_coord 
 
1109
---------------
 
1110
             1
 
1111
(1 row)
 
1112
 
 
1113
SELECT cube_ur_coord('(-1,1),(2,-2)'::cube, 3);
 
1114
 cube_ur_coord 
 
1115
---------------
 
1116
             0
 
1117
(1 row)
 
1118
 
 
1119
-- Test of cube_is_point
 
1120
--
 
1121
SELECT cube_is_point('(0)'::cube);
 
1122
 cube_is_point 
 
1123
---------------
 
1124
 t
 
1125
(1 row)
 
1126
 
 
1127
SELECT cube_is_point('(0,1,2)'::cube);
 
1128
 cube_is_point 
 
1129
---------------
 
1130
 t
 
1131
(1 row)
 
1132
 
 
1133
SELECT cube_is_point('(0,1,2),(0,1,2)'::cube);
 
1134
 cube_is_point 
 
1135
---------------
 
1136
 t
 
1137
(1 row)
 
1138
 
 
1139
SELECT cube_is_point('(0,1,2),(-1,1,2)'::cube);
 
1140
 cube_is_point 
 
1141
---------------
 
1142
 f
 
1143
(1 row)
 
1144
 
 
1145
SELECT cube_is_point('(0,1,2),(0,-1,2)'::cube);
 
1146
 cube_is_point 
 
1147
---------------
 
1148
 f
 
1149
(1 row)
 
1150
 
 
1151
SELECT cube_is_point('(0,1,2),(0,1,-2)'::cube);
 
1152
 cube_is_point 
 
1153
---------------
 
1154
 f
 
1155
(1 row)
 
1156
 
 
1157
-- Test of cube_enlarge (enlarging and shrinking cubes)
 
1158
--
 
1159
SELECT cube_enlarge('(0)'::cube, 0, 0);
 
1160
 cube_enlarge 
 
1161
--------------
 
1162
 (0)
 
1163
(1 row)
 
1164
 
 
1165
SELECT cube_enlarge('(0)'::cube, 0, 1);
 
1166
 cube_enlarge 
 
1167
--------------
 
1168
 (0)
 
1169
(1 row)
 
1170
 
 
1171
SELECT cube_enlarge('(0)'::cube, 0, 2);
 
1172
 cube_enlarge 
 
1173
--------------
 
1174
 (0)
 
1175
(1 row)
 
1176
 
 
1177
SELECT cube_enlarge('(2),(-2)'::cube, 0, 4);
 
1178
 cube_enlarge 
 
1179
--------------
 
1180
 (-2),(2)
 
1181
(1 row)
 
1182
 
 
1183
SELECT cube_enlarge('(0)'::cube, 1, 0);
 
1184
 cube_enlarge 
 
1185
--------------
 
1186
 (-1),(1)
 
1187
(1 row)
 
1188
 
 
1189
SELECT cube_enlarge('(0)'::cube, 1, 1);
 
1190
 cube_enlarge 
 
1191
--------------
 
1192
 (-1),(1)
 
1193
(1 row)
 
1194
 
 
1195
SELECT cube_enlarge('(0)'::cube, 1, 2);
 
1196
  cube_enlarge   
 
1197
-----------------
 
1198
 (-1, -1),(1, 1)
 
1199
(1 row)
 
1200
 
 
1201
SELECT cube_enlarge('(2),(-2)'::cube, 1, 4);
 
1202
         cube_enlarge          
 
1203
-------------------------------
 
1204
 (-3, -1, -1, -1),(3, 1, 1, 1)
 
1205
(1 row)
 
1206
 
 
1207
SELECT cube_enlarge('(0)'::cube, -1, 0);
 
1208
 cube_enlarge 
 
1209
--------------
 
1210
 (0)
 
1211
(1 row)
 
1212
 
 
1213
SELECT cube_enlarge('(0)'::cube, -1, 1);
 
1214
 cube_enlarge 
 
1215
--------------
 
1216
 (0)
 
1217
(1 row)
 
1218
 
 
1219
SELECT cube_enlarge('(0)'::cube, -1, 2);
 
1220
 cube_enlarge 
 
1221
--------------
 
1222
 (0)
 
1223
(1 row)
 
1224
 
 
1225
SELECT cube_enlarge('(2),(-2)'::cube, -1, 4);
 
1226
 cube_enlarge 
 
1227
--------------
 
1228
 (-1),(1)
 
1229
(1 row)
 
1230
 
 
1231
SELECT cube_enlarge('(0,0,0)'::cube, 1, 0);
 
1232
      cube_enlarge      
 
1233
------------------------
 
1234
 (-1, -1, -1),(1, 1, 1)
 
1235
(1 row)
 
1236
 
 
1237
SELECT cube_enlarge('(0,0,0)'::cube, 1, 2);
 
1238
      cube_enlarge      
 
1239
------------------------
 
1240
 (-1, -1, -1),(1, 1, 1)
 
1241
(1 row)
 
1242
 
 
1243
SELECT cube_enlarge('(2,-2),(-3,7)'::cube, 1, 2);
 
1244
  cube_enlarge   
 
1245
-----------------
 
1246
 (-4, -3),(3, 8)
 
1247
(1 row)
 
1248
 
 
1249
SELECT cube_enlarge('(2,-2),(-3,7)'::cube, 3, 2);
 
1250
   cube_enlarge   
 
1251
------------------
 
1252
 (-6, -5),(5, 10)
 
1253
(1 row)
 
1254
 
 
1255
SELECT cube_enlarge('(2,-2),(-3,7)'::cube, -1, 2);
 
1256
  cube_enlarge   
 
1257
-----------------
 
1258
 (-2, -1),(1, 6)
 
1259
(1 row)
 
1260
 
 
1261
SELECT cube_enlarge('(2,-2),(-3,7)'::cube, -3, 2);
 
1262
    cube_enlarge     
 
1263
---------------------
 
1264
 (-0.5, 1),(-0.5, 4)
 
1265
(1 row)
 
1266
 
 
1267
-- Load some example data and build the index
 
1268
-- 
 
1269
CREATE TABLE test_cube (c cube);
 
1270
\copy test_cube from 'data/test_cube.data'
 
1271
CREATE INDEX test_cube_ix ON test_cube USING gist (c);
 
1272
SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)';
 
1273
            c             
 
1274
--------------------------
 
1275
 (2424, 160),(2424, 81)
 
1276
 (759, 187),(662, 163)
 
1277
 (1444, 403),(1346, 344)
 
1278
 (337, 455),(240, 359)
 
1279
 (1594, 1043),(1517, 971)
 
1280
(5 rows)
 
1281
 
 
1282
-- Test sorting 
 
1283
SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' GROUP BY c;
 
1284
            c             
 
1285
--------------------------
 
1286
 (337, 455),(240, 359)
 
1287
 (759, 187),(662, 163)
 
1288
 (1444, 403),(1346, 344)
 
1289
 (1594, 1043),(1517, 971)
 
1290
 (2424, 160),(2424, 81)
 
1291
(5 rows)
 
1292