update regression expected files to what I think is correct.
/******************************************************************************
- $PostgreSQL: pgsql/contrib/cube/cube.c,v 1.27 2006/07/25 23:23:44 momjian Exp $
+ $PostgreSQL: pgsql/contrib/cube/cube.c,v 1.28 2006/07/27 21:55:09 tgl Exp $
This file contains routines that can be bound to a Postgres backend and
called by the backend in the process of processing queries. The calling
#include "access/gist.h"
#include "access/skey.h"
#include "lib/stringinfo.h"
+#include "utils/array.h"
#include "utils/builtins.h"
#include "cubedata.h"
PG_MODULE_MAGIC;
+/*
+ * Taken from the intarray contrib header
+ */
+#define ARRPTR(x) ( (double *) ARR_DATA_PTR(x) )
+#define ARRNELEMS(x) ArrayGetNItems( ARR_NDIM(x), ARR_DIMS(x))
+
extern int cube_yyparse();
extern void cube_yyerror(const char *message);
extern void cube_scanner_init(const char *str);
}
-#include "utils/array.h"
-
-/*
-** Taken from the intarray contrib header
-*/
-#define ARRPTR(x) ( (double *) ARR_DATA_PTR(x) )
-#define ARRNELEMS(x) ArrayGetNItems( ARR_NDIM(x), ARR_DIMS(x))
-
-
/*
** Allows the construction of a cube from 2 float[]'s
*/
a = (NDBOX *) PG_GETARG_POINTER(0);
b = (NDBOX *) PG_GETARG_POINTER(1);
- PG_RETURN_INT16(cube_cmp_v0(a, b));
+ PG_RETURN_INT32(cube_cmp_v0(a, b));
}
c = (NDBOX *) PG_GETARG_POINTER(0);
- PG_RETURN_INT16 (c->dim);
+ PG_RETURN_INT32(c->dim);
}
/* Return a specific normalized LL coordinate */
SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' ORDER BY c;
c
--------------------------
- (1594, 1043),(1517, 971)
(337, 455),(240, 359)
- (1444, 403),(1346, 344)
(759, 187),(662, 163)
+ (1444, 403),(1346, 344)
+ (1594, 1043),(1517, 971)
(2424, 160),(2424, 81)
(5 rows)
SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' GROUP BY c ORDER BY c;
c
--------------------------
- (1594, 1043),(1517, 971)
(337, 455),(240, 359)
- (1444, 403),(1346, 344)
(759, 187),(662, 163)
+ (1444, 403),(1346, 344)
+ (1594, 1043),(1517, 971)
(2424, 160),(2424, 81)
(5 rows)
SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' ORDER BY c;
c
--------------------------
- (1594, 1043),(1517, 971)
(337, 455),(240, 359)
- (1444, 403),(1346, 344)
(759, 187),(662, 163)
+ (1444, 403),(1346, 344)
+ (1594, 1043),(1517, 971)
(2424, 160),(2424, 81)
(5 rows)
SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' GROUP BY c ORDER BY c;
c
--------------------------
- (1594, 1043),(1517, 971)
(337, 455),(240, 359)
- (1444, 403),(1346, 344)
(759, 187),(662, 163)
+ (1444, 403),(1346, 344)
+ (1594, 1043),(1517, 971)
(2424, 160),(2424, 81)
(5 rows)
-- first, define the datatype. Turn off echoing so that expected file
-- does not depend on contents of cube.sql.
--
+SET client_min_messages = warning;
\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
+RESET client_min_messages;
--
-- testing the input and output functions
--
(0)
(1 row)
+--
+-- Test the float[] -> cube cast
+--
+SELECT cube('{0,1,2}'::float[], '{3,4,5}'::float[]);
+ cube
+---------------------
+ (0, 1, 2),(3, 4, 5)
+(1 row)
+
+SELECT cube('{0,1,2}'::float[], '{3}'::float[]);
+ERROR: UR and LL arrays must be of same length
+SELECT cube(NULL::float[], '{3}'::float[]);
+ cube
+------
+
+(1 row)
+
+SELECT cube('{0,1,2}'::float[]);
+ cube
+-----------
+ (0, 1, 2)
+(1 row)
+
+SELECT cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[3,2,1,1]);
+ cube_subset
+---------------------------
+ (5, 3, 1, 1),(8, 7, 6, 6)
+(1 row)
+
+SELECT cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[4,0]);
+ERROR: Index out of bounds
--
-- Testing limit of CUBE_MAX_DIM dimensions check in cube_in.
--
CREATE TABLE test_cube (c cube);
\copy test_cube from 'data/test_cube.data'
CREATE INDEX test_cube_ix ON test_cube USING gist (c);
-SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)';
+SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' ORDER BY c;
c
--------------------------
- (2424, 160),(2424, 81)
+ (337, 455),(240, 359)
(759, 187),(662, 163)
(1444, 403),(1346, 344)
- (337, 455),(240, 359)
(1594, 1043),(1517, 971)
+ (2424, 160),(2424, 81)
(5 rows)
-- Test sorting
-SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' GROUP BY c;
+SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' GROUP BY c ORDER BY c;
c
--------------------------
(337, 455),(240, 359)