-- does not depend on contents of cube.sql.
--
\set ECHO none
-psql:cube.sql:10: NOTICE: type "cube" is not yet defined
-DETAIL: Creating a shell type definition.
-psql:cube.sql:15: NOTICE: argument type cube is only a shell
+psql:cube.sql:12: NOTICE: ProcedureCreate: type cube is not yet defined
+psql:cube.sql:17: NOTICE: Argument type "cube" is only a shell
--
-- testing the input and output functions
--
(1 row)
SELECT '1234567890123456'::cube AS cube;
- cube
-------------------------
- (1.23456789012346e+15)
+ cube
+--------------------
+ (1234567890123456)
(1 row)
SELECT '+1234567890123456'::cube AS cube;
- cube
-------------------------
- (1.23456789012346e+15)
+ cube
+--------------------
+ (1234567890123456)
(1 row)
SELECT '-1234567890123456'::cube AS cube;
- cube
--------------------------
- (-1.23456789012346e+15)
+ cube
+---------------------
+ (-1234567890123456)
(1 row)
SELECT '.1234567890123456'::cube AS cube;
- cube
----------------------
- (0.123456789012346)
+ cube
+----------------------
+ (0.1234567890123456)
(1 row)
SELECT '+.1234567890123456'::cube AS cube;
- cube
----------------------
- (0.123456789012346)
+ cube
+----------------------
+ (0.1234567890123456)
(1 row)
SELECT '-.1234567890123456'::cube AS cube;
- cube
-----------------------
- (-0.123456789012346)
+ cube
+-----------------------
+ (-0.1234567890123456)
(1 row)
-- simple lists (points)
-- invalid input: parse errors
SELECT ''::cube AS cube;
-ERROR: bad cube representation
-DETAIL: syntax error at end of input
+ERROR: cube_in: can't parse an empty string
SELECT 'ABC'::cube AS cube;
-ERROR: bad cube representation
-DETAIL: syntax error at or near "A"
+ERROR: parse error at or before position 1, character ('A', \101), input: 'ABC'
+
SELECT '()'::cube AS cube;
-ERROR: bad cube representation
-DETAIL: syntax error at or near ")"
+ERROR: parse error at or before position 2, character (')', \051), input: '()'
+
SELECT '[]'::cube AS cube;
-ERROR: bad cube representation
-DETAIL: syntax error at or near "]"
+ERROR: parse error at or before position 2, character (']', \135), input: '[]'
+
SELECT '[()]'::cube AS cube;
-ERROR: bad cube representation
-DETAIL: syntax error at or near ")"
+ERROR: parse error at or before position 3, character (')', \051), input: '[()]'
+
SELECT '[(1)]'::cube AS cube;
-ERROR: bad cube representation
-DETAIL: syntax error at or near "]"
+ERROR: parse error at or before position 5, character (']', \135), input: '[(1)]'
+
SELECT '[(1),]'::cube AS cube;
-ERROR: bad cube representation
-DETAIL: syntax error at or near "]"
+ERROR: parse error at or before position 6, character (']', \135), input: '[(1),]'
+
SELECT '[(1),2]'::cube AS cube;
-ERROR: bad cube representation
-DETAIL: syntax error at or near "2"
+ERROR: parse error at or before position 7, character (']', \135), input: '[(1),2]'
+
SELECT '[(1),(2),(3)]'::cube AS cube;
-ERROR: bad cube representation
-DETAIL: syntax error at or near ","
+ERROR: parse error at or before position 9, character (',', \054), input: '[(1),(2),(3)]'
+
SELECT '1,'::cube AS cube;
-ERROR: bad cube representation
-DETAIL: syntax error at end of input
+ERROR: parse error at or before position 2, character (',', \054), input: '1,'
+
SELECT '1,2,'::cube AS cube;
-ERROR: bad cube representation
-DETAIL: syntax error at end of input
+ERROR: parse error at or before position 4, character (',', \054), input: '1,2,'
+
SELECT '1,,2'::cube AS cube;
-ERROR: bad cube representation
-DETAIL: syntax error at or near ","
+ERROR: parse error at or before position 3, character (',', \054), input: '1,,2'
+
SELECT '(1,)'::cube AS cube;
-ERROR: bad cube representation
-DETAIL: syntax error at or near ")"
+ERROR: parse error at or before position 4, character (')', \051), input: '(1,)'
+
SELECT '(1,2,)'::cube AS cube;
-ERROR: bad cube representation
-DETAIL: syntax error at or near ")"
+ERROR: parse error at or before position 6, character (')', \051), input: '(1,2,)'
+
SELECT '(1,,2)'::cube AS cube;
-ERROR: bad cube representation
-DETAIL: syntax error at or near ","
+ERROR: parse error at or before position 4, character (',', \054), input: '(1,,2)'
+
-- invalid input: semantic errors and trailing garbage
SELECT '[(1),(2)],'::cube AS cube; -- 0
-ERROR: bad cube representation
-DETAIL: syntax error at or near ","
+ERROR: (0) bad cube representation; garbage at or before char 9, (',', \054)
+
SELECT '[(1,2,3),(2,3)]'::cube AS cube; -- 1
-ERROR: bad cube representation
-DETAIL: different point dimensions in (1,2,3) and (2,3)
+ERROR: (1) bad cube representation; different point dimensions in (1,2,3) and (2,3)
+
SELECT '[(1,2),(1,2,3)]'::cube AS cube; -- 1
-ERROR: bad cube representation
-DETAIL: different point dimensions in (1,2) and (1,2,3)
+ERROR: (1) bad cube representation; different point dimensions in (1,2) and (1,2,3)
+
SELECT '(1),(2),'::cube AS cube; -- 2
-ERROR: bad cube representation
-DETAIL: syntax error at or near ","
+ERROR: (2) bad cube representation; garbage at or before char 7, (',', \054)
+
SELECT '(1,2,3),(2,3)'::cube AS cube; -- 3
-ERROR: bad cube representation
-DETAIL: different point dimensions in (1,2,3) and (2,3)
+ERROR: (3) bad cube representation; different point dimensions in (1,2,3) and (2,3)
+
SELECT '(1,2),(1,2,3)'::cube AS cube; -- 3
-ERROR: bad cube representation
-DETAIL: different point dimensions in (1,2) and (1,2,3)
-SELECT '(1,2,3)ab'::cube AS cube; -- 4
-ERROR: bad cube representation
-DETAIL: syntax error at or near "a"
-SELECT '(1,2,3)a'::cube AS cube; -- 5
-ERROR: bad cube representation
-DETAIL: syntax error at or near "a"
-SELECT '(1,2)('::cube AS cube; -- 5
-ERROR: bad cube representation
-DETAIL: syntax error at or near "("
-SELECT '1,2ab'::cube AS cube; -- 6
-ERROR: bad cube representation
-DETAIL: syntax error at or near "a"
-SELECT '1 e7'::cube AS cube; -- 6
-ERROR: bad cube representation
-DETAIL: syntax error at or near "e"
-SELECT '1,2a'::cube AS cube; -- 7
-ERROR: bad cube representation
-DETAIL: syntax error at or near "a"
-SELECT '1..2'::cube AS cube; -- 7
-ERROR: bad cube representation
-DETAIL: syntax error at or near ".2"
---
--- Testing building cubes from float8 values
---
-SELECT cube(0::float8);
- cube
-------
- (0)
-(1 row)
+ERROR: (3) bad cube representation; different point dimensions in (1,2) and (1,2,3)
-SELECT cube(1::float8);
- cube
-------
- (1)
-(1 row)
+SELECT '(1,2,3)ab'::cube AS cube; -- 4
+ERROR: (4) bad cube representation; garbage at or before char 8, ('b', \142)
-SELECT cube(1,2);
- cube
----------
- (1),(2)
-(1 row)
+SELECT '(1,2,3)a'::cube AS cube; -- 5
+ERROR: (5) bad cube representation; garbage at or before char 8, ('end of input', \000)
-SELECT cube(cube(1,2),3);
- cube
----------------
- (1, 3),(2, 3)
-(1 row)
+SELECT '(1,2)('::cube AS cube; -- 5
+ERROR: (5) bad cube representation; garbage at or before char 6, ('end of input', \000)
-SELECT cube(cube(1,2),3,4);
- cube
----------------
- (1, 3),(2, 4)
-(1 row)
+SELECT '1,2ab'::cube AS cube; -- 6
+ERROR: (6) bad cube representation; garbage at or before char 4, ('b', \142)
-SELECT cube(cube(cube(1,2),3,4),5);
- cube
----------------------
- (1, 3, 5),(2, 4, 5)
-(1 row)
+SELECT '1 e7'::cube AS cube; -- 6
+ERROR: (6) bad cube representation; garbage at or before char 3, ('7', \067)
-SELECT cube(cube(cube(1,2),3,4),5,6);
- cube
----------------------
- (1, 3, 5),(2, 4, 6)
-(1 row)
+SELECT '1,2a'::cube AS cube; -- 7
+ERROR: (7) bad cube representation; garbage at or before char 4, ('end of input', \000)
---
--- Test that the text -> cube cast was installed.
---
-SELECT '(0)'::text::cube;
- cube
-------
- (0)
-(1 row)
+SELECT '1..2'::cube AS cube; -- 7
+ERROR: (7) bad cube representation; garbage at or before char 4, ('end of input', \000)
--
-- Testing limit of CUBE_MAX_DIM dimensions check in cube_in.
--
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;
-ERROR: bad cube representation
-DETAIL: more than 100 dimensions
+ERROR: (8) bad cube representation; more than 100 dimensions
+
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;
-ERROR: bad cube representation
-DETAIL: more than 100 dimensions
+ERROR: (8) bad cube representation; more than 100 dimensions
+
--
-- testing the operators
--
SELECT '(2,0),(3,1)'::cube = '(2,0,0,0,0),(3,1,0,0,0)'::cube AS bool;
bool
------
- f
+ t
(1 row)
SELECT '(2,0),(3,1)'::cube = '(2,0,0,0,0),(3,1,0,0,1)'::cube AS bool;
f
(1 row)
+-- "overlap on the left" / "overlap on the right"
+-- (these operators are not useful at all but R-tree seems to be
+-- sensitive to their presence)
+--
+SELECT '1'::cube &< '0'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '1'::cube &< '1'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '1'::cube &< '2'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '(0),(1)'::cube &< '0'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(0),(1)'::cube &< '1'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '(0),(1)'::cube &< '(0),(0.5)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(0),(1)'::cube &< '(0),(1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(0),(1)'::cube &< '(0),(2)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(0),(1)'::cube &< '(1),(2)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '(0),(1)'::cube &< '(2),(3)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '0'::cube &> '1'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '1'::cube &> '1'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '2'::cube &> '1'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '0'::cube &> '(0),(1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '1'::cube &> '(0),(1)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '(0),(0.5)' &> '(0),(1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(0),(1)'::cube &> '(0),(1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(0),(2)'::cube &> '(0),(1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(1),(2)'::cube &> '(0),(1)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '(2),(3)'::cube &> '(0),(1)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+-- "left" / "right"
+-- (these operators are not useful but for 1-D or 2-D cubes, but R-tree
+-- seems to want them defined)
+--
+SELECT '1'::cube << '0'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '1'::cube << '1'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '1'::cube << '2'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(0),(1)'::cube << '0'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '(0),(1)'::cube << '1'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(0),(1)'::cube << '(0),(0.5)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '(0),(1)'::cube << '(0),(1)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '(0),(1)'::cube << '(0),(2)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '(0),(1)'::cube << '(1),(2)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(0),(1)'::cube << '(2),(3)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '0'::cube >> '1'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '1'::cube >> '1'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '2'::cube >> '1'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '0'::cube >> '(0),(1)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '1'::cube >> '(0),(1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(0),(0.5)' >> '(0),(1)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '(0),(1)'::cube >> '(0),(1)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '(0),(2)'::cube >> '(0),(1)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '(1),(2)'::cube >> '(0),(1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(2),(3)'::cube >> '(0),(1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
-- "contained in" (the left operand is the cube entirely enclosed by
-- the right operand):
--