diff -c -r -N --exclude=CVS cube.old/CHANGES cube/CHANGES *** cube.old/CHANGES Thu Aug 29 18:05:03 2002 --- cube/CHANGES Mon Sep 9 17:49:23 2002 *************** *** 1,4 **** ! Changes that were made in August 2002. Note that this was based on a 7.3 development version and changes may not directly work with earlier versions. --- 1,4 ---- ! Changes that were made in August/September 2002 by Bruno Wolff III. Note that this was based on a 7.3 development version and changes may not directly work with earlier versions. *************** *** 7,15 **** before a decimal point from being accepted. This was submitted as a separate patch and may already be applied. - I reported but did not fix a potential buffer overrun problem in cube_yyerror - in cubeparse.y. - cube_inter should really return NULL if the two cubes don't overlap. However this requires changing to the new calling sequence and I don't know enough about how to do it to make the change. --- 7,12 ---- *************** *** 42,48 **** same thing with the overhead of a function call and memory allocation. I added memset calls to zero out newly allocated NDBOXes as the documentation ! on functions indicates should be done. I got rid of a call to cube_same in cube_lt and cube_gt since the test was redundant with other checks being made. The call to cube_same would --- 39,47 ---- same thing with the overhead of a function call and memory allocation. I added memset calls to zero out newly allocated NDBOXes as the documentation ! on functions indicates should be done. This still doesn't allow a hash ! index for equality since there are multiple representations of the ! same cube. I got rid of a call to cube_same in cube_lt and cube_gt since the test was redundant with other checks being made. The call to cube_same would *************** *** 93,97 **** --- 92,102 ---- I added documentation for cube_distance and the new functions to README.cube as well as making a few other minor changes. + + I changed create function to create or replace function in the install + script. + + I added grant statements to the install script to make the functions + executable to everyone. Bruno Wolff III diff -c -r -N --exclude=CVS cube.old/Makefile cube/Makefile *** cube.old/Makefile Fri Nov 16 10:32:33 2001 --- cube/Makefile Mon Sep 9 17:32:27 2002 *************** *** 1,4 **** ! # $Header: /projects/cvsroot/pgsql-server/contrib/cube/Makefile,v 1.6 2001/11/16 16:32:33 petere Exp $ subdir = contrib/cube top_builddir = ../.. --- 1,4 ---- ! # $Header: /cvsroot/pgsql-server/contrib/cube/Makefile,v 1.6 2001/11/16 16:32:33 petere Exp $ subdir = contrib/cube top_builddir = ../.. diff -c -r -N --exclude=CVS cube.old/README.cube cube/README.cube *** cube.old/README.cube Thu Aug 29 18:03:58 2002 --- cube/README.cube Mon Sep 9 17:52:26 2002 *************** *** 42,48 **** postgres binaries in the PATH. This only installs the type implementation and documentation. To make the ! type available in any particular database, do psql -d databasename < cube.sql --- 42,48 ---- postgres binaries in the PATH. This only installs the type implementation and documentation. To make the ! type available in any particular database, as a postgres superuser do: psql -d databasename < cube.sql *************** *** 57,62 **** --- 57,63 ---- test code is a direct adaptation of the regression tests from the main source tree). + By default the external functions are made executable by anyone. SYNTAX ====== *************** *** 329,335 **** ------------------------------------------------------------------------ Minor updates to this package were made by Bruno Wolff III ! in August of 2002. These include changing the precision from single precision to double precision and adding some new functions. --- 330,336 ---- ------------------------------------------------------------------------ Minor updates to this package were made by Bruno Wolff III ! in August/September of 2002. These include changing the precision from single precision to double precision and adding some new functions. diff -c -r -N --exclude=CVS cube.old/cube.sql.in cube/cube.sql.in *** cube.old/cube.sql.in Thu Aug 29 18:03:58 2002 --- cube/cube.sql.in Mon Sep 9 17:51:28 2002 *************** *** 1,16 **** -- Create the user-defined type for N-dimensional boxes -- ! BEGIN TRANSACTION; -- Adjust this setting to control where the objects get created. SET search_path = public; ! CREATE FUNCTION cube_in(cstring) RETURNS cube AS 'MODULE_PATHNAME' LANGUAGE 'c'IMMUTABLE STRICT; ! CREATE FUNCTION cube_out(cube) RETURNS cstring AS 'MODULE_PATHNAME' LANGUAGE 'c'IMMUTABLE STRICT; --- 1,16 ---- -- Create the user-defined type for N-dimensional boxes -- ! BEGIN; -- Adjust this setting to control where the objects get created. SET search_path = public; ! CREATE OR REPLACE FUNCTION cube_in(cstring) RETURNS cube AS 'MODULE_PATHNAME' LANGUAGE 'c'IMMUTABLE STRICT; ! CREATE OR REPLACE FUNCTION cube_out(cube) RETURNS cstring AS 'MODULE_PATHNAME' LANGUAGE 'c'IMMUTABLE STRICT; *************** *** 26,33 **** -- Convert from text to cube ! CREATE FUNCTION cube(text) ! RETURNS cube AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; --- 26,32 ---- -- Convert from text to cube ! CREATE OR REPLACE FUNCTION cube(text) RETURNS cube AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; *************** *** 40,64 **** -- Left/Right methods ! CREATE FUNCTION cube_over_left(cube, cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; COMMENT ON FUNCTION cube_over_left(cube, cube) IS 'is over and left of (NOT IMPLEMENTED)'; ! CREATE FUNCTION cube_over_right(cube, cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; COMMENT ON FUNCTION cube_over_right(cube, cube) IS 'is over and right of (NOT IMPLEMENTED)'; ! CREATE FUNCTION cube_left(cube, cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; COMMENT ON FUNCTION cube_left(cube, cube) IS 'is left of (NOT IMPLEMENTED)'; ! CREATE FUNCTION cube_right(cube, cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; COMMENT ON FUNCTION cube_right(cube, cube) IS --- 39,63 ---- -- Left/Right methods ! CREATE OR REPLACE FUNCTION cube_over_left(cube, cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; COMMENT ON FUNCTION cube_over_left(cube, cube) IS 'is over and left of (NOT IMPLEMENTED)'; ! CREATE OR REPLACE FUNCTION cube_over_right(cube, cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; COMMENT ON FUNCTION cube_over_right(cube, cube) IS 'is over and right of (NOT IMPLEMENTED)'; ! CREATE OR REPLACE FUNCTION cube_left(cube, cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; COMMENT ON FUNCTION cube_left(cube, cube) IS 'is left of (NOT IMPLEMENTED)'; ! CREATE OR REPLACE FUNCTION cube_right(cube, cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; COMMENT ON FUNCTION cube_right(cube, cube) IS *************** *** 67,109 **** -- Comparison methods ! CREATE FUNCTION cube_lt(cube, cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; COMMENT ON FUNCTION cube_lt(cube, cube) IS 'lower than'; ! CREATE FUNCTION cube_gt(cube, cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; COMMENT ON FUNCTION cube_gt(cube, cube) IS 'greater than'; ! CREATE FUNCTION cube_contains(cube, cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; COMMENT ON FUNCTION cube_contains(cube, cube) IS 'contains'; ! CREATE FUNCTION cube_contained(cube, cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; COMMENT ON FUNCTION cube_contained(cube, cube) IS 'contained in'; ! CREATE FUNCTION cube_overlap(cube, cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; COMMENT ON FUNCTION cube_overlap(cube, cube) IS 'overlaps'; ! CREATE FUNCTION cube_same(cube, cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; COMMENT ON FUNCTION cube_same(cube, cube) IS 'same as'; ! CREATE FUNCTION cube_different(cube, cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; COMMENT ON FUNCTION cube_different(cube, cube) IS --- 66,108 ---- -- Comparison methods ! CREATE OR REPLACE FUNCTION cube_lt(cube, cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; COMMENT ON FUNCTION cube_lt(cube, cube) IS 'lower than'; ! CREATE OR REPLACE FUNCTION cube_gt(cube, cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; COMMENT ON FUNCTION cube_gt(cube, cube) IS 'greater than'; ! CREATE OR REPLACE FUNCTION cube_contains(cube, cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; COMMENT ON FUNCTION cube_contains(cube, cube) IS 'contains'; ! CREATE OR REPLACE FUNCTION cube_contained(cube, cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; COMMENT ON FUNCTION cube_contained(cube, cube) IS 'contained in'; ! CREATE OR REPLACE FUNCTION cube_overlap(cube, cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; COMMENT ON FUNCTION cube_overlap(cube, cube) IS 'overlaps'; ! CREATE OR REPLACE FUNCTION cube_same(cube, cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; COMMENT ON FUNCTION cube_same(cube, cube) IS 'same as'; ! CREATE OR REPLACE FUNCTION cube_different(cube, cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; COMMENT ON FUNCTION cube_different(cube, cube) IS *************** *** 111,123 **** -- support routines for indexing ! CREATE FUNCTION cube_union(cube, cube) RETURNS cube AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; ! CREATE FUNCTION cube_inter(cube, cube) RETURNS cube AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; ! CREATE FUNCTION cube_size(cube) RETURNS float8 AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; --- 110,122 ---- -- support routines for indexing ! CREATE OR REPLACE FUNCTION cube_union(cube, cube) RETURNS cube AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; ! CREATE OR REPLACE FUNCTION cube_inter(cube, cube) RETURNS cube AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; ! CREATE OR REPLACE FUNCTION cube_size(cube) RETURNS float8 AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; *************** *** 125,152 **** -- proximity routines ! CREATE FUNCTION cube_distance(cube, cube) RETURNS float8 AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; -- Extracting elements functions ! CREATE FUNCTION cube_dim(cube) RETURNS int4 AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; ! CREATE FUNCTION cube_ll_coord(cube, int4) RETURNS float8 AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; ! CREATE FUNCTION cube_ur_coord(cube, int4) RETURNS float8 AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; -- Test if cube is also a point ! CREATE FUNCTION cube_is_point(cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; -- Increasing the size of a cube by a radius in at least n dimensions ! CREATE FUNCTION cube_enlarge(cube, float8, int4) RETURNS cube AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; -- --- 124,151 ---- -- proximity routines ! CREATE OR REPLACE FUNCTION cube_distance(cube, cube) RETURNS float8 AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; -- Extracting elements functions ! CREATE OR REPLACE FUNCTION cube_dim(cube) RETURNS int4 AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; ! CREATE OR REPLACE FUNCTION cube_ll_coord(cube, int4) RETURNS float8 AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; ! CREATE OR REPLACE FUNCTION cube_ur_coord(cube, int4) RETURNS float8 AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; -- Test if cube is also a point ! CREATE OR REPLACE FUNCTION cube_is_point(cube) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; -- Increasing the size of a cube by a radius in at least n dimensions ! CREATE OR REPLACE FUNCTION cube_enlarge(cube, float8, int4) RETURNS cube AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; -- *************** *** 222,246 **** -- define the GiST support methods ! CREATE FUNCTION g_cube_consistent(internal,cube,int4) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c'; ! CREATE FUNCTION g_cube_compress(internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE 'c'; ! CREATE FUNCTION g_cube_decompress(internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE 'c'; ! CREATE FUNCTION g_cube_penalty(internal,internal,internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE 'c' STRICT; ! CREATE FUNCTION g_cube_picksplit(internal, internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE 'c'; ! CREATE FUNCTION g_cube_union(bytea, internal) RETURNS cube AS 'MODULE_PATHNAME' LANGUAGE 'c'; ! CREATE FUNCTION g_cube_same(cube, cube, internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE 'c'; --- 221,245 ---- -- define the GiST support methods ! CREATE OR REPLACE FUNCTION g_cube_consistent(internal,cube,int4) RETURNS bool AS 'MODULE_PATHNAME' LANGUAGE 'c'; ! CREATE OR REPLACE FUNCTION g_cube_compress(internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE 'c'; ! CREATE OR REPLACE FUNCTION g_cube_decompress(internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE 'c'; ! CREATE OR REPLACE FUNCTION g_cube_penalty(internal,internal,internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE 'c' STRICT; ! CREATE OR REPLACE FUNCTION g_cube_picksplit(internal, internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE 'c'; ! CREATE OR REPLACE FUNCTION g_cube_union(bytea, internal) RETURNS cube AS 'MODULE_PATHNAME' LANGUAGE 'c'; ! CREATE OR REPLACE FUNCTION g_cube_same(cube, cube, internal) RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE 'c'; *************** *** 264,268 **** FUNCTION 6 g_cube_picksplit (internal, internal), FUNCTION 7 g_cube_same (cube, cube, internal); ! END TRANSACTION; --- 263,293 ---- FUNCTION 6 g_cube_picksplit (internal, internal), FUNCTION 7 g_cube_same (cube, cube, internal); + -- + -- By default the externally visible functions are made executable by + -- anyone. To restrict their access comment out the following grant commands. + -- + + GRANT EXECUTE ON FUNCTION cube(text) TO PUBLIC; + GRANT EXECUTE ON FUNCTION cube_over_left(cube, cube) TO PUBLIC; + GRANT EXECUTE ON FUNCTION cube_over_right(cube, cube) TO PUBLIC; + GRANT EXECUTE ON FUNCTION cube_left(cube, cube) TO PUBLIC; + GRANT EXECUTE ON FUNCTION cube_right(cube, cube) TO PUBLIC; + GRANT EXECUTE ON FUNCTION cube_lt(cube, cube) TO PUBLIC; + GRANT EXECUTE ON FUNCTION cube_gt(cube, cube) TO PUBLIC; + GRANT EXECUTE ON FUNCTION cube_contains(cube, cube) TO PUBLIC; + GRANT EXECUTE ON FUNCTION cube_contained(cube, cube) TO PUBLIC; + GRANT EXECUTE ON FUNCTION cube_overlap(cube, cube) TO PUBLIC; + GRANT EXECUTE ON FUNCTION cube_same(cube, cube) TO PUBLIC; + GRANT EXECUTE ON FUNCTION cube_different(cube, cube) TO PUBLIC; + GRANT EXECUTE ON FUNCTION cube_union(cube, cube) TO PUBLIC; + GRANT EXECUTE ON FUNCTION cube_inter(cube, cube) TO PUBLIC; + GRANT EXECUTE ON FUNCTION cube_size(cube) TO PUBLIC; + GRANT EXECUTE ON FUNCTION cube_distance(cube, cube) TO PUBLIC; + GRANT EXECUTE ON FUNCTION cube_dim(cube) TO PUBLIC; + GRANT EXECUTE ON FUNCTION cube_ll_coord(cube, int4) TO PUBLIC; + GRANT EXECUTE ON FUNCTION cube_ur_coord(cube, int4) TO PUBLIC; + GRANT EXECUTE ON FUNCTION cube_is_point(cube) TO PUBLIC; + GRANT EXECUTE ON FUNCTION cube_enlarge(cube, float8, int4) TO PUBLIC; ! COMMIT;