From: Bruce Momjian Date: Fri, 18 Oct 2002 18:41:22 +0000 (+0000) Subject: Update /contrib for "autocommit TO 'on'". X-Git-Tag: REL7_3~265 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=aa4c702eac936964649f905741b4a99f4b489200;p=postgresql Update /contrib for "autocommit TO 'on'". Create objects in public schema. Make spacing/capitalization consistent. Remove transaction block use for object creation. Remove unneeded function GRANTs. --- diff --git a/contrib/adddepend/adddepend b/contrib/adddepend/adddepend index 15e87acc20..68bea7a6b2 100755 --- a/contrib/adddepend/adddepend +++ b/contrib/adddepend/adddepend @@ -1,5 +1,5 @@ #!/usr/bin/perl -# $Id: adddepend,v 1.1 2002/09/18 20:38:59 momjian Exp $ +# $Id: adddepend,v 1.2 2002/10/18 18:41:19 momjian Exp $ # Project exists to assist PostgreSQL users with their structural upgrade # from 7.2 (or prior) to 7.3 (possibly later). Must be run against a 7.3 @@ -125,6 +125,20 @@ my $dbh = DBI->connect($dsn, $dbuser, $dbpass); # We want to control commits $dbh->{'AutoCommit'} = 0; +# turn on autocommit +my $sql = qq{ + SET search_path = public; +}; +my $sth = $dbh->prepare($sql); +$sth->execute(); + +# turn on autocommit +my $sql2 = qq{ + SET autocommit TO 'on'; +}; +my $sth2 = $dbh->prepare($sql2); +$sth2->execute(); + END { $dbh->disconnect() if $dbh; } diff --git a/contrib/array/array_iterator.sql.in b/contrib/array/array_iterator.sql.in index 342d728f9a..3a5cf079cd 100644 --- a/contrib/array/array_iterator.sql.in +++ b/contrib/array/array_iterator.sql.in @@ -2,287 +2,353 @@ -- define the array operators *=, **=, *~ and **~ for type _text -- -create or replace function array_texteq(_text, text) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); -create or replace function array_all_texteq(_text, text) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); +-- Adjust this setting to control where the objects get created. +SET search_path = public; -create or replace function array_textregexeq(_text, text) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); +SET autocommit TO 'on'; -create or replace function array_all_textregexeq(_text, text) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); +CREATE OR REPLACE FUNCTION array_texteq(_text, text) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); -create operator *= ( - leftarg=_text, - rightarg=text, - procedure=array_texteq); +CREATE OR REPLACE FUNCTION array_all_texteq(_text, text) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); -create operator **= ( - leftarg=_text, - rightarg=text, - procedure=array_all_texteq); +CREATE OR REPLACE FUNCTION array_textregexeq(_text, text) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); -create operator *~ ( - leftarg=_text, - rightarg=text, - procedure=array_textregexeq); +CREATE OR REPLACE FUNCTION array_all_textregexeq(_text, text) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); -create operator **~ ( - leftarg=_text, - rightarg=text, - procedure=array_all_textregexeq); +CREATE OPERATOR *= ( + LEFTARG=_text, + RIGHTARG=text, + PROCEDURE=array_texteq +); + +CREATE OPERATOR **= ( + LEFTARG=_text, + RIGHTARG=text, + PROCEDURE=array_all_texteq +); + +CREATE OPERATOR *~ ( + LEFTARG=_text, + RIGHTARG=text, + PROCEDURE=array_textregexeq +); + +CREATE OPERATOR **~ ( + LEFTARG=_text, + RIGHTARG=text, + PROCEDURE=array_all_textregexeq +); -- define the array operators *=, **=, *~ and **~ for type _varchar -- -- NOTE: "varchar" is also a reserved word and must be quoted. -- -create or replace function array_varchareq(_varchar, varchar) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create or replace function array_all_varchareq(_varchar, varchar) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create or replace function array_varcharregexeq(_varchar, varchar) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create or replace function array_all_varcharregexeq(_varchar, varchar) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create operator *= ( - leftarg=_varchar, - rightarg="varchar", - procedure=array_varchareq); - -create operator **= ( - leftarg=_varchar, - rightarg="varchar", - procedure=array_all_varchareq); - -create operator *~ ( - leftarg=_varchar, - rightarg="varchar", - procedure=array_varcharregexeq); - -create operator **~ ( - leftarg=_varchar, - rightarg="varchar", - procedure=array_all_varcharregexeq); +CREATE OR REPLACE FUNCTION array_varchareq(_varchar, varchar) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OR REPLACE FUNCTION array_all_varchareq(_varchar, varchar) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OR REPLACE FUNCTION array_varcharregexeq(_varchar, varchar) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OR REPLACE FUNCTION array_all_varcharregexeq(_varchar, varchar) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OPERATOR *= ( + LEFTARG=_varchar, + RIGHTARG="varchar", + PROCEDURE=array_varchareq +); + +CREATE OPERATOR **= ( + LEFTARG=_varchar, + RIGHTARG="varchar", + PROCEDURE=array_all_varchareq +); + +CREATE OPERATOR *~ ( + LEFTARG=_varchar, + RIGHTARG="varchar", + PROCEDURE=array_varcharregexeq +); + +CREATE OPERATOR **~ ( + LEFTARG=_varchar, + RIGHTARG="varchar", + PROCEDURE=array_all_varcharregexeq +); -- define the array operators *=, **=, *~ and **~ for type _bpchar -- -create or replace function array_bpchareq(_bpchar, bpchar) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create or replace function array_all_bpchareq(_bpchar, bpchar) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create or replace function array_bpcharregexeq(_bpchar, bpchar) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create or replace function array_all_bpcharregexeq(_bpchar, bpchar) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create operator *= ( - leftarg=_bpchar, - rightarg=bpchar, - procedure=array_bpchareq); - -create operator **= ( - leftarg=_bpchar, - rightarg=bpchar, - procedure=array_all_bpchareq); - -create operator *~ ( - leftarg=_bpchar, - rightarg=bpchar, - procedure=array_bpcharregexeq); - -create operator **~ ( - leftarg=_bpchar, - rightarg=bpchar, - procedure=array_all_bpcharregexeq); +CREATE OR REPLACE FUNCTION array_bpchareq(_bpchar, bpchar) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OR REPLACE FUNCTION array_all_bpchareq(_bpchar, bpchar) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OR REPLACE FUNCTION array_bpcharregexeq(_bpchar, bpchar) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OR REPLACE FUNCTION array_all_bpcharregexeq(_bpchar, bpchar) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OPERATOR *= ( + LEFTARG=_bpchar, + RIGHTARG=bpchar, + PROCEDURE=array_bpchareq +); + +CREATE OPERATOR **= ( + LEFTARG=_bpchar, + RIGHTARG=bpchar, + PROCEDURE=array_all_bpchareq +); + +CREATE OPERATOR *~ ( + LEFTARG=_bpchar, + RIGHTARG=bpchar, + PROCEDURE=array_bpcharregexeq +); + +CREATE OPERATOR **~ ( + LEFTARG=_bpchar, + RIGHTARG=bpchar, + PROCEDURE=array_all_bpcharregexeq +); -- define the array operators *=, **=, *> and **> for type _int4 -- -create or replace function array_int4eq(_int4, int4) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create or replace function array_all_int4eq(_int4, int4) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create or replace function array_int4ne(_int4, int4) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create or replace function array_all_int4ne(_int4, int4) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create or replace function array_int4gt(_int4, int4) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create or replace function array_all_int4gt(_int4, int4) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create or replace function array_int4ge(_int4, int4) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create or replace function array_all_int4ge(_int4, int4) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create or replace function array_int4lt(_int4, int4) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create or replace function array_all_int4lt(_int4, int4) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create or replace function array_int4le(_int4, int4) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create or replace function array_all_int4le(_int4, int4) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create operator *= ( - leftarg=_int4, - rightarg=int4, - procedure=array_int4eq); - -create operator **= ( - leftarg=_int4, - rightarg=int4, - procedure=array_all_int4eq); - -create operator *<> ( - leftarg=_int4, - rightarg=int4, - procedure=array_int4ne); - -create operator **<> ( - leftarg=_int4, - rightarg=int4, - procedure=array_all_int4ne); - -create operator *> ( - leftarg=_int4, - rightarg=int4, - procedure=array_int4gt); - -create operator **> ( - leftarg=_int4, - rightarg=int4, - procedure=array_all_int4gt); - -create operator *>= ( - leftarg=_int4, - rightarg=int4, - procedure=array_int4ge); - -create operator **>= ( - leftarg=_int4, - rightarg=int4, - procedure=array_all_int4ge); - -create operator *< ( - leftarg=_int4, - rightarg=int4, - procedure=array_int4lt); - -create operator **< ( - leftarg=_int4, - rightarg=int4, - procedure=array_all_int4lt); - -create operator *<= ( - leftarg=_int4, - rightarg=int4, - procedure=array_int4le); - -create operator **<= ( - leftarg=_int4, - rightarg=int4, - procedure=array_all_int4le); +CREATE OR REPLACE FUNCTION array_int4eq(_int4, int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OR REPLACE FUNCTION array_all_int4eq(_int4, int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OR REPLACE FUNCTION array_int4ne(_int4, int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OR REPLACE FUNCTION array_all_int4ne(_int4, int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OR REPLACE FUNCTION array_int4gt(_int4, int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OR REPLACE FUNCTION array_all_int4gt(_int4, int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OR REPLACE FUNCTION array_int4ge(_int4, int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OR REPLACE FUNCTION array_all_int4ge(_int4, int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OR REPLACE FUNCTION array_int4lt(_int4, int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OR REPLACE FUNCTION array_all_int4lt(_int4, int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OR REPLACE FUNCTION array_int4le(_int4, int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OR REPLACE FUNCTION array_all_int4le(_int4, int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OPERATOR *= ( + LEFTARG=_int4, + RIGHTARG=int4, + PROCEDURE=array_int4eq +); + +CREATE OPERATOR **= ( + LEFTARG=_int4, + RIGHTARG=int4, + PROCEDURE=array_all_int4eq +); + +CREATE OPERATOR *<> ( + LEFTARG=_int4, + RIGHTARG=int4, + PROCEDURE=array_int4ne +); + +CREATE OPERATOR **<> ( + LEFTARG=_int4, + RIGHTARG=int4, + PROCEDURE=array_all_int4ne +); + +CREATE OPERATOR *> ( + LEFTARG=_int4, + RIGHTARG=int4, + PROCEDURE=array_int4gt +); + +CREATE OPERATOR **> ( + LEFTARG=_int4, + RIGHTARG=int4, + PROCEDURE=array_all_int4gt +); + +CREATE OPERATOR *>= ( + LEFTARG=_int4, + RIGHTARG=int4, + PROCEDURE=array_int4ge +); + +CREATE OPERATOR **>= ( + LEFTARG=_int4, + RIGHTARG=int4, + PROCEDURE=array_all_int4ge +); + +CREATE OPERATOR *< ( + LEFTARG=_int4, + RIGHTARG=int4, + PROCEDURE=array_int4lt +); + +CREATE OPERATOR **< ( + LEFTARG=_int4, + RIGHTARG=int4, + PROCEDURE=array_all_int4lt +); + +CREATE OPERATOR *<= ( + LEFTARG=_int4, + RIGHTARG=int4, + PROCEDURE=array_int4le +); + +CREATE OPERATOR **<= ( + LEFTARG=_int4, + RIGHTARG=int4, + PROCEDURE=array_all_int4le +); -- define the array operators *=, **<> for type _oid (added tobias 1. 1999) -- -create or replace function array_oideq(_oid, oid) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create or replace function array_all_oidne(_oid, oid) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create operator *= ( - leftarg=_oid, - rightarg=oid, - procedure=array_oideq); - -create operator **<> ( - leftarg=_oid, - rightarg=oid, - procedure=array_all_oidne); +CREATE OR REPLACE FUNCTION array_oideq(_oid, oid) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OR REPLACE FUNCTION array_all_oidne(_oid, oid) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OPERATOR *= ( + LEFTARG=_oid, + RIGHTARG=oid, + PROCEDURE=array_oideq +); + +CREATE OPERATOR **<> ( + LEFTARG=_oid, + RIGHTARG=oid, + PROCEDURE=array_all_oidne +); -- define the array operators *=, **=, *<>, **<> for type _inet -create or replace function array_ineteq(_inet, inet) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create or replace function array_all_ineteq(_inet, inet) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create or replace function array_inetne(_inet, inet) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create or replace function array_all_inetne(_inet, inet) returns bool - as 'MODULE_PATHNAME' - language C with (isStrict); - -create operator *= ( - leftarg=_inet, - rightarg=inet, - procedure=array_ineteq); - -create operator **= ( - leftarg=_inet, - rightarg=inet, - procedure=array_all_ineteq); - -create operator *<> ( - leftarg=_inet, - rightarg=inet, - procedure=array_inetne); - -create operator **<> ( - leftarg=_inet, - rightarg=inet, - procedure=array_all_inetne); +CREATE OR REPLACE FUNCTION array_ineteq(_inet, inet) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OR REPLACE FUNCTION array_all_ineteq(_inet, inet) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OR REPLACE FUNCTION array_inetne(_inet, inet) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OR REPLACE FUNCTION array_all_inetne(_inet, inet) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); + +CREATE OPERATOR *= ( + LEFTARG=_inet, + RIGHTARG=inet, + PROCEDURE=array_ineteq +); + +CREATE OPERATOR **= ( + LEFTARG=_inet, + RIGHTARG=inet, + PROCEDURE=array_all_ineteq +); + +CREATE OPERATOR *<> ( + LEFTARG=_inet, + RIGHTARG=inet, + PROCEDURE=array_inetne +); + +CREATE OPERATOR **<> ( + LEFTARG=_inet, + RIGHTARG=inet, + PROCEDURE=array_all_inetne +); diff --git a/contrib/btree_gist/btree_gist.sql.in b/contrib/btree_gist/btree_gist.sql.in index a60a7c2706..be3c979a6c 100644 --- a/contrib/btree_gist/btree_gist.sql.in +++ b/contrib/btree_gist/btree_gist.sql.in @@ -1,23 +1,23 @@ -begin transaction; - -- Adjust this setting to control where the objects get created. SET search_path = public; +SET autocommit TO 'on'; + -- create type of int4 key CREATE FUNCTION int4key_in(cstring) RETURNS int4key AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'c' WITH (isstrict); CREATE FUNCTION int4key_out(int4key) RETURNS cstring AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'c' WITH (isstrict); CREATE TYPE int4key ( -internallength = 8, -input = int4key_in, -output = int4key_out +INTERNALLENGTH = 8, +INPUT = int4key_in, +OUTPUT = int4key_out ); @@ -29,23 +29,45 @@ output = int4key_out -- -- -- define the GiST support methods -create function gint4_consistent(internal,int4,int2) returns bool as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION gint4_consistent(internal,int4,int2) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function gint4_compress(internal) returns internal as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION gint4_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function btree_decompress(internal) returns internal as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION btree_decompress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function gint4_penalty(internal,internal,internal) returns internal as 'MODULE_PATHNAME' language 'C' with(isstrict); +CREATE FUNCTION gint4_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isstrict); -create function gint4_picksplit(internal, internal) returns internal as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION gint4_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function gint4_union(bytea, internal) returns int4 as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION gint4_union(bytea, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function gint4_same(internal, internal, internal) returns internal as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION gint4_same(internal, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -- Create the operator class CREATE OPERATOR CLASS gist_int4_ops - DEFAULT FOR TYPE int4 USING gist AS +DEFAULT FOR TYPE int4 USING gist +AS OPERATOR 1 < , OPERATOR 2 <= , OPERATOR 3 = , @@ -73,34 +95,53 @@ CREATE OPERATOR CLASS gist_int4_ops CREATE FUNCTION tskey_in(cstring) RETURNS tskey AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'c' WITH (isstrict); CREATE FUNCTION tskey_out(tskey) RETURNS cstring AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'c' WITH (isstrict); CREATE TYPE tskey ( -internallength = 16, -input = tskey_in, -output = tskey_out +INTERNALLENGTH = 16, +INPUT = tskey_in, +OUTPUT = tskey_out ); -create function gts_consistent(internal,timestamp,int2) returns bool as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION gts_consistent(internal,timestamp,int2) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function gts_compress(internal) returns internal as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION gts_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function gts_penalty(internal,internal,internal) returns internal as 'MODULE_PATHNAME' language 'C' with(isstrict); +CREATE FUNCTION gts_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isstrict); -create function gts_picksplit(internal, internal) returns internal as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION gts_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function gts_union(bytea, internal) returns int4 as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION gts_union(bytea, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function gts_same(internal, internal, internal) returns internal as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION gts_same(internal, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -- Create the operator class CREATE OPERATOR CLASS gist_timestamp_ops - DEFAULT FOR TYPE timestamp USING gist AS +DEFAULT FOR TYPE timestamp USING gist +AS OPERATOR 1 < , OPERATOR 2 <= , OPERATOR 3 = , @@ -114,6 +155,3 @@ CREATE OPERATOR CLASS gist_timestamp_ops FUNCTION 6 gts_picksplit (internal, internal), FUNCTION 7 gts_same (internal, internal, internal), STORAGE tskey; - - -end transaction; diff --git a/contrib/btree_gist/expected/btree_gist.out b/contrib/btree_gist/expected/btree_gist.out index ab6a789f61..eb67c2e7f7 100644 --- a/contrib/btree_gist/expected/btree_gist.out +++ b/contrib/btree_gist/expected/btree_gist.out @@ -7,35 +7,35 @@ psql:btree_gist.sql:10: WARNING: ProcedureCreate: type int4key is not yet defin psql:btree_gist.sql:15: WARNING: Argument type "int4key" is only a shell psql:btree_gist.sql:76: WARNING: ProcedureCreate: type tskey is not yet defined psql:btree_gist.sql:81: WARNING: Argument type "tskey" is only a shell -create table inttmp (b int4); +CREATE TABLE inttmp (b int4); \copy inttmp from 'data/test_btree.data' -create table tstmp ( t timestamp without time zone ); +CREATE TABLE tstmp ( t timestamp without time zone ); \copy tstmp from 'data/test_btree_ts.data' -- without idx -select count(*) from inttmp where b <=10; +SELECT count(*) FROM inttmp WHERE b <=10; count ------- 11 (1 row) -select count(*) from tstmp where t < '2001-05-29 08:33:09'; +SELECT count(*) FROM tstmp WHERE t < '2001-05-29 08:33:09'; count ------- 66 (1 row) -- create idx -create index aaaidx on inttmp using gist ( b ); -create index tsidx on tstmp using gist ( t ); +CREATE INDEX aaaidx ON inttmp USING gist ( b ); +CREATE INDEX tsidx ON tstmp USING gist ( t ); --with idx -set enable_seqscan=off; -select count(*) from inttmp where b <=10; +SET enable_seqscan=off; +SELECT count(*) FROM inttmp WHERE b <=10; count ------- 11 (1 row) -select count(*) from tstmp where t < '2001-05-29 08:33:09'; +SELECT count(*) FROM tstmp WHERE t < '2001-05-29 08:33:09'; count ------- 66 diff --git a/contrib/btree_gist/sql/btree_gist.sql b/contrib/btree_gist/sql/btree_gist.sql index 31c778b747..d6e564dda3 100644 --- a/contrib/btree_gist/sql/btree_gist.sql +++ b/contrib/btree_gist/sql/btree_gist.sql @@ -3,34 +3,35 @@ -- does not depend on contents of seg.sql. -- \set ECHO none +SET autocommit TO 'on'; \i btree_gist.sql \set ECHO all -create table inttmp (b int4); +CREATE TABLE inttmp (b int4); \copy inttmp from 'data/test_btree.data' -create table tstmp ( t timestamp without time zone ); +CREATE TABLE tstmp ( t timestamp without time zone ); \copy tstmp from 'data/test_btree_ts.data' -- without idx -select count(*) from inttmp where b <=10; +SELECT count(*) FROM inttmp WHERE b <=10; -select count(*) from tstmp where t < '2001-05-29 08:33:09'; +SELECT count(*) FROM tstmp WHERE t < '2001-05-29 08:33:09'; -- create idx -create index aaaidx on inttmp using gist ( b ); +CREATE INDEX aaaidx ON inttmp USING gist ( b ); -create index tsidx on tstmp using gist ( t ); +CREATE INDEX tsidx ON tstmp USING gist ( t ); --with idx -set enable_seqscan=off; +SET enable_seqscan=off; -select count(*) from inttmp where b <=10; +SELECT count(*) FROM inttmp WHERE b <=10; -select count(*) from tstmp where t < '2001-05-29 08:33:09'; +SELECT count(*) FROM tstmp WHERE t < '2001-05-29 08:33:09'; diff --git a/contrib/chkpass/chkpass.sql.in b/contrib/chkpass/chkpass.sql.in index 3e331509d7..231cf99a12 100644 --- a/contrib/chkpass/chkpass.sql.in +++ b/contrib/chkpass/chkpass.sql.in @@ -4,7 +4,7 @@ -- darcy@druid.net -- http://www.druid.net/darcy/ -- --- $Header: /cvsroot/pgsql/contrib/chkpass/chkpass.sql.in,v 1.2 2002/08/22 00:01:38 tgl Exp $ +-- $Header: /cvsroot/pgsql/contrib/chkpass/chkpass.sql.in,v 1.3 2002/10/18 18:41:19 momjian Exp $ -- -- best viewed with tabs set to 4 -- @@ -13,41 +13,46 @@ -- Input and output functions and the type itself: -- -create function chkpass_in(cstring) - returns chkpass - as 'MODULE_PATHNAME' - language 'c'; +-- Adjust this setting to control where the objects get created. +SET search_path = public; -create function chkpass_out(chkpass) - returns cstring - as 'MODULE_PATHNAME' - language 'c'; +SET autocommit TO 'on'; -create type chkpass ( +CREATE FUNCTION chkpass_in(cstring) + RETURNS chkpass + AS 'MODULE_PATHNAME' + LANGUAGE 'c'; + +CREATE FUNCTION chkpass_out(chkpass) + RETURNS cstring + AS 'MODULE_PATHNAME' + LANGUAGE 'c'; + +CREATE TYPE chkpass ( internallength = 16, externallength = 13, input = chkpass_in, output = chkpass_out ); -create function raw(chkpass) - returns text - as 'MODULE_PATHNAME', 'chkpass_rout' - language 'c'; +CREATE FUNCTION raw(chkpass) + RETURNS text + AS 'MODULE_PATHNAME', 'chkpass_rout' + LANGUAGE 'c'; -- -- The various boolean tests: -- -create function eq(chkpass, text) - returns bool - as 'MODULE_PATHNAME', 'chkpass_eq' - language 'c'; +CREATE FUNCTION eq(chkpass, text) + RETURNS bool + AS 'MODULE_PATHNAME', 'chkpass_eq' + LANGUAGE 'c'; -create function ne(chkpass, text) - returns bool - as 'MODULE_PATHNAME', 'chkpass_ne' - language 'c'; +CREATE FUNCTION ne(chkpass, text) + RETURNS bool + AS 'MODULE_PATHNAME', 'chkpass_ne' + LANGUAGE 'c'; -- -- Now the operators. Note how some of the parameters to some @@ -56,7 +61,7 @@ create function ne(chkpass, text) -- will be implicitly defined when those are, further down. -- -create operator = ( +CREATE OPERATOR = ( leftarg = chkpass, rightarg = text, commutator = =, @@ -64,7 +69,7 @@ create operator = ( procedure = eq ); -create operator <> ( +CREATE OPERATOR <> ( leftarg = chkpass, rightarg = text, negator = =, diff --git a/contrib/cube/cube.sql.in b/contrib/cube/cube.sql.in index e54f10c046..5aadf7ba1b 100644 --- a/contrib/cube/cube.sql.in +++ b/contrib/cube/cube.sql.in @@ -1,14 +1,15 @@ -- Create the user-defined type for N-dimensional boxes -- -BEGIN; -- Adjust this setting to control where the objects get created. SET search_path = public; +SET autocommit TO 'on'; + CREATE OR REPLACE FUNCTION cube_in(cstring) RETURNS cube AS 'MODULE_PATHNAME' -LANGUAGE 'c'IMMUTABLE STRICT; +LANGUAGE 'C' IMMUTABLE STRICT; CREATE OR REPLACE FUNCTION cube_out(cube) RETURNS cstring @@ -16,22 +17,20 @@ AS 'MODULE_PATHNAME' LANGUAGE 'c'IMMUTABLE STRICT; CREATE TYPE cube ( -internallength = variable, -input = cube_in, -output = cube_out + INTERNALLENGTH = variable, + INPUT = cube_in, + OUTPUT = cube_out ); -COMMENT ON TYPE cube IS -'multi-dimensional cube ''(FLOAT-1, FLOAT-2, ..., FLOAT-N), (FLOAT-1, FLOAT-2, ..., FLOAT-N)'''; +COMMENT ON TYPE cube IS 'multi-dimensional cube ''(FLOAT-1, FLOAT-2, ..., FLOAT-N), (FLOAT-1, FLOAT-2, ..., FLOAT-N)'''; -- Convert from text to cube CREATE OR REPLACE FUNCTION cube(text) RETURNS cube AS 'MODULE_PATHNAME' -LANGUAGE 'c' IMMUTABLE STRICT; +LANGUAGE 'C' IMMUTABLE STRICT; -COMMENT ON FUNCTION cube(text) IS -'convert text to cube'; +COMMENT ON FUNCTION cube(text) IS 'convert text to cube'; -- -- External C-functions for R-tree methods @@ -39,208 +38,252 @@ COMMENT ON FUNCTION cube(text) IS -- Left/Right methods -CREATE OR REPLACE FUNCTION cube_over_left(cube, cube) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; +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)'; +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; +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)'; +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; +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; +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 -'is right of (NOT IMPLEMENTED)'; +COMMENT ON FUNCTION cube_right(cube, cube) IS 'is right of (NOT IMPLEMENTED)'; -- Comparison methods -CREATE OR REPLACE FUNCTION cube_lt(cube, cube) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; +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'; +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; +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'; +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; +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'; +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; +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'; +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; +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'; +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; +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'; +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; +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 -'different'; +COMMENT ON FUNCTION cube_different(cube, cube) IS 'different'; -- 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_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_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; +CREATE OR REPLACE FUNCTION cube_size(cube) +RETURNS float8 +AS 'MODULE_PATHNAME' +LANGUAGE 'C' IMMUTABLE STRICT; -- Misc N-dimensional functions -- proximity routines -CREATE OR REPLACE FUNCTION cube_distance(cube, cube) RETURNS float8 - AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE STRICT; +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_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_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; +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; +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; +CREATE OR REPLACE FUNCTION cube_enlarge(cube, float8, int4) +RETURNS cube +AS 'MODULE_PATHNAME' +LANGUAGE 'C' IMMUTABLE STRICT; -- -- OPERATORS -- CREATE OPERATOR < ( - LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_lt, - COMMUTATOR = '>', - RESTRICT = scalarltsel, JOIN = scalarltjoinsel + LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_lt, + COMMUTATOR = '>', + RESTRICT = scalarltsel, JOIN = scalarltjoinsel ); CREATE OPERATOR > ( - LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_gt, - COMMUTATOR = '<', - RESTRICT = scalargtsel, JOIN = scalargtjoinsel + LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_gt, + COMMUTATOR = '<', + RESTRICT = scalargtsel, JOIN = scalargtjoinsel ); CREATE OPERATOR << ( - LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_left, - COMMUTATOR = '>>', - RESTRICT = positionsel, JOIN = positionjoinsel + LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_left, + COMMUTATOR = '>>', + RESTRICT = positionsel, JOIN = positionjoinsel ); CREATE OPERATOR &< ( - LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_over_left, - COMMUTATOR = '&>', - RESTRICT = positionsel, JOIN = positionjoinsel + LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_over_left, + COMMUTATOR = '&>', + RESTRICT = positionsel, JOIN = positionjoinsel ); CREATE OPERATOR && ( - LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_overlap, - COMMUTATOR = '&&', - RESTRICT = positionsel, JOIN = positionjoinsel + LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_overlap, + COMMUTATOR = '&&', + RESTRICT = positionsel, JOIN = positionjoinsel ); CREATE OPERATOR &> ( - LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_over_right, - COMMUTATOR = '&<', - RESTRICT = positionsel, JOIN = positionjoinsel + LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_over_right, + COMMUTATOR = '&<', + RESTRICT = positionsel, JOIN = positionjoinsel ); CREATE OPERATOR >> ( - LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_right, - COMMUTATOR = '<<', - RESTRICT = positionsel, JOIN = positionjoinsel + LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_right, + COMMUTATOR = '<<', + RESTRICT = positionsel, JOIN = positionjoinsel ); CREATE OPERATOR = ( - LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_same, - COMMUTATOR = '=', NEGATOR = '<>', - RESTRICT = eqsel, JOIN = eqjoinsel, - SORT1 = '<', SORT2 = '<' + LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_same, + COMMUTATOR = '=', NEGATOR = '<>', + RESTRICT = eqsel, JOIN = eqjoinsel, + SORT1 = '<', SORT2 = '<' ); CREATE OPERATOR <> ( - LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_different, - COMMUTATOR = '<>', NEGATOR = '=', - RESTRICT = neqsel, JOIN = neqjoinsel + LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_different, + COMMUTATOR = '<>', NEGATOR = '=', + RESTRICT = neqsel, JOIN = neqjoinsel ); CREATE OPERATOR @ ( - LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_contains, - COMMUTATOR = '~', - RESTRICT = contsel, JOIN = contjoinsel + LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_contains, + COMMUTATOR = '~', + RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR ~ ( - LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_contained, - COMMUTATOR = '@', - RESTRICT = contsel, JOIN = contjoinsel + LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_contained, + COMMUTATOR = '@', + RESTRICT = contsel, JOIN = contjoinsel ); -- 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_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_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_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_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_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_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'; +CREATE OR REPLACE FUNCTION g_cube_same(cube, cube, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -- Create the operator class for indexing @@ -262,32 +305,3 @@ CREATE OPERATOR CLASS gist_cube_ops FUNCTION 5 g_cube_penalty (internal, internal, internal), 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; diff --git a/contrib/cube/expected/cube.out b/contrib/cube/expected/cube.out index 7a9b920127..235859f8b2 100644 --- a/contrib/cube/expected/cube.out +++ b/contrib/cube/expected/cube.out @@ -6,8 +6,8 @@ -- does not depend on contents of cube.sql. -- \set ECHO none -psql:cube.sql:11: WARNING: ProcedureCreate: type cube is not yet defined -psql:cube.sql:16: WARNING: Argument type "cube" is only a shell +psql:cube.sql:12: WARNING: ProcedureCreate: type cube is not yet defined +psql:cube.sql:17: WARNING: Argument type "cube" is only a shell -- -- testing the input and output functions -- diff --git a/contrib/cube/sql/cube.sql b/contrib/cube/sql/cube.sql index a0712c5557..416833bd48 100644 --- a/contrib/cube/sql/cube.sql +++ b/contrib/cube/sql/cube.sql @@ -7,6 +7,7 @@ -- does not depend on contents of cube.sql. -- \set ECHO none +SET autocommit TO 'on'; \i cube.sql \set ECHO all diff --git a/contrib/dbase/dbf2pg.c b/contrib/dbase/dbf2pg.c index e179226cbe..f8e6bafcd1 100644 --- a/contrib/dbase/dbf2pg.c +++ b/contrib/dbase/dbf2pg.c @@ -858,6 +858,10 @@ main(int argc, char **argv) exit(1); } + PQexec(conn, "SET search_path = public"); + + PQexec(conn, "SET autocommit TO 'on'"); + /* Substitute field names */ do_substitute(subarg, dbh); diff --git a/contrib/dblink/dblink.sql.in b/contrib/dblink/dblink.sql.in index 7f76ffc501..42e483de34 100644 --- a/contrib/dblink/dblink.sql.in +++ b/contrib/dblink/dblink.sql.in @@ -1,33 +1,43 @@ --- Uncomment the following 9 lines to use original DEPRECATED functions ---CREATE OR REPLACE FUNCTION dblink (text,text) RETURNS setof int --- AS 'MODULE_PATHNAME','dblink' LANGUAGE 'c' --- WITH (isstrict); ---CREATE OR REPLACE FUNCTION dblink_tok (int,int) RETURNS text --- AS 'MODULE_PATHNAME','dblink_tok' LANGUAGE 'c' --- WITH (isstrict); ---CREATE OR REPLACE FUNCTION dblink_last_oid (int) RETURNS oid --- AS 'MODULE_PATHNAME','dblink_last_oid' LANGUAGE 'c' --- WITH (isstrict); - -CREATE OR REPLACE FUNCTION dblink_connect (text) RETURNS text - AS 'MODULE_PATHNAME','dblink_connect' LANGUAGE 'c' - WITH (isstrict); - -CREATE OR REPLACE FUNCTION dblink_disconnect () RETURNS text - AS 'MODULE_PATHNAME','dblink_disconnect' LANGUAGE 'c' - WITH (isstrict); - -CREATE OR REPLACE FUNCTION dblink_open (text,text) RETURNS text - AS 'MODULE_PATHNAME','dblink_open' LANGUAGE 'c' - WITH (isstrict); - -CREATE OR REPLACE FUNCTION dblink_fetch (text,int) RETURNS setof record - AS 'MODULE_PATHNAME','dblink_fetch' LANGUAGE 'c' - WITH (isstrict); - -CREATE OR REPLACE FUNCTION dblink_close (text) RETURNS text - AS 'MODULE_PATHNAME','dblink_close' LANGUAGE 'c' - WITH (isstrict); +-- +-- Uncomment the following commented lines to use original DEPRECATED functions +-- +--CREATE OR REPLACE FUNCTION dblink (text,text) +--RETURNS setof int +--AS 'MODULE_PATHNAME','dblink' +--LANGUAGE 'C' WITH (isstrict); +--CREATE OR REPLACE FUNCTION dblink_tok (int,int) +--RETURNS text +--AS 'MODULE_PATHNAME','dblink_tok' +--LANGUAGE 'C' WITH (isstrict); +--CREATE OR REPLACE FUNCTION dblink_last_oid (int) +--RETURNS oid +--AS 'MODULE_PATHNAME','dblink_last_oid' +--LANGUAGE 'C' WITH (isstrict); + +CREATE OR REPLACE FUNCTION dblink_connect (text) +RETURNS text +AS 'MODULE_PATHNAME','dblink_connect' +LANGUAGE 'C' WITH (isstrict); + +CREATE OR REPLACE FUNCTION dblink_disconnect () +RETURNS text +AS 'MODULE_PATHNAME','dblink_disconnect' +LANGUAGE 'C' WITH (isstrict); + +CREATE OR REPLACE FUNCTION dblink_open (text,text) +RETURNS text +AS 'MODULE_PATHNAME','dblink_open' +LANGUAGE 'C' WITH (isstrict); + +CREATE OR REPLACE FUNCTION dblink_fetch (text,int) +RETURNS setof record +AS 'MODULE_PATHNAME','dblink_fetch' +LANGUAGE 'C' WITH (isstrict); + +CREATE OR REPLACE FUNCTION dblink_close (text) +RETURNS text +AS 'MODULE_PATHNAME','dblink_close' +LANGUAGE 'C' WITH (isstrict); -- Note: if this is not a first time install of dblink, uncomment the -- following DROP which prepares the database for the new, non-deprecated @@ -35,55 +45,49 @@ CREATE OR REPLACE FUNCTION dblink_close (text) RETURNS text --DROP FUNCTION dblink (text,text); -- Comment out the following 3 lines if the DEPRECATED functions are used. -CREATE OR REPLACE FUNCTION dblink (text,text) RETURNS setof record - AS 'MODULE_PATHNAME','dblink_record' LANGUAGE 'c' - WITH (isstrict); - -CREATE OR REPLACE FUNCTION dblink (text) RETURNS setof record - AS 'MODULE_PATHNAME','dblink_record' LANGUAGE 'c' - WITH (isstrict); - -CREATE OR REPLACE FUNCTION dblink_exec (text,text) RETURNS text - AS 'MODULE_PATHNAME','dblink_exec' LANGUAGE 'c' - WITH (isstrict); - -CREATE OR REPLACE FUNCTION dblink_exec (text) RETURNS text - AS 'MODULE_PATHNAME','dblink_exec' LANGUAGE 'c' - WITH (isstrict); +CREATE OR REPLACE FUNCTION dblink (text,text) +RETURNS setof record +AS 'MODULE_PATHNAME','dblink_record' +LANGUAGE 'C' WITH (isstrict); + +CREATE OR REPLACE FUNCTION dblink (text) +RETURNS setof record +AS 'MODULE_PATHNAME','dblink_record' +LANGUAGE 'C' WITH (isstrict); + +CREATE OR REPLACE FUNCTION dblink_exec (text,text) +RETURNS text +AS 'MODULE_PATHNAME','dblink_exec' +LANGUAGE 'C' WITH (isstrict); + +CREATE OR REPLACE FUNCTION dblink_exec (text) +RETURNS text +AS 'MODULE_PATHNAME','dblink_exec' +LANGUAGE 'c' WITH (isstrict); CREATE TYPE dblink_pkey_results AS (position int4, colname text); -CREATE OR REPLACE FUNCTION dblink_get_pkey (text) RETURNS setof dblink_pkey_results - AS 'MODULE_PATHNAME','dblink_get_pkey' LANGUAGE 'c' - WITH (isstrict); - -CREATE OR REPLACE FUNCTION dblink_build_sql_insert (text, int2vector, int4, _text, _text) RETURNS text - AS 'MODULE_PATHNAME','dblink_build_sql_insert' LANGUAGE 'c' - WITH (isstrict); - -CREATE OR REPLACE FUNCTION dblink_build_sql_delete (text, int2vector, int4, _text) RETURNS text - AS 'MODULE_PATHNAME','dblink_build_sql_delete' LANGUAGE 'c' - WITH (isstrict); - -CREATE OR REPLACE FUNCTION dblink_build_sql_update (text, int2vector, int4, _text, _text) RETURNS text - AS 'MODULE_PATHNAME','dblink_build_sql_update' LANGUAGE 'c' - WITH (isstrict); - -CREATE OR REPLACE FUNCTION dblink_current_query () RETURNS text - AS 'MODULE_PATHNAME','dblink_current_query' LANGUAGE 'c'; - -GRANT EXECUTE ON FUNCTION dblink_connect (text) TO PUBLIC; -GRANT EXECUTE ON FUNCTION dblink_disconnect () TO PUBLIC; -GRANT EXECUTE ON FUNCTION dblink_open (text,text) TO PUBLIC; -GRANT EXECUTE ON FUNCTION dblink_fetch (text,int) TO PUBLIC; -GRANT EXECUTE ON FUNCTION dblink_close (text) TO PUBLIC; -GRANT EXECUTE ON FUNCTION dblink (text,text) TO PUBLIC; -GRANT EXECUTE ON FUNCTION dblink (text) TO PUBLIC; -GRANT EXECUTE ON FUNCTION dblink_exec (text,text) TO PUBLIC; -GRANT EXECUTE ON FUNCTION dblink_exec (text) TO PUBLIC; -GRANT EXECUTE ON FUNCTION dblink_get_pkey (text) TO PUBLIC; -GRANT EXECUTE ON FUNCTION dblink_build_sql_insert (text, int2vector, int4, _text, _text) TO PUBLIC; -GRANT EXECUTE ON FUNCTION dblink_build_sql_delete (text, int2vector, int4, _text) TO PUBLIC; -GRANT EXECUTE ON FUNCTION dblink_build_sql_update (text, int2vector, int4, _text, _text) TO PUBLIC; -GRANT EXECUTE ON FUNCTION dblink_current_query () TO PUBLIC; - +CREATE OR REPLACE FUNCTION dblink_get_pkey (text) +RETURNS setof dblink_pkey_results +AS 'MODULE_PATHNAME','dblink_get_pkey' +LANGUAGE 'c' WITH (isstrict); + +CREATE OR REPLACE FUNCTION dblink_build_sql_insert (text, int2vector, int4, _text, _text) +RETURNS text +AS 'MODULE_PATHNAME','dblink_build_sql_insert' +LANGUAGE 'C' WITH (isstrict); + +CREATE OR REPLACE FUNCTION dblink_build_sql_delete (text, int2vector, int4, _text) +RETURNS text +AS 'MODULE_PATHNAME','dblink_build_sql_delete' +LANGUAGE 'C' WITH (isstrict); + +CREATE OR REPLACE FUNCTION dblink_build_sql_update (text, int2vector, int4, _text, _text) +RETURNS text +AS 'MODULE_PATHNAME','dblink_build_sql_update' +LANGUAGE 'C' WITH (isstrict); + +CREATE OR REPLACE FUNCTION dblink_current_query () +RETURNS text +AS 'MODULE_PATHNAME','dblink_current_query' +LANGUAGE 'C'; diff --git a/contrib/dblink/expected/dblink.out b/contrib/dblink/expected/dblink.out index de6c7568e1..7db366900f 100644 --- a/contrib/dblink/expected/dblink.out +++ b/contrib/dblink/expected/dblink.out @@ -4,7 +4,11 @@ -- -- This initial hackery is to allow successive runs without failures. -- -CREATE OR REPLACE FUNCTION conditional_drop() RETURNS text AS ' +-- Adjust this setting to control where the objects get created. +SET search_path = public; +SET autocommit TO 'on'; +CREATE OR REPLACE FUNCTION conditional_drop() +RETURNS text AS ' DECLARE dbname text; BEGIN @@ -26,28 +30,29 @@ CREATE DATABASE regression_slave; -- Turn off echoing so that expected file does not depend on -- contents of dblink.sql. \set ECHO none -create table foo(f1 int, f2 text, f3 text[], primary key (f1,f2)); +CREATE TABLE foo(f1 int, f2 text, f3 text[], primary key (f1,f2)); NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'foo_pkey' for table 'foo' -insert into foo values(0,'a','{"a0","b0","c0"}'); -insert into foo values(1,'b','{"a1","b1","c1"}'); -insert into foo values(2,'c','{"a2","b2","c2"}'); -insert into foo values(3,'d','{"a3","b3","c3"}'); -insert into foo values(4,'e','{"a4","b4","c4"}'); -insert into foo values(5,'f','{"a5","b5","c5"}'); -insert into foo values(6,'g','{"a6","b6","c6"}'); -insert into foo values(7,'h','{"a7","b7","c7"}'); -insert into foo values(8,'i','{"a8","b8","c8"}'); -insert into foo values(9,'j','{"a9","b9","c9"}'); +INSERT INTO foo VALUES (0,'a','{"a0","b0","c0"}'); +INSERT INTO foo VALUES (1,'b','{"a1","b1","c1"}'); +INSERT INTO foo VALUES (2,'c','{"a2","b2","c2"}'); +INSERT INTO foo VALUES (3,'d','{"a3","b3","c3"}'); +INSERT INTO foo VALUES (4,'e','{"a4","b4","c4"}'); +INSERT INTO foo VALUES (5,'f','{"a5","b5","c5"}'); +INSERT INTO foo VALUES (6,'g','{"a6","b6","c6"}'); +INSERT INTO foo VALUES (7,'h','{"a7","b7","c7"}'); +INSERT INTO foo VALUES (8,'i','{"a8","b8","c8"}'); +INSERT INTO foo VALUES (9,'j','{"a9","b9","c9"}'); -- misc utilities -- show the currently executing query -select 'hello' as hello, dblink_current_query() as query; +SELECT 'hello' AS hello, dblink_current_query() AS query; hello | query -------+----------------------------------------------------------- - hello | select 'hello' as hello, dblink_current_query() as query; + hello | SELECT 'hello' AS hello, dblink_current_query() AS query; (1 row) -- list the primary key fields -select * from dblink_get_pkey('foo'); +SELECT * +FROM dblink_get_pkey('foo'); position | colname ----------+--------- 1 | f1 @@ -56,7 +61,7 @@ select * from dblink_get_pkey('foo'); -- build an insert statement based on a local tuple, -- replacing the primary key values with new ones -select dblink_build_sql_insert('foo','1 2',2,'{"0", "a"}','{"99", "xyz"}'); +SELECT dblink_build_sql_insert('foo','1 2',2,'{"0", "a"}','{"99", "xyz"}'); dblink_build_sql_insert ----------------------------------------------------------- INSERT INTO foo(f1,f2,f3) VALUES('99','xyz','{a0,b0,c0}') @@ -64,14 +69,14 @@ select dblink_build_sql_insert('foo','1 2',2,'{"0", "a"}','{"99", "xyz"}'); -- build an update statement based on a local tuple, -- replacing the primary key values with new ones -select dblink_build_sql_update('foo','1 2',2,'{"0", "a"}','{"99", "xyz"}'); +SELECT dblink_build_sql_update('foo','1 2',2,'{"0", "a"}','{"99", "xyz"}'); dblink_build_sql_update ---------------------------------------------------------------------------------------- UPDATE foo SET f1 = '99', f2 = 'xyz', f3 = '{a0,b0,c0}' WHERE f1 = '99' AND f2 = 'xyz' (1 row) -- build a delete statement based on a local tuple, -select dblink_build_sql_delete('foo','1 2',2,'{"0", "a"}'); +SELECT dblink_build_sql_delete('foo','1 2',2,'{"0", "a"}'); dblink_build_sql_delete --------------------------------------------- DELETE FROM foo WHERE f1 = '0' AND f2 = 'a' @@ -85,7 +90,9 @@ select dblink_build_sql_delete('foo','1 2',2,'{"0", "a"}'); \connect regression \set ECHO none -- regular old dblink -select * from dblink('dbname=regression_slave','select * from foo') as t(a int, b text, c text[]) where t.a > 7; +SELECT * +FROM dblink('dbname=regression_slave','SELECT * FROM foo') AS t(a int, b text, c text[]) +WHERE t.a > 7; a | b | c ---+---+------------ 8 | i | {a8,b8,c8} @@ -93,17 +100,21 @@ select * from dblink('dbname=regression_slave','select * from foo') as t(a int, (2 rows) -- should generate "no connection available" error -select * from dblink('select * from foo') as t(a int, b text, c text[]) where t.a > 7; +SELECT * +FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]) +WHERE t.a > 7; ERROR: dblink: no connection available -- create a persistent connection -select dblink_connect('dbname=regression_slave'); +SELECT dblink_connect('dbname=regression_slave'); dblink_connect ---------------- OK (1 row) -- use the persistent connection -select * from dblink('select * from foo') as t(a int, b text, c text[]) where t.a > 7; +SELECT * +FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]) +WHERE t.a > 7; a | b | c ---+---+------------ 8 | i | {a8,b8,c8} @@ -111,14 +122,15 @@ select * from dblink('select * from foo') as t(a int, b text, c text[]) where t. (2 rows) -- open a cursor -select dblink_open('rmt_foo_cursor','select * from foo'); +SELECT dblink_open('rmt_foo_cursor','SELECT * FROM foo'); dblink_open ------------- OK (1 row) -- fetch some data -select * from dblink_fetch('rmt_foo_cursor',4) as t(a int, b text, c text[]); +SELECT * +FROM dblink_fetch('rmt_foo_cursor',4) AS t(a int, b text, c text[]); a | b | c ---+---+------------ 0 | a | {a0,b0,c0} @@ -127,7 +139,8 @@ select * from dblink_fetch('rmt_foo_cursor',4) as t(a int, b text, c text[]); 3 | d | {a3,b3,c3} (4 rows) -select * from dblink_fetch('rmt_foo_cursor',4) as t(a int, b text, c text[]); +SELECT * +FROM dblink_fetch('rmt_foo_cursor',4) AS t(a int, b text, c text[]); a | b | c ---+---+------------ 4 | e | {a4,b4,c4} @@ -137,7 +150,8 @@ select * from dblink_fetch('rmt_foo_cursor',4) as t(a int, b text, c text[]); (4 rows) -- this one only finds two rows left -select * from dblink_fetch('rmt_foo_cursor',4) as t(a int, b text, c text[]); +SELECT * +FROM dblink_fetch('rmt_foo_cursor',4) AS t(a int, b text, c text[]); a | b | c ---+---+------------ 8 | i | {a8,b8,c8} @@ -145,35 +159,38 @@ select * from dblink_fetch('rmt_foo_cursor',4) as t(a int, b text, c text[]); (2 rows) -- close the cursor -select dblink_close('rmt_foo_cursor'); +SELECT dblink_close('rmt_foo_cursor'); dblink_close -------------- OK (1 row) -- should generate "cursor rmt_foo_cursor does not exist" error -select * from dblink_fetch('rmt_foo_cursor',4) as t(a int, b text, c text[]); +SELECT * +FROM dblink_fetch('rmt_foo_cursor',4) AS t(a int, b text, c text[]); ERROR: dblink_fetch: cursor rmt_foo_cursor does not exist -- close the persistent connection -select dblink_disconnect(); +SELECT dblink_disconnect(); dblink_disconnect ------------------- OK (1 row) -- should generate "no connection available" error -select * from dblink('select * from foo') as t(a int, b text, c text[]) where t.a > 7; +SELECT * +FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]) +WHERE t.a > 7; ERROR: dblink: no connection available -- put more data into our slave table, first using arbitrary connection syntax -- but truncate the actual return value so we can use diff to check for success -select substr(dblink_exec('dbname=regression_slave','insert into foo values(10,''k'',''{"a10","b10","c10"}'')'),1,6); +SELECT substr(dblink_exec('dbname=regression_slave','INSERT INTO foo VALUES (10,''k'',''{"a10","b10","c10"}'')'),1,6); substr -------- INSERT (1 row) -- create a persistent connection -select dblink_connect('dbname=regression_slave'); +SELECT dblink_connect('dbname=regression_slave'); dblink_connect ---------------- OK @@ -181,14 +198,15 @@ select dblink_connect('dbname=regression_slave'); -- put more data into our slave table, using persistent connection syntax -- but truncate the actual return value so we can use diff to check for success -select substr(dblink_exec('insert into foo values(11,''l'',''{"a11","b11","c11"}'')'),1,6); +SELECT substr(dblink_exec('INSERT INTO foo VALUES (11,''l'',''{"a11","b11","c11"}'')'),1,6); substr -------- INSERT (1 row) -- let's see it -select * from dblink('select * from foo') as t(a int, b text, c text[]); +SELECT * +FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]); a | b | c ----+---+--------------- 0 | a | {a0,b0,c0} @@ -206,34 +224,38 @@ select * from dblink('select * from foo') as t(a int, b text, c text[]); (12 rows) -- change some data -select dblink_exec('update foo set f3[2] = ''b99'' where f1 = 11'); +SELECT dblink_exec('UPDATE foo SET f3[2] = ''b99'' WHERE f1 = 11'); dblink_exec ------------- UPDATE 1 (1 row) -- let's see it -select * from dblink('select * from foo') as t(a int, b text, c text[]) where a = 11; +SELECT * +FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]) +WHERE a = 11; a | b | c ----+---+--------------- 11 | l | {a11,b99,c11} (1 row) -- delete some data -select dblink_exec('delete from foo where f1 = 11'); +SELECT dblink_exec('DELETE FROM foo WHERE f1 = 11'); dblink_exec ------------- DELETE 1 (1 row) -- let's see it -select * from dblink('select * from foo') as t(a int, b text, c text[]) where a = 11; +SELECT * +FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]) +WHERE a = 11; a | b | c ---+---+--- (0 rows) -- close the persistent connection -select dblink_disconnect(); +SELECT dblink_disconnect(); dblink_disconnect ------------------- OK diff --git a/contrib/dblink/sql/dblink.sql b/contrib/dblink/sql/dblink.sql index 2d9dae3317..7737e5d395 100644 --- a/contrib/dblink/sql/dblink.sql +++ b/contrib/dblink/sql/dblink.sql @@ -4,7 +4,14 @@ -- -- This initial hackery is to allow successive runs without failures. -- -CREATE OR REPLACE FUNCTION conditional_drop() RETURNS text AS ' + +-- Adjust this setting to control where the objects get created. +SET search_path = public; + +SET autocommit TO 'on'; + +CREATE OR REPLACE FUNCTION conditional_drop() +RETURNS text AS ' DECLARE dbname text; BEGIN @@ -26,36 +33,37 @@ CREATE DATABASE regression_slave; \i dblink.sql \set ECHO all -create table foo(f1 int, f2 text, f3 text[], primary key (f1,f2)); -insert into foo values(0,'a','{"a0","b0","c0"}'); -insert into foo values(1,'b','{"a1","b1","c1"}'); -insert into foo values(2,'c','{"a2","b2","c2"}'); -insert into foo values(3,'d','{"a3","b3","c3"}'); -insert into foo values(4,'e','{"a4","b4","c4"}'); -insert into foo values(5,'f','{"a5","b5","c5"}'); -insert into foo values(6,'g','{"a6","b6","c6"}'); -insert into foo values(7,'h','{"a7","b7","c7"}'); -insert into foo values(8,'i','{"a8","b8","c8"}'); -insert into foo values(9,'j','{"a9","b9","c9"}'); +CREATE TABLE foo(f1 int, f2 text, f3 text[], primary key (f1,f2)); +INSERT INTO foo VALUES (0,'a','{"a0","b0","c0"}'); +INSERT INTO foo VALUES (1,'b','{"a1","b1","c1"}'); +INSERT INTO foo VALUES (2,'c','{"a2","b2","c2"}'); +INSERT INTO foo VALUES (3,'d','{"a3","b3","c3"}'); +INSERT INTO foo VALUES (4,'e','{"a4","b4","c4"}'); +INSERT INTO foo VALUES (5,'f','{"a5","b5","c5"}'); +INSERT INTO foo VALUES (6,'g','{"a6","b6","c6"}'); +INSERT INTO foo VALUES (7,'h','{"a7","b7","c7"}'); +INSERT INTO foo VALUES (8,'i','{"a8","b8","c8"}'); +INSERT INTO foo VALUES (9,'j','{"a9","b9","c9"}'); -- misc utilities -- show the currently executing query -select 'hello' as hello, dblink_current_query() as query; +SELECT 'hello' AS hello, dblink_current_query() AS query; -- list the primary key fields -select * from dblink_get_pkey('foo'); +SELECT * +FROM dblink_get_pkey('foo'); -- build an insert statement based on a local tuple, -- replacing the primary key values with new ones -select dblink_build_sql_insert('foo','1 2',2,'{"0", "a"}','{"99", "xyz"}'); +SELECT dblink_build_sql_insert('foo','1 2',2,'{"0", "a"}','{"99", "xyz"}'); -- build an update statement based on a local tuple, -- replacing the primary key values with new ones -select dblink_build_sql_update('foo','1 2',2,'{"0", "a"}','{"99", "xyz"}'); +SELECT dblink_build_sql_update('foo','1 2',2,'{"0", "a"}','{"99", "xyz"}'); -- build a delete statement based on a local tuple, -select dblink_build_sql_delete('foo','1 2',2,'{"0", "a"}'); +SELECT dblink_build_sql_delete('foo','1 2',2,'{"0", "a"}'); -- -- Connect back to the regression database and define the functions. @@ -68,64 +76,82 @@ select dblink_build_sql_delete('foo','1 2',2,'{"0", "a"}'); \set ECHO all -- regular old dblink -select * from dblink('dbname=regression_slave','select * from foo') as t(a int, b text, c text[]) where t.a > 7; +SELECT * +FROM dblink('dbname=regression_slave','SELECT * FROM foo') AS t(a int, b text, c text[]) +WHERE t.a > 7; -- should generate "no connection available" error -select * from dblink('select * from foo') as t(a int, b text, c text[]) where t.a > 7; +SELECT * +FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]) +WHERE t.a > 7; -- create a persistent connection -select dblink_connect('dbname=regression_slave'); +SELECT dblink_connect('dbname=regression_slave'); -- use the persistent connection -select * from dblink('select * from foo') as t(a int, b text, c text[]) where t.a > 7; +SELECT * +FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]) +WHERE t.a > 7; -- open a cursor -select dblink_open('rmt_foo_cursor','select * from foo'); +SELECT dblink_open('rmt_foo_cursor','SELECT * FROM foo'); -- fetch some data -select * from dblink_fetch('rmt_foo_cursor',4) as t(a int, b text, c text[]); -select * from dblink_fetch('rmt_foo_cursor',4) as t(a int, b text, c text[]); +SELECT * +FROM dblink_fetch('rmt_foo_cursor',4) AS t(a int, b text, c text[]); + +SELECT * +FROM dblink_fetch('rmt_foo_cursor',4) AS t(a int, b text, c text[]); -- this one only finds two rows left -select * from dblink_fetch('rmt_foo_cursor',4) as t(a int, b text, c text[]); +SELECT * +FROM dblink_fetch('rmt_foo_cursor',4) AS t(a int, b text, c text[]); -- close the cursor -select dblink_close('rmt_foo_cursor'); +SELECT dblink_close('rmt_foo_cursor'); -- should generate "cursor rmt_foo_cursor does not exist" error -select * from dblink_fetch('rmt_foo_cursor',4) as t(a int, b text, c text[]); +SELECT * +FROM dblink_fetch('rmt_foo_cursor',4) AS t(a int, b text, c text[]); -- close the persistent connection -select dblink_disconnect(); +SELECT dblink_disconnect(); -- should generate "no connection available" error -select * from dblink('select * from foo') as t(a int, b text, c text[]) where t.a > 7; +SELECT * +FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]) +WHERE t.a > 7; -- put more data into our slave table, first using arbitrary connection syntax -- but truncate the actual return value so we can use diff to check for success -select substr(dblink_exec('dbname=regression_slave','insert into foo values(10,''k'',''{"a10","b10","c10"}'')'),1,6); +SELECT substr(dblink_exec('dbname=regression_slave','INSERT INTO foo VALUES(10,''k'',''{"a10","b10","c10"}'')'),1,6); -- create a persistent connection -select dblink_connect('dbname=regression_slave'); +SELECT dblink_connect('dbname=regression_slave'); -- put more data into our slave table, using persistent connection syntax -- but truncate the actual return value so we can use diff to check for success -select substr(dblink_exec('insert into foo values(11,''l'',''{"a11","b11","c11"}'')'),1,6); +SELECT substr(dblink_exec('INSERT INTO foo VALUES(11,''l'',''{"a11","b11","c11"}'')'),1,6); -- let's see it -select * from dblink('select * from foo') as t(a int, b text, c text[]); +SELECT * +FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]); -- change some data -select dblink_exec('update foo set f3[2] = ''b99'' where f1 = 11'); +SELECT dblink_exec('UPDATE foo SET f3[2] = ''b99'' WHERE f1 = 11'); -- let's see it -select * from dblink('select * from foo') as t(a int, b text, c text[]) where a = 11; +SELECT * +FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]) +WHERE a = 11; -- delete some data -select dblink_exec('delete from foo where f1 = 11'); +SELECT dblink_exec('DELETE FROM foo WHERE f1 = 11'); -- let's see it -select * from dblink('select * from foo') as t(a int, b text, c text[]) where a = 11; +SELECT * +FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[]) +WHERE a = 11; -- close the persistent connection -select dblink_disconnect(); +SELECT dblink_disconnect(); diff --git a/contrib/dbmirror/AddTrigger.sql b/contrib/dbmirror/AddTrigger.sql index da786ec5dd..de07c3ae00 100644 --- a/contrib/dbmirror/AddTrigger.sql +++ b/contrib/dbmirror/AddTrigger.sql @@ -1,5 +1,9 @@ +-- Adjust this setting to control where the objects get created. +SET search_path = public; -CREATE TRIGGER "MyTableName_Trig" AFTER INSERT OR DELETE OR UPDATE -ON "MyTableName" FOR EACH ROW EXECUTE PROCEDURE -"recordchange" (); +SET autocommit TO 'on'; + +CREATE TRIGGER "MyTableName_Trig" +AFTER INSERT OR DELETE OR UPDATE ON "MyTableName" +FOR EACH ROW EXECUTE PROCEDURE "recordchange" (); diff --git a/contrib/dbmirror/DBMirror.pl b/contrib/dbmirror/DBMirror.pl index c934c869b7..9c9f197e91 100755 --- a/contrib/dbmirror/DBMirror.pl +++ b/contrib/dbmirror/DBMirror.pl @@ -19,7 +19,7 @@ # GNU General Public License for more details. # ############################################################################## -# $Id: DBMirror.pl,v 1.1 2002/06/23 21:58:07 momjian Exp $ +# $Id: DBMirror.pl,v 1.2 2002/10/18 18:41:19 momjian Exp $ # ############################################################################## @@ -112,6 +112,23 @@ sub Main() { die; } + my $setQuery; + $setQuery = "SET search_path = public"; + $setResult = $masterConn->exec($setQuery); + if($setResult->resultStatus!=PGRES_COMMAND_OK) { + logErrorMessage($masterConn->errorMessage . "\n" . + $setQuery); + die; + } + + my $setQuery2; + $setQuery2 = "SET autocommit TO 'on'"; + $setResult2 = $masterConn->exec($setQuery2); + if($setResult2->resultStatus!=PGRES_COMMAND_OK) { + logErrorMessage($masterConn->errorMessage . "\n" . + $setQuery2); + die; + } my $firstTime = 1; while(1) { @@ -127,6 +144,7 @@ sub Main() { + sendQueryToSlaves(undef,"SET autocommit TO 'on'"); sendQueryToSlaves(undef,"SET TRANSACTION ISOLATION LEVEL SERIALIZABLE"); sendQueryToSlaves(undef,"SET CONSTRAINTS ALL DEFERRED"); @@ -703,7 +721,7 @@ sub openSlaveConnection($) { $slaveConn = Pg::connectdb($slaveConnString); - if($slaveConn->status !=PGRES_CONNECTION_OK) { + if($slaveConn->status != PGRES_CONNECTION_OK) { my $errorMessage = "Can't connect to slave database " ; $errorMessage .= $slavePtr->{"slaveHost"} . "\n"; $errorMessage .= $slaveConn->errorMessage; diff --git a/contrib/dbmirror/MirrorSetup.sql b/contrib/dbmirror/MirrorSetup.sql index 8e03264165..7597318411 100644 --- a/contrib/dbmirror/MirrorSetup.sql +++ b/contrib/dbmirror/MirrorSetup.sql @@ -1,4 +1,6 @@ +SET autocommit TO 'on'; + CREATE FUNCTION "recordchange" () RETURNS trigger AS '/usr/local/pgsql/lib/pending.so', 'recordchange' LANGUAGE 'C'; diff --git a/contrib/dbmirror/clean_pending.pl b/contrib/dbmirror/clean_pending.pl index 2729288177..a74ea24700 100755 --- a/contrib/dbmirror/clean_pending.pl +++ b/contrib/dbmirror/clean_pending.pl @@ -16,7 +16,7 @@ # GNU General Public License for more details. # ############################################################################## -# $Id: clean_pending.pl,v 1.1 2002/06/23 21:58:08 momjian Exp $ +# $Id: clean_pending.pl,v 1.2 2002/10/18 18:41:19 momjian Exp $ ############################################################################## @@ -69,6 +69,10 @@ unless($dbConn->status == PGRES_CONNECTION_OK) { printf("Can't connect to database\n"); die; } +my $setresult = $dbConn->exec("SET autocommit TO 'on'"); +unless($setresult->resultStatus == PGRES_COMMAND_OK) { + die $dbConn->errorMessage; +} my $result = $dbConn->exec("BEGIN"); unless($result->resultStatus == PGRES_COMMAND_OK) { die $dbConn->errorMessage; diff --git a/contrib/earthdistance/earthdistance.sql.in b/contrib/earthdistance/earthdistance.sql.in index 04485589c7..70dc32abab 100644 --- a/contrib/earthdistance/earthdistance.sql.in +++ b/contrib/earthdistance/earthdistance.sql.in @@ -1,24 +1,19 @@ -begin; +-- Adjust this setting to control where the objects get created. +SET search_path = public; + +SET autocommit TO 'on'; --------------- geo_distance -CREATE OR REPLACE FUNCTION geo_distance (point, point) RETURNS float8 - LANGUAGE 'c' IMMUTABLE STRICT AS 'MODULE_PATHNAME'; +CREATE OR REPLACE FUNCTION geo_distance (point, point) +RETURNS float8 +LANGUAGE 'C' IMMUTABLE STRICT AS 'MODULE_PATHNAME'; --------------- geo_distance as operator <@> CREATE OPERATOR <@> ( - leftarg = point, - rightarg = point, - procedure = geo_distance, - commutator = <@> + LEFTARG = point, + RIGHTARG = point, + PROCEDURE = geo_distance, + COMMUTATOR = <@> ); - --- --- By default this function is made executable by anyone. To restrict --- access by default, comment out the following grant command. --- - -grant execute on function geo_distance(point, point) to public; - -commit; diff --git a/contrib/earthdistance/expected/earthdistance.out b/contrib/earthdistance/expected/earthdistance.out index 722299689e..d8b8b68a72 100644 --- a/contrib/earthdistance/expected/earthdistance.out +++ b/contrib/earthdistance/expected/earthdistance.out @@ -9,73 +9,73 @@ -- -- Test getting the distance between two points using geo_distance. -- -select geo_distance('(0,0)'::point,'(0,0)'::point)::numeric(20,5); +SELECT geo_distance('(0,0)'::point,'(0,0)'::point)::numeric(20,5); geo_distance -------------- 0.00000 (1 row) -select geo_distance('(0,0)'::point,'(180,0)'::point)::numeric(20,5); +SELECT geo_distance('(0,0)'::point,'(180,0)'::point)::numeric(20,5); geo_distance -------------- 12436.77274 (1 row) -select geo_distance('(0,0)'::point,'(0,90)'::point)::numeric(20,5); +SELECT geo_distance('(0,0)'::point,'(0,90)'::point)::numeric(20,5); geo_distance -------------- 6218.38637 (1 row) -select geo_distance('(0,0)'::point,'(90,0)'::point)::numeric(20,5); +SELECT geo_distance('(0,0)'::point,'(90,0)'::point)::numeric(20,5); geo_distance -------------- 6218.38637 (1 row) -select geo_distance('(0,0)'::point,'(1,0)'::point)::numeric(20,5); +SELECT geo_distance('(0,0)'::point,'(1,0)'::point)::numeric(20,5); geo_distance -------------- 69.09318 (1 row) -select geo_distance('(0,0)'::point,'(0,1)'::point)::numeric(20,5); +SELECT geo_distance('(0,0)'::point,'(0,1)'::point)::numeric(20,5); geo_distance -------------- 69.09318 (1 row) -select geo_distance('(0,30)'::point,'(1,30)'::point)::numeric(20,5); +SELECT geo_distance('(0,30)'::point,'(1,30)'::point)::numeric(20,5); geo_distance -------------- 59.83626 (1 row) -select geo_distance('(0,30)'::point,'(0,31)'::point)::numeric(20,5); +SELECT geo_distance('(0,30)'::point,'(0,31)'::point)::numeric(20,5); geo_distance -------------- 69.09318 (1 row) -select geo_distance('(0,60)'::point,'(1,60)'::point)::numeric(20,5); +SELECT geo_distance('(0,60)'::point,'(1,60)'::point)::numeric(20,5); geo_distance -------------- 34.54626 (1 row) -select geo_distance('(0,60)'::point,'(0,61)'::point)::numeric(20,5); +SELECT geo_distance('(0,60)'::point,'(0,61)'::point)::numeric(20,5); geo_distance -------------- 69.09318 (1 row) -select geo_distance('(87.6,41.8)'::point,'(106.7,35.1)'::point)::numeric(20,5); +SELECT geo_distance('(87.6,41.8)'::point,'(106.7,35.1)'::point)::numeric(20,5); geo_distance -------------- 1129.18983 (1 row) -select (geo_distance('(87.6,41.8)'::point,'(106.7,35.1)'::point)*5280.*12.*2.54/100.)::numeric(20,5); +SELECT (geo_distance('(87.6,41.8)'::point,'(106.7,35.1)'::point)*5280.*12.*2.54/100.)::numeric(20,5); numeric --------------- 1817254.87730 @@ -84,73 +84,73 @@ select (geo_distance('(87.6,41.8)'::point,'(106.7,35.1)'::point)*5280.*12.*2.54/ -- -- Test getting the distance between two points using the <@> operator. -- -select ('(0,0)'::point <@> '(0,0)'::point)::numeric(20,5); +SELECT ('(0,0)'::point <@> '(0,0)'::point)::numeric(20,5); numeric --------- 0.00000 (1 row) -select ('(0,0)'::point <@> '(180,0)'::point)::numeric(20,5); +SELECT ('(0,0)'::point <@> '(180,0)'::point)::numeric(20,5); numeric ------------- 12436.77274 (1 row) -select ('(0,0)'::point <@> '(0,90)'::point)::numeric(20,5); +SELECT ('(0,0)'::point <@> '(0,90)'::point)::numeric(20,5); numeric ------------ 6218.38637 (1 row) -select ('(0,0)'::point <@> '(90,0)'::point)::numeric(20,5); +SELECT ('(0,0)'::point <@> '(90,0)'::point)::numeric(20,5); numeric ------------ 6218.38637 (1 row) -select ('(0,0)'::point <@> '(1,0)'::point)::numeric(20,5); +SELECT ('(0,0)'::point <@> '(1,0)'::point)::numeric(20,5); numeric ---------- 69.09318 (1 row) -select ('(0,0)'::point <@> '(0,1)'::point)::numeric(20,5); +SELECT ('(0,0)'::point <@> '(0,1)'::point)::numeric(20,5); numeric ---------- 69.09318 (1 row) -select ('(0,30)'::point <@> '(1,30)'::point)::numeric(20,5); +SELECT ('(0,30)'::point <@> '(1,30)'::point)::numeric(20,5); numeric ---------- 59.83626 (1 row) -select ('(0,30)'::point <@> '(0,31)'::point)::numeric(20,5); +SELECT ('(0,30)'::point <@> '(0,31)'::point)::numeric(20,5); numeric ---------- 69.09318 (1 row) -select ('(0,60)'::point <@> '(1,60)'::point)::numeric(20,5); +SELECT ('(0,60)'::point <@> '(1,60)'::point)::numeric(20,5); numeric ---------- 34.54626 (1 row) -select ('(0,60)'::point <@> '(0,61)'::point)::numeric(20,5); +SELECT ('(0,60)'::point <@> '(0,61)'::point)::numeric(20,5); numeric ---------- 69.09318 (1 row) -select ('(87.6,41.8)'::point <@> '(106.7,35.1)'::point)::numeric(20,5); +SELECT ('(87.6,41.8)'::point <@> '(106.7,35.1)'::point)::numeric(20,5); numeric ------------ 1129.18983 (1 row) -select (('(87.6,41.8)'::point <@> '(106.7,35.1)'::point)*5280.*12.*2.54/100.)::numeric(20,5); +SELECT (('(87.6,41.8)'::point <@> '(106.7,35.1)'::point)*5280.*12.*2.54/100.)::numeric(20,5); numeric --------------- 1817254.87730 diff --git a/contrib/earthdistance/sql/earthdistance.sql b/contrib/earthdistance/sql/earthdistance.sql index 5703ee0027..d8c481becc 100644 --- a/contrib/earthdistance/sql/earthdistance.sql +++ b/contrib/earthdistance/sql/earthdistance.sql @@ -7,6 +7,7 @@ -- does not depend on contents of earthdistance.sql or cube.sql. -- \set ECHO none +SET autocommit TO 'on'; \i earthdistance.sql \set ECHO all @@ -14,32 +15,32 @@ -- Test getting the distance between two points using geo_distance. -- -select geo_distance('(0,0)'::point,'(0,0)'::point)::numeric(20,5); -select geo_distance('(0,0)'::point,'(180,0)'::point)::numeric(20,5); -select geo_distance('(0,0)'::point,'(0,90)'::point)::numeric(20,5); -select geo_distance('(0,0)'::point,'(90,0)'::point)::numeric(20,5); -select geo_distance('(0,0)'::point,'(1,0)'::point)::numeric(20,5); -select geo_distance('(0,0)'::point,'(0,1)'::point)::numeric(20,5); -select geo_distance('(0,30)'::point,'(1,30)'::point)::numeric(20,5); -select geo_distance('(0,30)'::point,'(0,31)'::point)::numeric(20,5); -select geo_distance('(0,60)'::point,'(1,60)'::point)::numeric(20,5); -select geo_distance('(0,60)'::point,'(0,61)'::point)::numeric(20,5); -select geo_distance('(87.6,41.8)'::point,'(106.7,35.1)'::point)::numeric(20,5); -select (geo_distance('(87.6,41.8)'::point,'(106.7,35.1)'::point)*5280.*12.*2.54/100.)::numeric(20,5); +SELECT geo_distance('(0,0)'::point,'(0,0)'::point)::numeric(20,5); +SELECT geo_distance('(0,0)'::point,'(180,0)'::point)::numeric(20,5); +SELECT geo_distance('(0,0)'::point,'(0,90)'::point)::numeric(20,5); +SELECT geo_distance('(0,0)'::point,'(90,0)'::point)::numeric(20,5); +SELECT geo_distance('(0,0)'::point,'(1,0)'::point)::numeric(20,5); +SELECT geo_distance('(0,0)'::point,'(0,1)'::point)::numeric(20,5); +SELECT geo_distance('(0,30)'::point,'(1,30)'::point)::numeric(20,5); +SELECT geo_distance('(0,30)'::point,'(0,31)'::point)::numeric(20,5); +SELECT geo_distance('(0,60)'::point,'(1,60)'::point)::numeric(20,5); +SELECT geo_distance('(0,60)'::point,'(0,61)'::point)::numeric(20,5); +SELECT geo_distance('(87.6,41.8)'::point,'(106.7,35.1)'::point)::numeric(20,5); +SELECT (geo_distance('(87.6,41.8)'::point,'(106.7,35.1)'::point)*5280.*12.*2.54/100.)::numeric(20,5); -- -- Test getting the distance between two points using the <@> operator. -- -select ('(0,0)'::point <@> '(0,0)'::point)::numeric(20,5); -select ('(0,0)'::point <@> '(180,0)'::point)::numeric(20,5); -select ('(0,0)'::point <@> '(0,90)'::point)::numeric(20,5); -select ('(0,0)'::point <@> '(90,0)'::point)::numeric(20,5); -select ('(0,0)'::point <@> '(1,0)'::point)::numeric(20,5); -select ('(0,0)'::point <@> '(0,1)'::point)::numeric(20,5); -select ('(0,30)'::point <@> '(1,30)'::point)::numeric(20,5); -select ('(0,30)'::point <@> '(0,31)'::point)::numeric(20,5); -select ('(0,60)'::point <@> '(1,60)'::point)::numeric(20,5); -select ('(0,60)'::point <@> '(0,61)'::point)::numeric(20,5); -select ('(87.6,41.8)'::point <@> '(106.7,35.1)'::point)::numeric(20,5); -select (('(87.6,41.8)'::point <@> '(106.7,35.1)'::point)*5280.*12.*2.54/100.)::numeric(20,5); +SELECT ('(0,0)'::point <@> '(0,0)'::point)::numeric(20,5); +SELECT ('(0,0)'::point <@> '(180,0)'::point)::numeric(20,5); +SELECT ('(0,0)'::point <@> '(0,90)'::point)::numeric(20,5); +SELECT ('(0,0)'::point <@> '(90,0)'::point)::numeric(20,5); +SELECT ('(0,0)'::point <@> '(1,0)'::point)::numeric(20,5); +SELECT ('(0,0)'::point <@> '(0,1)'::point)::numeric(20,5); +SELECT ('(0,30)'::point <@> '(1,30)'::point)::numeric(20,5); +SELECT ('(0,30)'::point <@> '(0,31)'::point)::numeric(20,5); +SELECT ('(0,60)'::point <@> '(1,60)'::point)::numeric(20,5); +SELECT ('(0,60)'::point <@> '(0,61)'::point)::numeric(20,5); +SELECT ('(87.6,41.8)'::point <@> '(106.7,35.1)'::point)::numeric(20,5); +SELECT (('(87.6,41.8)'::point <@> '(106.7,35.1)'::point)*5280.*12.*2.54/100.)::numeric(20,5); diff --git a/contrib/findoidjoins/findoidjoins.c b/contrib/findoidjoins/findoidjoins.c index a829a58190..464660bd13 100644 --- a/contrib/findoidjoins/findoidjoins.c +++ b/contrib/findoidjoins/findoidjoins.c @@ -3,7 +3,7 @@ * * Copyright 2002 by PostgreSQL Global Development Group * - * $Header: /cvsroot/pgsql/contrib/findoidjoins/Attic/findoidjoins.c,v 1.18 2002/09/05 19:57:32 tgl Exp $ + * $Header: /cvsroot/pgsql/contrib/findoidjoins/Attic/findoidjoins.c,v 1.19 2002/10/18 18:41:20 momjian Exp $ */ #include "postgres_fe.h" @@ -48,6 +48,8 @@ main(int argc, char **argv) resetPQExpBuffer(&sql); appendPQExpBuffer(&sql, "%s", + "SET search_path = public;" + "SET autocommit TO 'on';" "SELECT c.relname, (SELECT nspname FROM " "pg_catalog.pg_namespace n WHERE n.oid = c.relnamespace) AS nspname " "FROM pg_catalog.pg_class c " diff --git a/contrib/fulltextindex/fti.pl b/contrib/fulltextindex/fti.pl index 5b660ed815..60c7d97c6b 100644 --- a/contrib/fulltextindex/fti.pl +++ b/contrib/fulltextindex/fti.pl @@ -166,6 +166,8 @@ sub main { return 1; } + PQexec($PG_CONN, "SET search_path = public"); + PQexec($PG_CONN, "SET autocommit TO 'on'"); PQexec($PG_CONN, "begin"); $query = "declare C cursor for select (\""; diff --git a/contrib/fulltextindex/fti.sql.in b/contrib/fulltextindex/fti.sql.in index f52a358385..d109aa9a10 100644 --- a/contrib/fulltextindex/fti.sql.in +++ b/contrib/fulltextindex/fti.sql.in @@ -1,5 +1,8 @@ +-- Adjust this setting to control where the objects get created. +SET search_path = public; + +SET autocommit TO 'on'; + CREATE OR REPLACE FUNCTION fti() RETURNS trigger AS 'MODULE_PATHNAME', 'fti' LANGUAGE 'C' VOLATILE CALLED ON NULL INPUT; - -GRANT EXECUTE ON FUNCTION fti() TO PUBLIC; diff --git a/contrib/fulltextindex/uninstall.sql b/contrib/fulltextindex/uninstall.sql index 02ad6ee602..5a330546ab 100644 --- a/contrib/fulltextindex/uninstall.sql +++ b/contrib/fulltextindex/uninstall.sql @@ -1 +1,6 @@ +-- Adjust this setting to control where the objects get created. +SET search_path = public; + +SET autocommit TO 'on'; + DROP FUNCTION fti() CASCADE; diff --git a/contrib/fuzzystrmatch/fuzzystrmatch.sql.in b/contrib/fuzzystrmatch/fuzzystrmatch.sql.in index 0be715bac7..3dc2888f40 100644 --- a/contrib/fuzzystrmatch/fuzzystrmatch.sql.in +++ b/contrib/fuzzystrmatch/fuzzystrmatch.sql.in @@ -1,16 +1,22 @@ -CREATE FUNCTION levenshtein (text,text) RETURNS int - AS 'MODULE_PATHNAME','levenshtein' LANGUAGE 'c' with (iscachable, isstrict); +-- Adjust this setting to control where the objects get created. +SET search_path = public; -CREATE FUNCTION metaphone (text,int) RETURNS text - AS 'MODULE_PATHNAME','metaphone' LANGUAGE 'c' with (iscachable, isstrict); +SET autocommit TO 'on'; + +CREATE FUNCTION levenshtein (text,text) +RETURNS int +AS 'MODULE_PATHNAME','levenshtein' +LANGUAGE 'C' WITH (iscachable, isstrict); + +CREATE FUNCTION metaphone (text,int) +RETURNS text +AS 'MODULE_PATHNAME','metaphone' +LANGUAGE 'C' WITH (iscachable, isstrict); CREATE FUNCTION soundex(text) RETURNS text - AS 'MODULE_PATHNAME', 'soundex' LANGUAGE 'c' with (iscachable, isstrict); +AS 'MODULE_PATHNAME', 'soundex' +LANGUAGE 'C' WITH (iscachable, isstrict); CREATE FUNCTION text_soundex(text) RETURNS text - AS 'MODULE_PATHNAME', 'soundex' LANGUAGE 'c'; - -GRANT EXECUTE ON FUNCTION levenshtein (text,text) TO PUBLIC; -GRANT EXECUTE ON FUNCTION metaphone (text,int) TO PUBLIC; -GRANT EXECUTE ON FUNCTION soundex(text) TO PUBLIC; -GRANT EXECUTE ON FUNCTION text_soundex(text) TO PUBLIC; +AS 'MODULE_PATHNAME', 'soundex' +LANGUAGE 'C'; diff --git a/contrib/intagg/int_aggregate.sql.in b/contrib/intagg/int_aggregate.sql.in index fcba720f32..1d5f83e682 100644 --- a/contrib/intagg/int_aggregate.sql.in +++ b/contrib/intagg/int_aggregate.sql.in @@ -1,28 +1,25 @@ --- Drop functions -drop aggregate int_array_aggregate(int4); -drop function int_agg_state (int4, int4); -drop function int_agg_final_array (int4); -drop function int_array_enum (int4[]); +-- Adjust this setting to control where the objects get created. +SET search_path = public; +SET autocommit TO 'on'; -- Internal function for the aggregate -- Is called for each item in an aggregation -create function int_agg_state (int4, int4) - returns int4 - as 'MODULE_PATHNAME','int_agg_state' - language 'c'; +CREATE OR REPLACE FUNCTION int_agg_state (int4, int4) +RETURNS int4 +AS 'MODULE_PATHNAME','int_agg_state' +LANGUAGE 'C'; -- Internal function for the aggregate -- Is called at the end of the aggregation, and returns an array. -create function int_agg_final_array (int4) - returns int4[] - as 'MODULE_PATHNAME','int_agg_final_array' - language 'c'; +CREATE OR REPLACE FUNCTION int_agg_final_array (int4) +RETURNS int4[] +AS 'MODULE_PATHNAME','int_agg_final_array' +LANGUAGE 'C'; -- The aggration funcion. -- uses the above functions to create an array of integers from an aggregation. -create aggregate int_array_aggregate -( +CREATE OR REPLACE AGGREGATE int_array_aggregate ( BASETYPE = int4, SFUNC = int_agg_state, STYPE = int4, @@ -33,8 +30,7 @@ create aggregate int_array_aggregate -- The enumeration function -- returns each element in a one dimentional integer array -- as a row. -create function int_array_enum(int4[]) - returns setof integer - as 'MODULE_PATHNAME','int_enum' - language 'c'; - +CREATE OR REPLACE FUNCTION int_array_enum(int4[]) +RETURNS setof integer +AS 'MODULE_PATHNAME','int_enum' +LANGUAGE 'C'; diff --git a/contrib/intarray/_int.sql.in b/contrib/intarray/_int.sql.in index 7f9a8082ca..c75916507f 100644 --- a/contrib/intarray/_int.sql.in +++ b/contrib/intarray/_int.sql.in @@ -1,53 +1,67 @@ +-- -- Create the user-defined type for the 1-D integer arrays (_int4) --- -BEGIN TRANSACTION; +-- -- Adjust this setting to control where the operators, functions, and -- opclasses get created. SET search_path = public; +SET autocommit TO 'on'; + -- Query type CREATE FUNCTION bqarr_in(cstring) RETURNS query_int AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' WITH (isstrict); CREATE FUNCTION bqarr_out(query_int) RETURNS cstring AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' WITH (isstrict); CREATE TYPE query_int ( -internallength = -1, -input = bqarr_in, -output = bqarr_out + INTERNALLENGTH = -1, + INPUT = bqarr_in, + OUTPUT = bqarr_out ); --only for debug CREATE FUNCTION querytree(query_int) RETURNS text AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' WITH (isstrict); -CREATE FUNCTION boolop(_int4, query_int) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION boolop(_int4, query_int) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isstrict); COMMENT ON FUNCTION boolop(_int4, query_int) IS 'boolean operation with array'; -CREATE FUNCTION rboolop(query_int, _int4) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION rboolop(query_int, _int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isstrict); COMMENT ON FUNCTION rboolop(query_int, _int4) IS 'boolean operation with array'; CREATE OPERATOR @@ ( - LEFTARG = _int4, RIGHTARG = query_int, PROCEDURE = boolop, - COMMUTATOR = '~~', RESTRICT = contsel, JOIN = contjoinsel + LEFTARG = _int4, + RIGHTARG = query_int, + PROCEDURE = boolop, + COMMUTATOR = '~~', + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ~~ ( - LEFTARG = query_int, RIGHTARG = _int4, PROCEDURE = rboolop, - COMMUTATOR = '@@', RESTRICT = contsel, JOIN = contjoinsel + LEFTARG = query_int, + RIGHTARG = _int4, + PROCEDURE = rboolop, + COMMUTATOR = '@@', + RESTRICT = contsel, + JOIN = contjoinsel ); @@ -57,175 +71,279 @@ CREATE OPERATOR ~~ ( -- Comparison methods -CREATE FUNCTION _int_contains(_int4, _int4) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION _int_contains(_int4, _int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isstrict); COMMENT ON FUNCTION _int_contains(_int4, _int4) IS 'contains'; -CREATE FUNCTION _int_contained(_int4, _int4) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION _int_contained(_int4, _int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isstrict); COMMENT ON FUNCTION _int_contained(_int4, _int4) IS 'contained in'; -CREATE FUNCTION _int_overlap(_int4, _int4) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION _int_overlap(_int4, _int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isstrict); COMMENT ON FUNCTION _int_overlap(_int4, _int4) IS 'overlaps'; -CREATE FUNCTION _int_same(_int4, _int4) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION _int_same(_int4, _int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isstrict); COMMENT ON FUNCTION _int_same(_int4, _int4) IS 'same as'; -CREATE FUNCTION _int_different(_int4, _int4) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION _int_different(_int4, _int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isstrict); COMMENT ON FUNCTION _int_different(_int4, _int4) IS 'different'; -- support routines for indexing -CREATE FUNCTION _int_union(_int4, _int4) RETURNS _int4 - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION _int_union(_int4, _int4) +RETURNS _int4 +AS 'MODULE_PATHNAME' LANGUAGE 'C' WITH (isstrict); -CREATE FUNCTION _int_inter(_int4, _int4) RETURNS _int4 - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION _int_inter(_int4, _int4) +RETURNS _int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isstrict); -- -- OPERATORS -- CREATE OPERATOR && ( - LEFTARG = _int4, RIGHTARG = _int4, PROCEDURE = _int_overlap, - COMMUTATOR = '&&', - RESTRICT = contsel, JOIN = contjoinsel + LEFTARG = _int4, + RIGHTARG = _int4, + PROCEDURE = _int_overlap, + COMMUTATOR = '&&', + RESTRICT = contsel, + JOIN = contjoinsel ); --CREATE OPERATOR = ( --- LEFTARG = _int4, RIGHTARG = _int4, PROCEDURE = _int_same, --- COMMUTATOR = '=', NEGATOR = '<>', --- RESTRICT = eqsel, JOIN = eqjoinsel, --- SORT1 = '<', SORT2 = '<' +-- LEFTARG = _int4, +-- RIGHTARG = _int4, +-- PROCEDURE = _int_same, +-- COMMUTATOR = '=', +-- NEGATOR = '<>', +-- RESTRICT = eqsel, +-- JOIN = eqjoinsel, +-- SORT1 = '<', +-- SORT2 = '<' --); CREATE OPERATOR <> ( - LEFTARG = _int4, RIGHTARG = _int4, PROCEDURE = _int_different, - COMMUTATOR = '<>', NEGATOR = '=', - RESTRICT = neqsel, JOIN = neqjoinsel + LEFTARG = _int4, + RIGHTARG = _int4, + PROCEDURE = _int_different, + COMMUTATOR = '<>', + NEGATOR = '=', + RESTRICT = neqsel, + JOIN = neqjoinsel ); CREATE OPERATOR @ ( - LEFTARG = _int4, RIGHTARG = _int4, PROCEDURE = _int_contains, - COMMUTATOR = '~', RESTRICT = contsel, JOIN = contjoinsel + LEFTARG = _int4, + RIGHTARG = _int4, + PROCEDURE = _int_contains, + COMMUTATOR = '~', + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ~ ( - LEFTARG = _int4, RIGHTARG = _int4, PROCEDURE = _int_contained, - COMMUTATOR = '@', RESTRICT = contsel, JOIN = contjoinsel + LEFTARG = _int4, + RIGHTARG = _int4, + PROCEDURE = _int_contained, + COMMUTATOR = '@', + RESTRICT = contsel, + JOIN = contjoinsel ); -------------- -CREATE FUNCTION intset(int4) RETURNS _int4 - AS 'MODULE_PATHNAME' LANGUAGE 'c' WITH (isStrict, isCachable); +CREATE FUNCTION intset(int4) +RETURNS _int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict, isCachable); + +CREATE FUNCTION icount(_int4) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict, isCachable); -CREATE FUNCTION icount(_int4) RETURNS int4 - AS 'MODULE_PATHNAME' LANGUAGE 'c' WITH (isStrict, isCachable); CREATE OPERATOR # ( - RIGHTARG = _int4, PROCEDURE = icount + RIGHTARG = _int4, + PROCEDURE = icount ); -CREATE FUNCTION sort(_int4, text) RETURNS _int4 - AS 'MODULE_PATHNAME' LANGUAGE 'c' WITH (isStrict, isCachable); +CREATE FUNCTION sort(_int4, text) +RETURNS _int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict, isCachable); + +CREATE FUNCTION sort(_int4) +RETURNS _int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict, isCachable); -CREATE FUNCTION sort(_int4) RETURNS _int4 - AS 'MODULE_PATHNAME' LANGUAGE 'c' WITH (isStrict, isCachable); +CREATE FUNCTION sort_asc(_int4) +RETURNS _int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict, isCachable); -CREATE FUNCTION sort_asc(_int4) RETURNS _int4 - AS 'MODULE_PATHNAME' LANGUAGE 'c' WITH (isStrict, isCachable); +CREATE FUNCTION sort_desc(_int4) +RETURNS _int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict, isCachable); -CREATE FUNCTION sort_desc(_int4) RETURNS _int4 - AS 'MODULE_PATHNAME' LANGUAGE 'c' WITH (isStrict, isCachable); +CREATE FUNCTION uniq(_int4) +RETURNS _int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict, isCachable); -CREATE FUNCTION uniq(_int4) RETURNS _int4 - AS 'MODULE_PATHNAME' LANGUAGE 'c' WITH (isStrict, isCachable); +CREATE FUNCTION idx(_int4, int4) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict, isCachable); -CREATE FUNCTION idx(_int4, int4) RETURNS int4 - AS 'MODULE_PATHNAME' LANGUAGE 'c' WITH (isStrict, isCachable); CREATE OPERATOR # ( - LEFTARG = _int4, RIGHTARG = int4, PROCEDURE = idx + LEFTARG = _int4, + RIGHTARG = int4, + PROCEDURE = idx ); -CREATE FUNCTION subarray(_int4, int4, int4) RETURNS _int4 - AS 'MODULE_PATHNAME' LANGUAGE 'c' WITH (isStrict, isCachable); +CREATE FUNCTION subarray(_int4, int4, int4) +RETURNS _int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict, isCachable); + +CREATE FUNCTION subarray(_int4, int4) +RETURNS _int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict, isCachable); -CREATE FUNCTION subarray(_int4, int4) RETURNS _int4 - AS 'MODULE_PATHNAME' LANGUAGE 'c' WITH (isStrict, isCachable); +CREATE FUNCTION intarray_push_elem(_int4, int4) +RETURNS _int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict, isCachable); -CREATE FUNCTION intarray_push_elem(_int4, int4) RETURNS _int4 - AS 'MODULE_PATHNAME' LANGUAGE 'c' WITH (isStrict, isCachable); CREATE OPERATOR + ( - LEFTARG = _int4, RIGHTARG = int4, PROCEDURE = intarray_push_elem + LEFTARG = _int4, + RIGHTARG = int4, + PROCEDURE = intarray_push_elem ); -CREATE FUNCTION intarray_push_array(_int4, _int4) RETURNS _int4 - AS 'MODULE_PATHNAME' LANGUAGE 'c' WITH (isStrict, isCachable); +CREATE FUNCTION intarray_push_array(_int4, _int4) +RETURNS _int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict, isCachable); + CREATE OPERATOR + ( - LEFTARG = _int4, RIGHTARG = _int4, COMMUTATOR = +, PROCEDURE = intarray_push_array + LEFTARG = _int4, + RIGHTARG = _int4, + COMMUTATOR = +, + PROCEDURE = intarray_push_array ); -CREATE FUNCTION intarray_del_elem(_int4, int4) RETURNS _int4 - AS 'MODULE_PATHNAME' LANGUAGE 'c' WITH (isStrict, isCachable); +CREATE FUNCTION intarray_del_elem(_int4, int4) +RETURNS _int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict, isCachable); + CREATE OPERATOR - ( - LEFTARG = _int4, RIGHTARG = int4, PROCEDURE = intarray_del_elem + LEFTARG = _int4, + RIGHTARG = int4, + PROCEDURE = intarray_del_elem ); -CREATE FUNCTION intset_union_elem(_int4, int4) RETURNS _int4 - AS 'MODULE_PATHNAME' LANGUAGE 'c' WITH (isStrict, isCachable); +CREATE FUNCTION intset_union_elem(_int4, int4) +RETURNS _int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict, isCachable); + CREATE OPERATOR | ( - LEFTARG = _int4, RIGHTARG = int4, PROCEDURE = intset_union_elem + LEFTARG = _int4, + RIGHTARG = int4, + PROCEDURE = intset_union_elem ); CREATE OPERATOR | ( - LEFTARG = _int4, RIGHTARG = _int4, COMMUTATOR = |, PROCEDURE = _int_union + LEFTARG = _int4, + RIGHTARG = _int4, + COMMUTATOR = |, + PROCEDURE = _int_union ); -CREATE FUNCTION intset_subtract(_int4, _int4) RETURNS _int4 - AS 'MODULE_PATHNAME' LANGUAGE 'c' WITH (isStrict, isCachable); +CREATE FUNCTION intset_subtract(_int4, _int4) +RETURNS _int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict, isCachable); + CREATE OPERATOR - ( - LEFTARG = _int4, RIGHTARG = _int4, PROCEDURE = intset_subtract + LEFTARG = _int4, + RIGHTARG = _int4, + PROCEDURE = intset_subtract ); CREATE OPERATOR & ( - LEFTARG = _int4, RIGHTARG = _int4, COMMUTATOR = &, PROCEDURE = _int_inter + LEFTARG = _int4, + RIGHTARG = _int4, + COMMUTATOR = &, + PROCEDURE = _int_inter ); -------------- -- define the GiST support methods -CREATE FUNCTION g_int_consistent(internal,_int4,int4) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION g_int_consistent(internal,_int4,int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -CREATE FUNCTION g_int_compress(internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION g_int_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -CREATE FUNCTION g_int_decompress(internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION g_int_decompress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -CREATE FUNCTION g_int_penalty(internal,internal,internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION g_int_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isstrict); -CREATE FUNCTION g_int_picksplit(internal, internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION g_int_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -CREATE FUNCTION g_int_union(bytea, internal) RETURNS _int4 - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION g_int_union(bytea, internal) +RETURNS _int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -CREATE FUNCTION g_int_same(_int4, _int4, internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION g_int_same(_int4, _int4, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -- Create the operator class for indexing CREATE OPERATOR CLASS gist__int_ops - DEFAULT FOR TYPE _int4 USING gist AS +DEFAULT FOR TYPE _int4 USING gist AS OPERATOR 3 &&, OPERATOR 6 = RECHECK, OPERATOR 7 @, @@ -244,31 +362,46 @@ CREATE OPERATOR CLASS gist__int_ops -- intbig --------------------------------------------- -- define the GiST support methods -CREATE FUNCTION g_intbig_consistent(internal,_int4,int4) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION g_intbig_consistent(internal,_int4,int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -CREATE FUNCTION g_intbig_compress(internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION g_intbig_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -CREATE FUNCTION g_intbig_decompress(internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION g_intbig_decompress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -CREATE FUNCTION g_intbig_penalty(internal,internal,internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION g_intbig_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isstrict); -CREATE FUNCTION g_intbig_picksplit(internal, internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION g_intbig_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -CREATE FUNCTION g_intbig_union(bytea, internal) RETURNS _int4 - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION g_intbig_union(bytea, internal) +RETURNS _int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -CREATE FUNCTION g_intbig_same(_int4, _int4, internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION g_intbig_same(_int4, _int4, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -- register the opclass for indexing (not as default) CREATE OPERATOR CLASS gist__intbig_ops - FOR TYPE _int4 USING gist AS +FOR TYPE _int4 USING gist +AS OPERATOR 3 && RECHECK, OPERATOR 6 = RECHECK, OPERATOR 7 @ RECHECK, @@ -281,5 +414,3 @@ CREATE OPERATOR CLASS gist__intbig_ops FUNCTION 5 g_intbig_penalty (internal, internal, internal), FUNCTION 6 g_intbig_picksplit (internal, internal), FUNCTION 7 g_intbig_same (_int4, _int4, internal); - -END TRANSACTION; diff --git a/contrib/intarray/expected/_int.out b/contrib/intarray/expected/_int.out index f860608b12..b86c9bca0c 100644 --- a/contrib/intarray/expected/_int.out +++ b/contrib/intarray/expected/_int.out @@ -3,364 +3,364 @@ -- does not depend on contents of seg.sql. -- \set ECHO none -psql:_int.sql:13: WARNING: ProcedureCreate: type query_int is not yet defined -psql:_int.sql:18: WARNING: Argument type "query_int" is only a shell -select intset(1234); +psql:_int.sql:15: WARNING: ProcedureCreate: type query_int is not yet defined +psql:_int.sql:20: WARNING: Argument type "query_int" is only a shell +SELECT intset(1234); intset -------- {1234} (1 row) -select icount('{1234234,234234}'); +SELECT icount('{1234234,234234}'); icount -------- 2 (1 row) -select sort('{1234234,-30,234234}'); +SELECT sort('{1234234,-30,234234}'); sort ---------------------- {-30,234234,1234234} (1 row) -select sort('{1234234,-30,234234}','asc'); +SELECT sort('{1234234,-30,234234}','asc'); sort ---------------------- {-30,234234,1234234} (1 row) -select sort('{1234234,-30,234234}','desc'); +SELECT sort('{1234234,-30,234234}','desc'); sort ---------------------- {1234234,234234,-30} (1 row) -select sort_asc('{1234234,-30,234234}'); +SELECT sort_asc('{1234234,-30,234234}'); sort_asc ---------------------- {-30,234234,1234234} (1 row) -select sort_desc('{1234234,-30,234234}'); +SELECT sort_desc('{1234234,-30,234234}'); sort_desc ---------------------- {1234234,234234,-30} (1 row) -select uniq('{1234234,-30,-30,234234,-30}'); +SELECT uniq('{1234234,-30,-30,234234,-30}'); uniq -------------------------- {1234234,-30,234234,-30} (1 row) -select uniq(sort_asc('{1234234,-30,-30,234234,-30}')); +SELECT uniq(sort_asc('{1234234,-30,-30,234234,-30}')); uniq ---------------------- {-30,234234,1234234} (1 row) -select idx('{1234234,-30,-30,234234,-30}',-30); +SELECT idx('{1234234,-30,-30,234234,-30}',-30); idx ----- 2 (1 row) -select subarray('{1234234,-30,-30,234234,-30}',2,3); +SELECT subarray('{1234234,-30,-30,234234,-30}',2,3); subarray ------------------ {-30,-30,234234} (1 row) -select subarray('{1234234,-30,-30,234234,-30}',-1,1); +SELECT subarray('{1234234,-30,-30,234234,-30}',-1,1); subarray ---------- {-30} (1 row) -select subarray('{1234234,-30,-30,234234,-30}',0,-1); +SELECT subarray('{1234234,-30,-30,234234,-30}',0,-1); subarray -------------------------- {1234234,-30,-30,234234} (1 row) -select #'{1234234,234234}'::int[]; +SELECT #'{1234234,234234}'::int[]; ?column? ---------- 2 (1 row) -select '{123,623,445}'::int[] + 1245; +SELECT '{123,623,445}'::int[] + 1245; ?column? -------------------- {123,623,445,1245} (1 row) -select '{123,623,445}'::int[] + 445; +SELECT '{123,623,445}'::int[] + 445; ?column? ------------------- {123,623,445,445} (1 row) -select '{123,623,445}'::int[] + '{1245,87,445}'; +SELECT '{123,623,445}'::int[] + '{1245,87,445}'; ?column? --------------------------- {123,623,445,1245,87,445} (1 row) -select '{123,623,445}'::int[] - 623; +SELECT '{123,623,445}'::int[] - 623; ?column? ----------- {123,445} (1 row) -select '{123,623,445}'::int[] - '{1623,623}'; +SELECT '{123,623,445}'::int[] - '{1623,623}'; ?column? ----------- {123,445} (1 row) -select '{123,623,445}'::int[] | 623; +SELECT '{123,623,445}'::int[] | 623; ?column? --------------- {123,445,623} (1 row) -select '{123,623,445}'::int[] | 1623; +SELECT '{123,623,445}'::int[] | 1623; ?column? -------------------- {123,445,623,1623} (1 row) -select '{123,623,445}'::int[] | '{1623,623}'; +SELECT '{123,623,445}'::int[] | '{1623,623}'; ?column? -------------------- {123,445,623,1623} (1 row) -select '{123,623,445}'::int[] & '{1623,623}'; +SELECT '{123,623,445}'::int[] & '{1623,623}'; ?column? ---------- {623} (1 row) --test query_int -select '1'::query_int; +SELECT '1'::query_int; query_int ----------- 1 (1 row) -select ' 1'::query_int; +SELECT ' 1'::query_int; query_int ----------- 1 (1 row) -select '1 '::query_int; +SELECT '1 '::query_int; query_int ----------- 1 (1 row) -select ' 1 '::query_int; +SELECT ' 1 '::query_int; query_int ----------- 1 (1 row) -select ' ! 1 '::query_int; +SELECT ' ! 1 '::query_int; query_int ----------- !1 (1 row) -select '!1'::query_int; +SELECT '!1'::query_int; query_int ----------- !1 (1 row) -select '1|2'::query_int; +SELECT '1|2'::query_int; query_int ----------- 1 | 2 (1 row) -select '1|!2'::query_int; +SELECT '1|!2'::query_int; query_int ----------- 1 | !2 (1 row) -select '!1|2'::query_int; +SELECT '!1|2'::query_int; query_int ----------- !1 | 2 (1 row) -select '!1|!2'::query_int; +SELECT '!1|!2'::query_int; query_int ----------- !1 | !2 (1 row) -select '!(!1|!2)'::query_int; +SELECT '!(!1|!2)'::query_int; query_int -------------- !( !1 | !2 ) (1 row) -select '!(!1|2)'::query_int; +SELECT '!(!1|2)'::query_int; query_int ------------- !( !1 | 2 ) (1 row) -select '!(1|!2)'::query_int; +SELECT '!(1|!2)'::query_int; query_int ------------- !( 1 | !2 ) (1 row) -select '!(1|2)'::query_int; +SELECT '!(1|2)'::query_int; query_int ------------ !( 1 | 2 ) (1 row) -select '1&2'::query_int; +SELECT '1&2'::query_int; query_int ----------- 1 & 2 (1 row) -select '!1&2'::query_int; +SELECT '!1&2'::query_int; query_int ----------- !1 & 2 (1 row) -select '1&!2'::query_int; +SELECT '1&!2'::query_int; query_int ----------- 1 & !2 (1 row) -select '!1&!2'::query_int; +SELECT '!1&!2'::query_int; query_int ----------- !1 & !2 (1 row) -select '(1&2)'::query_int; +SELECT '(1&2)'::query_int; query_int ----------- 1 & 2 (1 row) -select '1&(2)'::query_int; +SELECT '1&(2)'::query_int; query_int ----------- 1 & 2 (1 row) -select '!(1)&2'::query_int; +SELECT '!(1)&2'::query_int; query_int ----------- !1 & 2 (1 row) -select '!(1&2)'::query_int; +SELECT '!(1&2)'::query_int; query_int ------------ !( 1 & 2 ) (1 row) -select '1|2&3'::query_int; +SELECT '1|2&3'::query_int; query_int ----------- 1 | 2 & 3 (1 row) -select '1|(2&3)'::query_int; +SELECT '1|(2&3)'::query_int; query_int ----------- 1 | 2 & 3 (1 row) -select '(1|2)&3'::query_int; +SELECT '(1|2)&3'::query_int; query_int --------------- ( 1 | 2 ) & 3 (1 row) -select '1|2&!3'::query_int; +SELECT '1|2&!3'::query_int; query_int ------------ 1 | 2 & !3 (1 row) -select '1|!2&3'::query_int; +SELECT '1|!2&3'::query_int; query_int ------------ 1 | !2 & 3 (1 row) -select '!1|2&3'::query_int; +SELECT '!1|2&3'::query_int; query_int ------------ !1 | 2 & 3 (1 row) -select '!1|(2&3)'::query_int; +SELECT '!1|(2&3)'::query_int; query_int ------------ !1 | 2 & 3 (1 row) -select '!(1|2)&3'::query_int; +SELECT '!(1|2)&3'::query_int; query_int ---------------- !( 1 | 2 ) & 3 (1 row) -select '(!1|2)&3'::query_int; +SELECT '(!1|2)&3'::query_int; query_int ---------------- ( !1 | 2 ) & 3 (1 row) -select '1|(2|(4|(5|6)))'::query_int; +SELECT '1|(2|(4|(5|6)))'::query_int; query_int ------------------------------- 1 | ( 2 | ( 4 | ( 5 | 6 ) ) ) (1 row) -select '1|2|4|5|6'::query_int; +SELECT '1|2|4|5|6'::query_int; query_int ------------------------------- ( ( ( 1 | 2 ) | 4 ) | 5 ) | 6 (1 row) -select '1&(2&(4&(5&6)))'::query_int; +SELECT '1&(2&(4&(5&6)))'::query_int; query_int ------------------- 1 & 2 & 4 & 5 & 6 (1 row) -select '1&2&4&5&6'::query_int; +SELECT '1&2&4&5&6'::query_int; query_int ------------------- 1 & 2 & 4 & 5 & 6 (1 row) -select '1&(2&(4&(5|6)))'::query_int; +SELECT '1&(2&(4&(5|6)))'::query_int; query_int ----------------------- 1 & 2 & 4 & ( 5 | 6 ) (1 row) -select '1&(2&(4&(5|!6)))'::query_int; +SELECT '1&(2&(4&(5|!6)))'::query_int; query_int ------------------------ 1 & 2 & 4 & ( 5 | !6 ) @@ -465,7 +465,7 @@ SELECT count(*) from test__int WHERE a @@ '(20&23)|(50&68)'; 21 (1 row) -drop index text_idx; +DROP INDEX text_idx; CREATE INDEX text_idx on test__int using gist ( a gist__intbig_ops ); SELECT count(*) from test__int WHERE a && '{23,50}'; count diff --git a/contrib/intarray/sql/_int.sql b/contrib/intarray/sql/_int.sql index 2b0b0d1019..91db6d8344 100644 --- a/contrib/intarray/sql/_int.sql +++ b/contrib/intarray/sql/_int.sql @@ -3,73 +3,74 @@ -- does not depend on contents of seg.sql. -- \set ECHO none +SET autocommit TO 'on'; \i _int.sql \set ECHO all -select intset(1234); -select icount('{1234234,234234}'); -select sort('{1234234,-30,234234}'); -select sort('{1234234,-30,234234}','asc'); -select sort('{1234234,-30,234234}','desc'); -select sort_asc('{1234234,-30,234234}'); -select sort_desc('{1234234,-30,234234}'); -select uniq('{1234234,-30,-30,234234,-30}'); -select uniq(sort_asc('{1234234,-30,-30,234234,-30}')); -select idx('{1234234,-30,-30,234234,-30}',-30); -select subarray('{1234234,-30,-30,234234,-30}',2,3); -select subarray('{1234234,-30,-30,234234,-30}',-1,1); -select subarray('{1234234,-30,-30,234234,-30}',0,-1); +SELECT intset(1234); +SELECT icount('{1234234,234234}'); +SELECT sort('{1234234,-30,234234}'); +SELECT sort('{1234234,-30,234234}','asc'); +SELECT sort('{1234234,-30,234234}','desc'); +SELECT sort_asc('{1234234,-30,234234}'); +SELECT sort_desc('{1234234,-30,234234}'); +SELECT uniq('{1234234,-30,-30,234234,-30}'); +SELECT uniq(sort_asc('{1234234,-30,-30,234234,-30}')); +SELECT idx('{1234234,-30,-30,234234,-30}',-30); +SELECT subarray('{1234234,-30,-30,234234,-30}',2,3); +SELECT subarray('{1234234,-30,-30,234234,-30}',-1,1); +SELECT subarray('{1234234,-30,-30,234234,-30}',0,-1); -select #'{1234234,234234}'::int[]; -select '{123,623,445}'::int[] + 1245; -select '{123,623,445}'::int[] + 445; -select '{123,623,445}'::int[] + '{1245,87,445}'; -select '{123,623,445}'::int[] - 623; -select '{123,623,445}'::int[] - '{1623,623}'; -select '{123,623,445}'::int[] | 623; -select '{123,623,445}'::int[] | 1623; -select '{123,623,445}'::int[] | '{1623,623}'; -select '{123,623,445}'::int[] & '{1623,623}'; +SELECT #'{1234234,234234}'::int[]; +SELECT '{123,623,445}'::int[] + 1245; +SELECT '{123,623,445}'::int[] + 445; +SELECT '{123,623,445}'::int[] + '{1245,87,445}'; +SELECT '{123,623,445}'::int[] - 623; +SELECT '{123,623,445}'::int[] - '{1623,623}'; +SELECT '{123,623,445}'::int[] | 623; +SELECT '{123,623,445}'::int[] | 1623; +SELECT '{123,623,445}'::int[] | '{1623,623}'; +SELECT '{123,623,445}'::int[] & '{1623,623}'; --test query_int -select '1'::query_int; -select ' 1'::query_int; -select '1 '::query_int; -select ' 1 '::query_int; -select ' ! 1 '::query_int; -select '!1'::query_int; -select '1|2'::query_int; -select '1|!2'::query_int; -select '!1|2'::query_int; -select '!1|!2'::query_int; -select '!(!1|!2)'::query_int; -select '!(!1|2)'::query_int; -select '!(1|!2)'::query_int; -select '!(1|2)'::query_int; -select '1&2'::query_int; -select '!1&2'::query_int; -select '1&!2'::query_int; -select '!1&!2'::query_int; -select '(1&2)'::query_int; -select '1&(2)'::query_int; -select '!(1)&2'::query_int; -select '!(1&2)'::query_int; -select '1|2&3'::query_int; -select '1|(2&3)'::query_int; -select '(1|2)&3'::query_int; -select '1|2&!3'::query_int; -select '1|!2&3'::query_int; -select '!1|2&3'::query_int; -select '!1|(2&3)'::query_int; -select '!(1|2)&3'::query_int; -select '(!1|2)&3'::query_int; -select '1|(2|(4|(5|6)))'::query_int; -select '1|2|4|5|6'::query_int; -select '1&(2&(4&(5&6)))'::query_int; -select '1&2&4&5&6'::query_int; -select '1&(2&(4&(5|6)))'::query_int; -select '1&(2&(4&(5|!6)))'::query_int; +SELECT '1'::query_int; +SELECT ' 1'::query_int; +SELECT '1 '::query_int; +SELECT ' 1 '::query_int; +SELECT ' ! 1 '::query_int; +SELECT '!1'::query_int; +SELECT '1|2'::query_int; +SELECT '1|!2'::query_int; +SELECT '!1|2'::query_int; +SELECT '!1|!2'::query_int; +SELECT '!(!1|!2)'::query_int; +SELECT '!(!1|2)'::query_int; +SELECT '!(1|!2)'::query_int; +SELECT '!(1|2)'::query_int; +SELECT '1&2'::query_int; +SELECT '!1&2'::query_int; +SELECT '1&!2'::query_int; +SELECT '!1&!2'::query_int; +SELECT '(1&2)'::query_int; +SELECT '1&(2)'::query_int; +SELECT '!(1)&2'::query_int; +SELECT '!(1&2)'::query_int; +SELECT '1|2&3'::query_int; +SELECT '1|(2&3)'::query_int; +SELECT '(1|2)&3'::query_int; +SELECT '1|2&!3'::query_int; +SELECT '1|!2&3'::query_int; +SELECT '!1|2&3'::query_int; +SELECT '!1|(2&3)'::query_int; +SELECT '!(1|2)&3'::query_int; +SELECT '(!1|2)&3'::query_int; +SELECT '1|(2|(4|(5|6)))'::query_int; +SELECT '1|2|4|5|6'::query_int; +SELECT '1&(2&(4&(5&6)))'::query_int; +SELECT '1&2&4&5&6'::query_int; +SELECT '1&(2&(4&(5|6)))'::query_int; +SELECT '1&(2&(4&(5|!6)))'::query_int; CREATE TABLE test__int( a int[] ); @@ -96,7 +97,7 @@ SELECT count(*) from test__int WHERE a @@ '50&68'; SELECT count(*) from test__int WHERE a @ '{20,23}' or a @ '{50,68}'; SELECT count(*) from test__int WHERE a @@ '(20&23)|(50&68)'; -drop index text_idx; +DROP INDEX text_idx; CREATE INDEX text_idx on test__int using gist ( a gist__intbig_ops ); SELECT count(*) from test__int WHERE a && '{23,50}'; @@ -107,4 +108,3 @@ SELECT count(*) from test__int WHERE a @ '{20,23}'; SELECT count(*) from test__int WHERE a @@ '50&68'; SELECT count(*) from test__int WHERE a @ '{20,23}' or a @ '{50,68}'; SELECT count(*) from test__int WHERE a @@ '(20&23)|(50&68)'; - diff --git a/contrib/isbn_issn/isbn_issn.sql.in b/contrib/isbn_issn/isbn_issn.sql.in index 64767f8502..fc9aef97ce 100644 --- a/contrib/isbn_issn/isbn_issn.sql.in +++ b/contrib/isbn_issn/isbn_issn.sql.in @@ -1,35 +1,36 @@ -- -- PostgreSQL code for ISSNs. -- --- $Id: isbn_issn.sql.in,v 1.6 2002/08/22 00:01:39 tgl Exp $ +-- $Id: isbn_issn.sql.in,v 1.7 2002/10/18 18:41:20 momjian Exp $ -- -- Adjust this setting to control where the objects get created. SET search_path = public; +SET autocommit TO 'on'; -- -- Input and output functions and the type itself: -- -create function issn_in(cstring) - returns issn - as 'MODULE_PATHNAME' - language 'c'; - -create function issn_out(issn) - returns cstring - as 'MODULE_PATHNAME' - language 'c'; - -create type issn ( - internallength = 16, - externallength = 9, - input = issn_in, - output = issn_out +CREATE FUNCTION issn_in(cstring) +RETURNS issn +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; + +CREATE FUNCTION issn_out(issn) +RETURNS cstring +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; + +CREATE TYPE issn ( + INTERNALLENGTH = 16, + EXTERNALLENGTH = 9, + INPUT = issn_in, + OUTPUT = issn_out ); -comment on type issn +COMMENT ON TYPE issn is 'International Standard Serial Number'; @@ -37,35 +38,35 @@ comment on type issn -- The various boolean tests: -- -create function issn_lt(issn, issn) - returns bool - as 'MODULE_PATHNAME' - language 'c'; +CREATE FUNCTION issn_lt(issn, issn) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function issn_le(issn, issn) - returns bool - as 'MODULE_PATHNAME' - language 'c'; +CREATE FUNCTION issn_le(issn, issn) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function issn_eq(issn, issn) - returns bool - as 'MODULE_PATHNAME' - language 'c'; +CREATE FUNCTION issn_eq(issn, issn) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function issn_ge(issn, issn) - returns bool - as 'MODULE_PATHNAME' - language 'c'; +CREATE FUNCTION issn_ge(issn, issn) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function issn_gt(issn, issn) - returns bool - as 'MODULE_PATHNAME' - language 'c'; +CREATE FUNCTION issn_gt(issn, issn) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function issn_ne(issn, issn) - returns bool - as 'MODULE_PATHNAME' - language 'c'; +CREATE FUNCTION issn_ne(issn, issn) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -- -- Now the operators. Note how some of the parameters to some @@ -74,47 +75,47 @@ create function issn_ne(issn, issn) -- will be implicitly defined when those are, further down. -- -create operator < ( - leftarg = issn, - rightarg = issn, --- negator = >=, - procedure = issn_lt +CREATE OPERATOR < ( + LEFTARG = issn, + RIGHTARG = issn, +-- NEGATOR = >=, + PROCEDURE = issn_lt ); -create operator <= ( - leftarg = issn, - rightarg = issn, --- negator = >, - procedure = issn_le +CREATE OPERATOR <= ( + LEFTARG = issn, + RIGHTARG = issn, +-- NEGATOR = >, + PROCEDURE = issn_le ); -create operator = ( - leftarg = issn, - rightarg = issn, - commutator = =, --- negator = <>, - procedure = issn_eq +CREATE OPERATOR = ( + LEFTARG = issn, + RIGHTARG = issn, + COMMUTATOR = =, +-- NEGATOR = <>, + PROCEDURE = issn_eq ); -create operator >= ( - leftarg = issn, - rightarg = issn, - negator = <, - procedure = issn_ge +CREATE OPERATOR >= ( + LEFTARG = issn, + RIGHTARG = issn, + NEGATOR = <, + PROCEDURE = issn_ge ); -create operator > ( - leftarg = issn, - rightarg = issn, - negator = <=, - procedure = issn_gt +CREATE OPERATOR > ( + LEFTARG = issn, + RIGHTARG = issn, + NEGATOR = <=, + PROCEDURE = issn_gt ); -create operator <> ( - leftarg = issn, - rightarg = issn, - negator = =, - procedure = issn_ne +CREATE OPERATOR <> ( + LEFTARG = issn, + RIGHTARG = issn, + NEGATOR = =, + PROCEDURE = issn_ne ); -- @@ -123,66 +124,65 @@ create operator <> ( -- -- PostgreSQL code for ISBNs. -- --- $Id: isbn_issn.sql.in,v 1.6 2002/08/22 00:01:39 tgl Exp $ +-- $Id: isbn_issn.sql.in,v 1.7 2002/10/18 18:41:20 momjian Exp $ -- -- -- Input and output functions and the type itself: -- -create function isbn_in(cstring) - returns isbn - as 'MODULE_PATHNAME' - language 'c'; - -create function isbn_out(isbn) - returns cstring - as 'MODULE_PATHNAME' - language 'c'; - -create type isbn ( - internallength = 16, - externallength = 13, - input = isbn_in, - output = isbn_out +CREATE FUNCTION isbn_in(cstring) +RETURNS isbn +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; + +CREATE FUNCTION isbn_out(isbn) +RETURNS cstring +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; + +CREATE TYPE isbn ( + INTERNALLENGTH = 16, + EXTERNALLENGTH = 13, + INPUT = isbn_in, + OUTPUT = isbn_out ); -comment on type isbn - is 'International Standard Book Number'; +COMMENT ON TYPE isbn IS 'International Standard Book Number'; -- -- The various boolean tests: -- -create function isbn_lt(isbn, isbn) - returns bool - as 'MODULE_PATHNAME' - language 'c'; +CREATE FUNCTION isbn_lt(isbn, isbn) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function isbn_le(isbn, isbn) - returns bool - as 'MODULE_PATHNAME' - language 'c'; +CREATE FUNCTION isbn_le(isbn, isbn) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function isbn_eq(isbn, isbn) - returns bool - as 'MODULE_PATHNAME' - language 'c'; +CREATE FUNCTION isbn_eq(isbn, isbn) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function isbn_ge(isbn, isbn) - returns bool - as 'MODULE_PATHNAME' - language 'c'; +CREATE FUNCTION isbn_ge(isbn, isbn) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function isbn_gt(isbn, isbn) - returns bool - as 'MODULE_PATHNAME' - language 'c'; +CREATE FUNCTION isbn_gt(isbn, isbn) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function isbn_ne(isbn, isbn) - returns bool - as 'MODULE_PATHNAME' - language 'c'; +CREATE FUNCTION isbn_ne(isbn, isbn) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -- -- Now the operators. Note how some of the parameters to some @@ -191,61 +191,61 @@ create function isbn_ne(isbn, isbn) -- will be implicitly defined when those are, further down. -- -create operator < ( - leftarg = isbn, - rightarg = isbn, --- negator = >=, - procedure = isbn_lt +CREATE OPERATOR < ( + LEFTARG = isbn, + RIGHTARG = isbn, +-- NEGATOR = >=, + PROCEDURE = isbn_lt ); -create operator <= ( - leftarg = isbn, - rightarg = isbn, --- negator = >, - procedure = isbn_le +CREATE OPERATOR <= ( + LEFTARG = isbn, + RIGHTARG = isbn, +-- NEGATOR = >, + PROCEDURE = isbn_le ); -create operator = ( - leftarg = isbn, - rightarg = isbn, - commutator = =, --- negator = <>, - procedure = isbn_eq +CREATE OPERATOR = ( + LEFTARG = isbn, + RIGHTARG = isbn, + COMMUTATOR = =, +-- NEGATOR = <>, + PROCEDURE = isbn_eq ); -create operator >= ( - leftarg = isbn, - rightarg = isbn, - negator = <, - procedure = isbn_ge +CREATE OPERATOR >= ( + LEFTARG = isbn, + RIGHTARG = isbn, + NEGATOR = <, + PROCEDURE = isbn_ge ); -create operator > ( - leftarg = isbn, - rightarg = isbn, - negator = <=, - procedure = isbn_gt +CREATE OPERATOR > ( + LEFTARG = isbn, + RIGHTARG = isbn, + NEGATOR = <=, + PROCEDURE = isbn_gt ); -create operator <> ( - leftarg = isbn, - rightarg = isbn, - negator = =, - procedure = isbn_ne +CREATE OPERATOR <> ( + LEFTARG = isbn, + RIGHTARG = isbn, + NEGATOR = =, + PROCEDURE = isbn_ne ); -- Register 'isbn' comparison function -create function isbn_cmp(isbn, isbn) - returns integer - as '$libdir/isbn_issn' - language c; +CREATE FUNCTION isbn_cmp(isbn, isbn) +RETURNS integer +AS '$libdir/isbn_issn' +LANGUAGE c; -- Register 'issn' comparison function -create function issn_cmp(issn, issn) - returns integer - as '$libdir/isbn_issn' - language c; +CREATE FUNCTION issn_cmp(issn, issn) +RETURNS integer +AS '$libdir/isbn_issn' +LANGUAGE c; ------------------------------------------------- -- Create default operator class for 'isbn' -- @@ -253,7 +253,8 @@ create function issn_cmp(issn, issn) ------------------------------------------------- CREATE OPERATOR CLASS isbn_ops - DEFAULT FOR TYPE isbn USING btree AS +DEFAULT FOR TYPE isbn USING btree +AS OPERATOR 1 < , OPERATOR 2 <= , OPERATOR 3 = , @@ -267,7 +268,8 @@ CREATE OPERATOR CLASS isbn_ops ------------------------------------------------- CREATE OPERATOR CLASS issn_ops - DEFAULT FOR TYPE issn USING btree AS +DEFAULT FOR TYPE issn USING btree +AS OPERATOR 1 < , OPERATOR 2 <= , OPERATOR 3 = , diff --git a/contrib/lo/lo.sql.in b/contrib/lo/lo.sql.in index e60b46ce09..0d9f6c890d 100644 --- a/contrib/lo/lo.sql.in +++ b/contrib/lo/lo.sql.in @@ -1,56 +1,62 @@ -- -- PostgreSQL code for LargeObjects -- --- $Id: lo.sql.in,v 1.7 2002/08/22 00:01:39 tgl Exp $ +-- $Id: lo.sql.in,v 1.8 2002/10/18 18:41:20 momjian Exp $ -- -- -- Create the data type -- -- used by the lo type, it takes an oid and returns an lo object -create function lo_in(cstring) - returns lo - as 'MODULE_PATHNAME' - language 'c'; + +-- Adjust this setting to control where the objects get created. +SET search_path = public; + +SET autocommit TO 'on'; + +CREATE FUNCTION lo_in(cstring) +RETURNS lo +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -- used by the lo type, it returns the oid of the object -create function lo_out(lo) - returns cstring - as 'MODULE_PATHNAME' - language 'c'; +CREATE FUNCTION lo_out(lo) +RETURNS cstring +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -- finally the type itself -create type lo ( - internallength = 4, - externallength = variable, - input = lo_in, - output = lo_out +CREATE TYPE lo ( + INTERNALLENGTH = 4, + EXTERNALLENGTH = variable, + INPUT = lo_in, + OUTPUT = lo_out ); -- this returns the oid associated with a lo object -create function lo_oid(lo) - returns oid - as 'MODULE_PATHNAME' - language 'c'; +CREATE FUNCTION lo_oid(lo) +RETURNS oid +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -- same function, named to allow it to be used as a type coercion, eg: --- create table a (image lo); --- select image::oid from a; +-- CREATE TABLE a (image lo); +-- SELECT image::oid FROM a; -- -create function oid(lo) - returns oid - as 'MODULE_PATHNAME', 'lo_oid' - language 'c'; +CREATE FUNCTION oid(lo) +RETURNS oid +AS 'MODULE_PATHNAME', 'lo_oid' +LANGUAGE 'C'; -- this allows us to convert an oid to a managed lo object -- ie: insert into test values (lo_import('/fullpath/file')::lo); -create function lo(oid) - returns lo - as 'MODULE_PATHNAME' - language 'c'; +CREATE FUNCTION lo(oid) +RETURNS lo +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -- This is used in triggers -create function lo_manage() - returns trigger - as 'MODULE_PATHNAME' - language 'c'; +CREATE FUNCTION lo_manage() +RETURNS trigger +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; diff --git a/contrib/lo/lo_drop.sql b/contrib/lo/lo_drop.sql index 4e4602836c..d7f34f8bed 100644 --- a/contrib/lo/lo_drop.sql +++ b/contrib/lo/lo_drop.sql @@ -3,13 +3,18 @@ -- It's used just for development -- +-- Adjust this setting to control where the objects get created. +SET search_path = public; + +SET autocommit TO 'on'; + -- remove our test table -drop table a; +DROP TABLE a; -- now drop the type and associated C functions -drop type lo CASCADE; +DROP TYPE lo CASCADE; -- the trigger function has no dependency on the type, so drop separately -drop function lo_manage(); +DROP FUNCTION lo_manage(); -- the lo stuff is now removed from the system diff --git a/contrib/lo/lo_test.sql b/contrib/lo/lo_test.sql index 0c0da2cfd6..9acc47debd 100644 --- a/contrib/lo/lo_test.sql +++ b/contrib/lo/lo_test.sql @@ -5,53 +5,65 @@ -- -- ignore any errors here - simply drop the table if it already exists -drop table a; +DROP TABLE a; -- create the test table -create table a (fname name,image lo); +CREATE TABLE a (fname name,image lo); -- insert a null object -insert into a values ('null'); +INSERT INTO a VALUES ('null'); -- insert an empty large object -insert into a values ('empty',''); +INSERT INTO a VALUES ('empty',''); -- insert a large object based on a file -insert into a values ('/etc/group',lo_import('/etc/group')::lo); +INSERT INTO a VALUES ('/etc/group',lo_import('/etc/group')::lo); -- now select the table -select * from a; +SELECT * FROM a; -- this select also returns an oid based on the lo column -select *,image::oid from a; +SELECT *,image::oid from a; -- now test the trigger -create trigger t_a before update or delete on a for each row execute procedure lo_manage(image); +CREATE TRIGGER t_a +BEFORE UPDATE OR DELETE ON a +FOR EACH ROW +EXECUTE PROCEDURE lo_manage(image); -- insert -insert into a values ('aa',''); -select * from a where fname like 'aa%'; +INSERT INTO a VALUES ('aa',''); +SELECT * FROM a +WHERE fname LIKE 'aa%'; -- update -update a set image=lo_import('/etc/group')::lo where fname='aa'; -select * from a where fname like 'aa%'; +UPDATE a SET image=lo_import('/etc/group')::lo +WHERE fname='aa'; +SELECT * FROM a +WHERE fname LIKE 'aa%'; -- update the 'empty' row which should be null -update a set image=lo_import('/etc/hosts')::lo where fname='empty'; -select * from a where fname like 'empty%'; -update a set image=null where fname='empty'; -select * from a where fname like 'empty%'; +UPDATE a SET image=lo_import('/etc/hosts')::lo +WHERE fname='empty'; +SELECT * FROM a +WHERE fname LIKE 'empty%'; +UPDATE a SET image=null +WHERE fname='empty'; +SELECT * FROM a +WHERE fname LIKE 'empty%'; -- delete the entry -delete from a where fname='aa'; -select * from a where fname like 'aa%'; +DELETE FROM a +WHERE fname='aa'; +SELECT * FROM a +WHERE fname LIKE 'aa%'; -- This deletes the table contents. Note, if you comment this out, and -- expect the drop table to remove the objects, think again. The trigger -- doesn't get thrown by drop table. -delete from a; +DELETE FROM a; -- finally drop the table -drop table a; +DROP TABLE a; -- end of tests diff --git a/contrib/ltree/expected/ltree.out b/contrib/ltree/expected/ltree.out index 4af0260bed..7e710d3335 100644 --- a/contrib/ltree/expected/ltree.out +++ b/contrib/ltree/expected/ltree.out @@ -1,1008 +1,1008 @@ \set ECHO none psql:ltree.sql:9: WARNING: ProcedureCreate: type ltree is not yet defined psql:ltree.sql:14: WARNING: Argument type "ltree" is only a shell -psql:ltree.sql:238: WARNING: ProcedureCreate: type lquery is not yet defined -psql:ltree.sql:243: WARNING: Argument type "lquery" is only a shell -psql:ltree.sql:290: WARNING: ProcedureCreate: type ltxtquery is not yet defined -psql:ltree.sql:295: WARNING: Argument type "ltxtquery" is only a shell -psql:ltree.sql:345: WARNING: ProcedureCreate: type ltree_gist is not yet defined -psql:ltree.sql:350: WARNING: Argument type "ltree_gist" is only a shell -select ''::ltree; +psql:ltree.sql:281: WARNING: ProcedureCreate: type lquery is not yet defined +psql:ltree.sql:286: WARNING: Argument type "lquery" is only a shell +psql:ltree.sql:345: WARNING: ProcedureCreate: type ltxtquery is not yet defined +psql:ltree.sql:350: WARNING: Argument type "ltxtquery" is only a shell +psql:ltree.sql:412: WARNING: ProcedureCreate: type ltree_gist is not yet defined +psql:ltree.sql:417: WARNING: Argument type "ltree_gist" is only a shell +SELECT ''::ltree; ltree ------- (1 row) -select '1'::ltree; +SELECT '1'::ltree; ltree ------- 1 (1 row) -select '1.2'::ltree; +SELECT '1.2'::ltree; ltree ------- 1.2 (1 row) -select '1.2._3'::ltree; +SELECT '1.2._3'::ltree; ltree -------- 1.2._3 (1 row) -select subltree('Top.Child1.Child2',1,2); +SELECT subltree('Top.Child1.Child2',1,2); subltree ---------- Child1 (1 row) -select subpath('Top.Child1.Child2',1,2); +SELECT subpath('Top.Child1.Child2',1,2); subpath --------------- Child1.Child2 (1 row) -select subpath('Top.Child1.Child2',-1,1); +SELECT subpath('Top.Child1.Child2',-1,1); subpath --------- Child2 (1 row) -select subpath('Top.Child1.Child2',0,-2); +SELECT subpath('Top.Child1.Child2',0,-2); subpath --------- Top (1 row) -select subpath('Top.Child1.Child2',0,-1); +SELECT subpath('Top.Child1.Child2',0,-1); subpath ------------ Top.Child1 (1 row) -select subpath('Top.Child1.Child2',0,0); +SELECT subpath('Top.Child1.Child2',0,0); subpath ------------------- Top.Child1.Child2 (1 row) -select subpath('Top.Child1.Child2',1,0); +SELECT subpath('Top.Child1.Child2',1,0); subpath --------------- Child1.Child2 (1 row) -select subpath('Top.Child1.Child2',0); +SELECT subpath('Top.Child1.Child2',0); subpath ------------------- Top.Child1.Child2 (1 row) -select subpath('Top.Child1.Child2',1); +SELECT subpath('Top.Child1.Child2',1); subpath --------------- Child1.Child2 (1 row) -select 'Top.Child1.Child2'::ltree || 'Child3'::text; +SELECT 'Top.Child1.Child2'::ltree || 'Child3'::text; ?column? -------------------------- Top.Child1.Child2.Child3 (1 row) -select 'Top.Child1.Child2'::ltree || 'Child3'::ltree; +SELECT 'Top.Child1.Child2'::ltree || 'Child3'::ltree; ?column? -------------------------- Top.Child1.Child2.Child3 (1 row) -select 'Top_0'::ltree || 'Top.Child1.Child2'::ltree; +SELECT 'Top_0'::ltree || 'Top.Child1.Child2'::ltree; ?column? ------------------------- Top_0.Top.Child1.Child2 (1 row) -select 'Top.Child1.Child2'::ltree || ''::ltree; +SELECT 'Top.Child1.Child2'::ltree || ''::ltree; ?column? ------------------- Top.Child1.Child2 (1 row) -select ''::ltree || 'Top.Child1.Child2'::ltree; +SELECT ''::ltree || 'Top.Child1.Child2'::ltree; ?column? ------------------- Top.Child1.Child2 (1 row) -select lca('{la.2.3,1.2.3.4.5.6,}') is null; +SELECT lca('{la.2.3,1.2.3.4.5.6,}') IS NULL; ?column? ---------- t (1 row) -select lca('{la.2.3,1.2.3.4.5.6}') is null; +SELECT lca('{la.2.3,1.2.3.4.5.6}') IS NULL; ?column? ---------- f (1 row) -select lca('{1.la.2.3,1.2.3.4.5.6}'); +SELECT lca('{1.la.2.3,1.2.3.4.5.6}'); lca ----- 1 (1 row) -select lca('{1.2.3,1.2.3.4.5.6}'); +SELECT lca('{1.2.3,1.2.3.4.5.6}'); lca ----- 1.2 (1 row) -select lca('1.la.2.3','1.2.3.4.5.6'); +SELECT lca('1.la.2.3','1.2.3.4.5.6'); lca ----- 1 (1 row) -select lca('1.2.3','1.2.3.4.5.6'); +SELECT lca('1.2.3','1.2.3.4.5.6'); lca ----- 1.2 (1 row) -select lca('1.2.2.3','1.2.3.4.5.6'); +SELECT lca('1.2.2.3','1.2.3.4.5.6'); lca ----- 1.2 (1 row) -select lca('1.2.2.3','1.2.3.4.5.6',''); +SELECT lca('1.2.2.3','1.2.3.4.5.6',''); lca ----- (1 row) -select lca('1.2.2.3','1.2.3.4.5.6','2'); +SELECT lca('1.2.2.3','1.2.3.4.5.6','2'); lca ----- (1 row) -select lca('1.2.2.3','1.2.3.4.5.6','1'); +SELECT lca('1.2.2.3','1.2.3.4.5.6','1'); lca ----- (1 row) -select '1'::lquery; +SELECT '1'::lquery; lquery -------- 1 (1 row) -select '4|3|2'::lquery; +SELECT '4|3|2'::lquery; lquery -------- 4|3|2 (1 row) -select '1.2'::lquery; +SELECT '1.2'::lquery; lquery -------- 1.2 (1 row) -select '1.4|3|2'::lquery; +SELECT '1.4|3|2'::lquery; lquery --------- 1.4|3|2 (1 row) -select '1.0'::lquery; +SELECT '1.0'::lquery; lquery -------- 1.0 (1 row) -select '4|3|2.0'::lquery; +SELECT '4|3|2.0'::lquery; lquery --------- 4|3|2.0 (1 row) -select '1.2.0'::lquery; +SELECT '1.2.0'::lquery; lquery -------- 1.2.0 (1 row) -select '1.4|3|2.0'::lquery; +SELECT '1.4|3|2.0'::lquery; lquery ----------- 1.4|3|2.0 (1 row) -select '1.*'::lquery; +SELECT '1.*'::lquery; lquery -------- 1.* (1 row) -select '4|3|2.*'::lquery; +SELECT '4|3|2.*'::lquery; lquery --------- 4|3|2.* (1 row) -select '1.2.*'::lquery; +SELECT '1.2.*'::lquery; lquery -------- 1.2.* (1 row) -select '1.4|3|2.*'::lquery; +SELECT '1.4|3|2.*'::lquery; lquery ----------- 1.4|3|2.* (1 row) -select '*.1.*'::lquery; +SELECT '*.1.*'::lquery; lquery -------- *.1.* (1 row) -select '*.4|3|2.*'::lquery; +SELECT '*.4|3|2.*'::lquery; lquery ----------- *.4|3|2.* (1 row) -select '*.1.2.*'::lquery; +SELECT '*.1.2.*'::lquery; lquery --------- *.1.2.* (1 row) -select '*.1.4|3|2.*'::lquery; +SELECT '*.1.4|3|2.*'::lquery; lquery ------------- *.1.4|3|2.* (1 row) -select '1.*.4|3|2'::lquery; +SELECT '1.*.4|3|2'::lquery; lquery ----------- 1.*.4|3|2 (1 row) -select '1.*.4|3|2.0'::lquery; +SELECT '1.*.4|3|2.0'::lquery; lquery ------------- 1.*.4|3|2.0 (1 row) -select '1.*.4|3|2.*{1,4}'::lquery; +SELECT '1.*.4|3|2.*{1,4}'::lquery; lquery ------------------ 1.*.4|3|2.*{1,4} (1 row) -select '1.*.4|3|2.*{,4}'::lquery; +SELECT '1.*.4|3|2.*{,4}'::lquery; lquery ----------------- 1.*.4|3|2.*{,4} (1 row) -select '1.*.4|3|2.*{1,}'::lquery; +SELECT '1.*.4|3|2.*{1,}'::lquery; lquery ----------------- 1.*.4|3|2.*{1,} (1 row) -select '1.*.4|3|2.*{1}'::lquery; +SELECT '1.*.4|3|2.*{1}'::lquery; lquery ---------------- 1.*.4|3|2.*{1} (1 row) -select 'qwerty%@*.tu'::lquery; +SELECT 'qwerty%@*.tu'::lquery; lquery -------------- qwerty%@*.tu (1 row) -select nlevel('1.2.3.4'); +SELECT nlevel('1.2.3.4'); nlevel -------- 4 (1 row) -select '1.2'::ltree < '2.2'::ltree; +SELECT '1.2'::ltree < '2.2'::ltree; ?column? ---------- t (1 row) -select '1.2'::ltree <= '2.2'::ltree; +SELECT '1.2'::ltree <= '2.2'::ltree; ?column? ---------- t (1 row) -select '2.2'::ltree = '2.2'::ltree; +SELECT '2.2'::ltree = '2.2'::ltree; ?column? ---------- t (1 row) -select '3.2'::ltree >= '2.2'::ltree; +SELECT '3.2'::ltree >= '2.2'::ltree; ?column? ---------- t (1 row) -select '3.2'::ltree > '2.2'::ltree; +SELECT '3.2'::ltree > '2.2'::ltree; ?column? ---------- t (1 row) -select '1.2.3'::ltree @> '1.2.3.4'::ltree; +SELECT '1.2.3'::ltree @> '1.2.3.4'::ltree; ?column? ---------- t (1 row) -select '1.2.3.4'::ltree @> '1.2.3.4'::ltree; +SELECT '1.2.3.4'::ltree @> '1.2.3.4'::ltree; ?column? ---------- t (1 row) -select '1.2.3.4.5'::ltree @> '1.2.3.4'::ltree; +SELECT '1.2.3.4.5'::ltree @> '1.2.3.4'::ltree; ?column? ---------- f (1 row) -select '1.3.3'::ltree @> '1.2.3.4'::ltree; +SELECT '1.3.3'::ltree @> '1.2.3.4'::ltree; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.b.c.d.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.b.c.d.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'A.b.c.d.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'A.b.c.d.e'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ 'A@.b.c.d.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'A@.b.c.d.e'; ?column? ---------- t (1 row) -select 'aa.b.c.d.e'::ltree ~ 'A@.b.c.d.e'; +SELECT 'aa.b.c.d.e'::ltree ~ 'A@.b.c.d.e'; ?column? ---------- f (1 row) -select 'aa.b.c.d.e'::ltree ~ 'A*.b.c.d.e'; +SELECT 'aa.b.c.d.e'::ltree ~ 'A*.b.c.d.e'; ?column? ---------- f (1 row) -select 'aa.b.c.d.e'::ltree ~ 'A*@.b.c.d.e'; +SELECT 'aa.b.c.d.e'::ltree ~ 'A*@.b.c.d.e'; ?column? ---------- t (1 row) -select 'aa.b.c.d.e'::ltree ~ 'A*@|g.b.c.d.e'; +SELECT 'aa.b.c.d.e'::ltree ~ 'A*@|g.b.c.d.e'; ?column? ---------- t (1 row) -select 'g.b.c.d.e'::ltree ~ 'A*@|g.b.c.d.e'; +SELECT 'g.b.c.d.e'::ltree ~ 'A*@|g.b.c.d.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.b.c.d.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.b.c.d.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*{3}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{3}.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*{2}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2}.e'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*{4}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{4}.e'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*{,4}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{,4}.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*{2,}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,}.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*{2,4}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,4}.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*{2,3}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,3}.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*{2,3}'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,3}'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*{2,4}'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,4}'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*{2,5}'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,5}'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*{2,3}.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*{2,3}.e'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '*{2,4}.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*{2,4}.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*{2,5}.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*{2,5}.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.e.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.e.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.d.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.a.*.d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.*.d.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!d.*'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '*.!d'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!d'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!d.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '!a.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!a.*'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '*.!e'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!e'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '*.!e.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!e.*'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*.!e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*.!e'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*.!d'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*.!d'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*.!d.*'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.*.!f.*'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*.!f.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.a.*.!f.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.*.!f.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.a.*.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.*.!d.*'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '*.a.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.!d.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.a.!d'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.!d'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.!d.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.a.*.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.*.!d.*'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '*.!b.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '*.!b.c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.c.*'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '*.!b.*.c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*.c.*'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '!b.*.c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*.c.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '!b.b.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.b.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '!b.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '!b.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.!c.*.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '!b.*.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*.!c.*.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*{2}.!b.*.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*{2}.!b.*.!c.*.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*{1}.!b.*.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*{1}.!b.*.!c.*.e'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '*{1}.!b.*{1}.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*{1}.!b.*{1}.!c.*.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.!b.*{1}.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.!b.*{1}.!c.*.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '!b.*{1}.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*{1}.!c.*.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.!b.*{1}.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*{1}.!c.*.e'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.!b.*.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*.!c.*.e'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '!b.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.!c.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '!b.*.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*.!c.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*{2}.!b.*.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*{2}.!b.*.!c.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*{1}.!b.*.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*{1}.!b.*.!c.*'; ?column? ---------- f (1 row) -select 'a.b.c.d.e'::ltree ~ '*{1}.!b.*{1}.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*{1}.!b.*{1}.!c.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ 'a.!b.*{1}.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.!b.*{1}.!c.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '!b.*{1}.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*{1}.!c.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.!b.*{1}.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*{1}.!c.*'; ?column? ---------- t (1 row) -select 'a.b.c.d.e'::ltree ~ '*.!b.*.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*.!c.*'; ?column? ---------- f (1 row) -select 'QWER_TY'::ltree ~ 'q%@*'; +SELECT 'QWER_TY'::ltree ~ 'q%@*'; ?column? ---------- t (1 row) -select 'QWER_TY'::ltree ~ 'Q_t%@*'; +SELECT 'QWER_TY'::ltree ~ 'Q_t%@*'; ?column? ---------- t (1 row) -select 'QWER_GY'::ltree ~ 'q_t%@*'; +SELECT 'QWER_GY'::ltree ~ 'q_t%@*'; ?column? ---------- f (1 row) --ltxtquery -select '!tree & aWdf@*'::ltxtquery; +SELECT '!tree & aWdf@*'::ltxtquery; ltxtquery ---------------- !tree & aWdf@* (1 row) -select 'tree & aw_qw%*'::ltxtquery; +SELECT 'tree & aw_qw%*'::ltxtquery; ltxtquery ---------------- tree & aw_qw%* (1 row) -select 'ltree.awdfg'::ltree @ '!tree & aWdf@*'::ltxtquery; +SELECT 'ltree.awdfg'::ltree @ '!tree & aWdf@*'::ltxtquery; ?column? ---------- t (1 row) -select 'tree.awdfg'::ltree @ '!tree & aWdf@*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ '!tree & aWdf@*'::ltxtquery; ?column? ---------- f (1 row) -select 'tree.awdfg'::ltree @ '!tree | aWdf@*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ '!tree | aWdf@*'::ltxtquery; ?column? ---------- t (1 row) -select 'tree.awdfg'::ltree @ 'tree | aWdf@*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree | aWdf@*'::ltxtquery; ?column? ---------- t (1 row) -select 'tree.awdfg'::ltree @ 'tree & aWdf@*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & aWdf@*'::ltxtquery; ?column? ---------- t (1 row) -select 'tree.awdfg'::ltree @ 'tree & aWdf@'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & aWdf@'::ltxtquery; ?column? ---------- f (1 row) -select 'tree.awdfg'::ltree @ 'tree & aWdf*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & aWdf*'::ltxtquery; ?column? ---------- f (1 row) -select 'tree.awdfg'::ltree @ 'tree & aWdf'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & aWdf'::ltxtquery; ?column? ---------- f (1 row) -select 'tree.awdfg'::ltree @ 'tree & awdf*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & awdf*'::ltxtquery; ?column? ---------- t (1 row) -select 'tree.awdfg'::ltree @ 'tree & aWdfg@'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & aWdfg@'::ltxtquery; ?column? ---------- t (1 row) -select 'tree.awdfg_qwerty'::ltree @ 'tree & aw_qw%*'::ltxtquery; +SELECT 'tree.awdfg_qwerty'::ltree @ 'tree & aw_qw%*'::ltxtquery; ?column? ---------- t (1 row) -select 'tree.awdfg_qwerty'::ltree @ 'tree & aw_rw%*'::ltxtquery; +SELECT 'tree.awdfg_qwerty'::ltree @ 'tree & aw_rw%*'::ltxtquery; ?column? ---------- f (1 row) --arrays -select '{1.2.3}'::ltree[] @> '1.2.3.4'; +SELECT '{1.2.3}'::ltree[] @> '1.2.3.4'; ?column? ---------- t (1 row) -select '{1.2.3.4}'::ltree[] @> '1.2.3.4'; +SELECT '{1.2.3.4}'::ltree[] @> '1.2.3.4'; ?column? ---------- t (1 row) -select '{1.2.3.4.5}'::ltree[] @> '1.2.3.4'; +SELECT '{1.2.3.4.5}'::ltree[] @> '1.2.3.4'; ?column? ---------- f (1 row) -select '{1.3.3}'::ltree[] @> '1.2.3.4'; +SELECT '{1.3.3}'::ltree[] @> '1.2.3.4'; ?column? ---------- f (1 row) -select '{5.67.8, 1.2.3}'::ltree[] @> '1.2.3.4'; +SELECT '{5.67.8, 1.2.3}'::ltree[] @> '1.2.3.4'; ?column? ---------- t (1 row) -select '{5.67.8, 1.2.3.4}'::ltree[] @> '1.2.3.4'; +SELECT '{5.67.8, 1.2.3.4}'::ltree[] @> '1.2.3.4'; ?column? ---------- t (1 row) -select '{5.67.8, 1.2.3.4.5}'::ltree[] @> '1.2.3.4'; +SELECT '{5.67.8, 1.2.3.4.5}'::ltree[] @> '1.2.3.4'; ?column? ---------- f (1 row) -select '{5.67.8, 1.3.3}'::ltree[] @> '1.2.3.4'; +SELECT '{5.67.8, 1.3.3}'::ltree[] @> '1.2.3.4'; ?column? ---------- f (1 row) -select '{1.2.3, 7.12.asd}'::ltree[] @> '1.2.3.4'; +SELECT '{1.2.3, 7.12.asd}'::ltree[] @> '1.2.3.4'; ?column? ---------- t (1 row) -select '{1.2.3.4, 7.12.asd}'::ltree[] @> '1.2.3.4'; +SELECT '{1.2.3.4, 7.12.asd}'::ltree[] @> '1.2.3.4'; ?column? ---------- t (1 row) -select '{1.2.3.4.5, 7.12.asd}'::ltree[] @> '1.2.3.4'; +SELECT '{1.2.3.4.5, 7.12.asd}'::ltree[] @> '1.2.3.4'; ?column? ---------- f (1 row) -select '{1.3.3, 7.12.asd}'::ltree[] @> '1.2.3.4'; +SELECT '{1.3.3, 7.12.asd}'::ltree[] @> '1.2.3.4'; ?column? ---------- f (1 row) -select '{ltree.asd, tree.awdfg}'::ltree[] @ 'tree & aWdfg@'::ltxtquery; +SELECT '{ltree.asd, tree.awdfg}'::ltree[] @ 'tree & aWdfg@'::ltxtquery; ?column? ---------- t (1 row) -select '{j.k.l.m, g.b.c.d.e}'::ltree[] ~ 'A*@|g.b.c.d.e'; +SELECT '{j.k.l.m, g.b.c.d.e}'::ltree[] ~ 'A*@|g.b.c.d.e'; ?column? ---------- t (1 row) --exractors -select ('{3456,1.2.3.34}'::ltree[] ?@> '1.2.3.4') is null; +SELECT ('{3456,1.2.3.34}'::ltree[] ?@> '1.2.3.4') is null; ?column? ---------- t (1 row) -select '{3456,1.2.3}'::ltree[] ?@> '1.2.3.4'; +SELECT '{3456,1.2.3}'::ltree[] ?@> '1.2.3.4'; ?column? ---------- 1.2.3 (1 row) -select '{3456,1.2.3.4}'::ltree[] ?<@ '1.2.3'; +SELECT '{3456,1.2.3.4}'::ltree[] ?<@ '1.2.3'; ?column? ---------- 1.2.3.4 (1 row) -select ('{3456,1.2.3.4}'::ltree[] ?<@ '1.2.5') is null; +SELECT ('{3456,1.2.3.4}'::ltree[] ?<@ '1.2.5') is null; ?column? ---------- t (1 row) -select '{ltree.asd, tree.awdfg}'::ltree[] ?@ 'tree & aWdfg@'::ltxtquery; +SELECT '{ltree.asd, tree.awdfg}'::ltree[] ?@ 'tree & aWdfg@'::ltxtquery; ?column? ------------ tree.awdfg (1 row) -select '{j.k.l.m, g.b.c.d.e}'::ltree[] ?~ 'A*@|g.b.c.d.e'; +SELECT '{j.k.l.m, g.b.c.d.e}'::ltree[] ?~ 'A*@|g.b.c.d.e'; ?column? ----------- g.b.c.d.e (1 row) -create table ltreetest (t ltree); -\copy ltreetest from 'data/ltree.data' -select * from ltreetest where t < '12.3' order by t asc; +CREATE TABLE ltreetest (t ltree); +\copy ltreetest FROM 'data/ltree.data' +SELECT * FROM ltreetest WHERE t < '12.3' order by t asc; t ---------------------------------- @@ -1130,7 +1130,7 @@ select * from ltreetest where t < '12.3' order by t asc; 12.29.26.18.4.21.28.8.13.3 (123 rows) -select * from ltreetest where t <= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t <= '12.3' order by t asc; t ---------------------------------- @@ -1259,13 +1259,13 @@ select * from ltreetest where t <= '12.3' order by t asc; 12.3 (124 rows) -select * from ltreetest where t = '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t = '12.3' order by t asc; t ------ 12.3 (1 row) -select * from ltreetest where t >= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t >= '12.3' order by t asc; t ---------------------------------- 12.3 @@ -2153,7 +2153,7 @@ select * from ltreetest where t >= '12.3' order by t asc; 9.9.13.9.14.27 (883 rows) -select * from ltreetest where t > '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t > '12.3' order by t asc; t ---------------------------------- 12.4.10.17.4.10.23.3 @@ -3040,7 +3040,7 @@ select * from ltreetest where t > '12.3' order by t asc; 9.9.13.9.14.27 (882 rows) -select * from ltreetest where t @> '1.1.1' order by t asc; +SELECT * FROM ltreetest WHERE t @> '1.1.1' order by t asc; t ------- @@ -3049,7 +3049,7 @@ select * from ltreetest where t @> '1.1.1' order by t asc; 1.1.1 (4 rows) -select * from ltreetest where t <@ '1.1.1' order by t asc; +SELECT * FROM ltreetest WHERE t <@ '1.1.1' order by t asc; t ----------- 1.1.1 @@ -3058,7 +3058,7 @@ select * from ltreetest where t <@ '1.1.1' order by t asc; 1.1.1.2.1 (4 rows) -select * from ltreetest where t ~ '1.1.1.*' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '1.1.1.*' order by t asc; t ----------- 1.1.1 @@ -3067,7 +3067,7 @@ select * from ltreetest where t ~ '1.1.1.*' order by t asc; 1.1.1.2.1 (4 rows) -select * from ltreetest where t ~ '*.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '*.1' order by t asc; t -------------------------------- 1 @@ -3097,20 +3097,20 @@ select * from ltreetest where t ~ '*.1' order by t asc; 9.21.20.29.1 (25 rows) -select * from ltreetest where t ~ '23.*.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '23.*.1' order by t asc; t ------------------------- 23.28.1 23.3.32.21.5.14.10.17.1 (2 rows) -select * from ltreetest where t ~ '23.*{1}.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '23.*{1}.1' order by t asc; t --------- 23.28.1 (1 row) -select * from ltreetest where t @ '23 & 1' order by t asc; +SELECT * FROM ltreetest WHERE t @ '23 & 1' order by t asc; t -------------------------------- 1.10.23.25.5.11 @@ -3156,7 +3156,7 @@ select * from ltreetest where t @ '23 & 1' order by t asc; create unique index tstidx on ltreetest (t); set enable_seqscan=off; -select * from ltreetest where t < '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t < '12.3' order by t asc; t ---------------------------------- @@ -3284,7 +3284,7 @@ select * from ltreetest where t < '12.3' order by t asc; 12.29.26.18.4.21.28.8.13.3 (123 rows) -select * from ltreetest where t <= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t <= '12.3' order by t asc; t ---------------------------------- @@ -3413,13 +3413,13 @@ select * from ltreetest where t <= '12.3' order by t asc; 12.3 (124 rows) -select * from ltreetest where t = '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t = '12.3' order by t asc; t ------ 12.3 (1 row) -select * from ltreetest where t >= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t >= '12.3' order by t asc; t ---------------------------------- 12.3 @@ -4307,7 +4307,7 @@ select * from ltreetest where t >= '12.3' order by t asc; 9.9.13.9.14.27 (883 rows) -select * from ltreetest where t > '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t > '12.3' order by t asc; t ---------------------------------- 12.4.10.17.4.10.23.3 @@ -5197,7 +5197,7 @@ select * from ltreetest where t > '12.3' order by t asc; drop index tstidx; create index tstidx on ltreetest using gist (t); set enable_seqscan=off; -select * from ltreetest where t < '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t < '12.3' order by t asc; t ---------------------------------- @@ -5325,7 +5325,7 @@ select * from ltreetest where t < '12.3' order by t asc; 12.29.26.18.4.21.28.8.13.3 (123 rows) -select * from ltreetest where t <= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t <= '12.3' order by t asc; t ---------------------------------- @@ -5454,13 +5454,13 @@ select * from ltreetest where t <= '12.3' order by t asc; 12.3 (124 rows) -select * from ltreetest where t = '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t = '12.3' order by t asc; t ------ 12.3 (1 row) -select * from ltreetest where t >= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t >= '12.3' order by t asc; t ---------------------------------- 12.3 @@ -6348,7 +6348,7 @@ select * from ltreetest where t >= '12.3' order by t asc; 9.9.13.9.14.27 (883 rows) -select * from ltreetest where t > '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t > '12.3' order by t asc; t ---------------------------------- 12.4.10.17.4.10.23.3 @@ -7235,7 +7235,7 @@ select * from ltreetest where t > '12.3' order by t asc; 9.9.13.9.14.27 (882 rows) -select * from ltreetest where t @> '1.1.1' order by t asc; +SELECT * FROM ltreetest WHERE t @> '1.1.1' order by t asc; t ------- @@ -7244,7 +7244,7 @@ select * from ltreetest where t @> '1.1.1' order by t asc; 1.1.1 (4 rows) -select * from ltreetest where t <@ '1.1.1' order by t asc; +SELECT * FROM ltreetest WHERE t <@ '1.1.1' order by t asc; t ----------- 1.1.1 @@ -7253,7 +7253,7 @@ select * from ltreetest where t <@ '1.1.1' order by t asc; 1.1.1.2.1 (4 rows) -select * from ltreetest where t ~ '1.1.1.*' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '1.1.1.*' order by t asc; t ----------- 1.1.1 @@ -7262,7 +7262,7 @@ select * from ltreetest where t ~ '1.1.1.*' order by t asc; 1.1.1.2.1 (4 rows) -select * from ltreetest where t ~ '*.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '*.1' order by t asc; t -------------------------------- 1 @@ -7292,20 +7292,20 @@ select * from ltreetest where t ~ '*.1' order by t asc; 9.21.20.29.1 (25 rows) -select * from ltreetest where t ~ '23.*.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '23.*.1' order by t asc; t ------------------------- 23.28.1 23.3.32.21.5.14.10.17.1 (2 rows) -select * from ltreetest where t ~ '23.*{1}.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '23.*{1}.1' order by t asc; t --------- 23.28.1 (1 row) -select * from ltreetest where t @ '23 & 1' order by t asc; +SELECT * FROM ltreetest WHERE t @ '23 & 1' order by t asc; t -------------------------------- 1.10.23.25.5.11 @@ -7350,44 +7350,44 @@ select * from ltreetest where t @ '23 & 1' order by t asc; (39 rows) create table _ltreetest (t ltree[]); -\copy _ltreetest from 'data/_ltree.data' -select count(*) from _ltreetest where t @> '1.1.1' ; +\copy _ltreetest FROM 'data/_ltree.data' +SELECT count(*) FROM _ltreetest WHERE t @> '1.1.1' ; count ------- 15 (1 row) -select count(*) from _ltreetest where t <@ '1.1.1' ; +SELECT count(*) FROM _ltreetest WHERE t <@ '1.1.1' ; count ------- 19 (1 row) -select count(*) from _ltreetest where t ~ '1.1.1.*' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '1.1.1.*' ; count ------- 19 (1 row) -select count(*) from _ltreetest where t ~ '*.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '*.1' ; count ------- 83 (1 row) -select count(*) from _ltreetest where t ~ '23.*.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '23.*.1' ; count ------- 10 (1 row) -select count(*) from _ltreetest where t ~ '23.*{1}.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '23.*{1}.1' ; count ------- 5 (1 row) -select count(*) from _ltreetest where t @ '23 & 1' ; +SELECT count(*) FROM _ltreetest WHERE t @ '23 & 1' ; count ------- 147 @@ -7395,43 +7395,43 @@ select count(*) from _ltreetest where t @ '23 & 1' ; create index _tstidx on _ltreetest using gist (t); set enable_seqscan=off; -select count(*) from _ltreetest where t @> '1.1.1' ; +SELECT count(*) FROM _ltreetest WHERE t @> '1.1.1' ; count ------- 15 (1 row) -select count(*) from _ltreetest where t <@ '1.1.1' ; +SELECT count(*) FROM _ltreetest WHERE t <@ '1.1.1' ; count ------- 19 (1 row) -select count(*) from _ltreetest where t ~ '1.1.1.*' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '1.1.1.*' ; count ------- 19 (1 row) -select count(*) from _ltreetest where t ~ '*.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '*.1' ; count ------- 83 (1 row) -select count(*) from _ltreetest where t ~ '23.*.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '23.*.1' ; count ------- 10 (1 row) -select count(*) from _ltreetest where t ~ '23.*{1}.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '23.*{1}.1' ; count ------- 5 (1 row) -select count(*) from _ltreetest where t @ '23 & 1' ; +SELECT count(*) FROM _ltreetest WHERE t @ '23 & 1' ; count ------- 147 diff --git a/contrib/ltree/ltree.sql.in b/contrib/ltree/ltree.sql.in index ad7f61472b..eae1454a9a 100644 --- a/contrib/ltree/ltree.sql.in +++ b/contrib/ltree/ltree.sql.in @@ -1,23 +1,23 @@ -BEGIN; - -- Adjust this setting to control where the objects get created. SET search_path = public; +SET autocommit TO 'on'; + CREATE FUNCTION ltree_in(cstring) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' WITH (isstrict); CREATE FUNCTION ltree_out(ltree) RETURNS cstring AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' WITH (isstrict); CREATE TYPE ltree ( -internallength = -1, -input = ltree_in, -output = ltree_out, -storage = extended + INTERNALLENGTH = -1, + INPUT = ltree_in, + OUTPUT = ltree_out, + STORAGE = extended ); @@ -25,74 +25,99 @@ storage = extended CREATE FUNCTION ltree_cmp(ltree,ltree) RETURNS int4 AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltree_lt(ltree,ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltree_le(ltree,ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltree_eq(ltree,ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltree_ge(ltree,ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltree_gt(ltree,ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltree_ne(ltree,ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE OPERATOR < ( - LEFTARG = ltree, RIGHTARG = ltree, PROCEDURE = ltree_lt, - COMMUTATOR = '>', NEGATOR = '>=', - RESTRICT = contsel, JOIN = contjoinsel + LEFTARG = ltree, + RIGHTARG = ltree, + PROCEDURE = ltree_lt, + COMMUTATOR = '>', + NEGATOR = '>=', + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR <= ( - LEFTARG = ltree, RIGHTARG = ltree, PROCEDURE = ltree_le, - COMMUTATOR = '>=', NEGATOR = '>', - RESTRICT = contsel, JOIN = contjoinsel + LEFTARG = ltree, + RIGHTARG = ltree, + PROCEDURE = ltree_le, + COMMUTATOR = '>=', + NEGATOR = '>', + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR >= ( - LEFTARG = ltree, RIGHTARG = ltree, PROCEDURE = ltree_ge, - COMMUTATOR = '<=', NEGATOR = '<', - RESTRICT = contsel, JOIN = contjoinsel + LEFTARG = ltree, + RIGHTARG = ltree, + PROCEDURE = ltree_ge, + COMMUTATOR = '<=', + NEGATOR = '<', + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR > ( - LEFTARG = ltree, RIGHTARG = ltree, PROCEDURE = ltree_gt, - COMMUTATOR = '<', NEGATOR = '<=', - RESTRICT = contsel, JOIN = contjoinsel + LEFTARG = ltree, + RIGHTARG = ltree, + PROCEDURE = ltree_gt, + COMMUTATOR = '<', + NEGATOR = '<=', + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR = ( - LEFTARG = ltree, RIGHTARG = ltree, PROCEDURE = ltree_eq, - COMMUTATOR = '=', NEGATOR = '<>', - RESTRICT = eqsel, JOIN = eqjoinsel, - SORT1 = '<', SORT2 = '<' + LEFTARG = ltree, + RIGHTARG = ltree, + PROCEDURE = ltree_eq, + COMMUTATOR = '=', + NEGATOR = '<>', + RESTRICT = eqsel, + JOIN = eqjoinsel, + SORT1 = '<', + SORT2 = '<' ); CREATE OPERATOR <> ( - LEFTARG = ltree, RIGHTARG = ltree, PROCEDURE = ltree_ne, - COMMUTATOR = '<>', NEGATOR = '=', - RESTRICT = neqsel, JOIN = neqjoinsel + LEFTARG = ltree, + RIGHTARG = ltree, + PROCEDURE = ltree_ne, + COMMUTATOR = '<>', + NEGATOR = '=', + RESTRICT = neqsel, + JOIN = neqjoinsel ); --util functions @@ -100,122 +125,140 @@ CREATE OPERATOR <> ( CREATE FUNCTION subltree(ltree,int4,int4) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION subpath(ltree,int4,int4) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION subpath(ltree,int4) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION nlevel(ltree) RETURNS int4 AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION lca(_ltree) RETURNS ltree AS 'MODULE_PATHNAME','_lca' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION lca(ltree,ltree) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION lca(ltree,ltree,ltree) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION lca(ltree,ltree,ltree,ltree) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION lca(ltree,ltree,ltree,ltree,ltree) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION lca(ltree,ltree,ltree,ltree,ltree,ltree) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION lca(ltree,ltree,ltree,ltree,ltree,ltree,ltree) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION lca(ltree,ltree,ltree,ltree,ltree,ltree,ltree,ltree) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltree_isparent(ltree,ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltree_risparent(ltree,ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltree_addltree(ltree,ltree) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltree_addtext(ltree,text) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltree_textadd(text,ltree) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE OPERATOR @> ( - LEFTARG = ltree, RIGHTARG = ltree, PROCEDURE = ltree_isparent, + LEFTARG = ltree, + RIGHTARG = ltree, + PROCEDURE = ltree_isparent, COMMUTATOR = '<@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ^@> ( - LEFTARG = ltree, RIGHTARG = ltree, PROCEDURE = ltree_isparent, + LEFTARG = ltree, + RIGHTARG = ltree, + PROCEDURE = ltree_isparent, COMMUTATOR = '^<@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR <@ ( - LEFTARG = ltree, RIGHTARG = ltree, PROCEDURE = ltree_risparent, + LEFTARG = ltree, + RIGHTARG = ltree, + PROCEDURE = ltree_risparent, COMMUTATOR = '@>', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ^<@ ( - LEFTARG = ltree, RIGHTARG = ltree, PROCEDURE = ltree_risparent, + LEFTARG = ltree, + RIGHTARG = ltree, + PROCEDURE = ltree_risparent, COMMUTATOR = '^@>', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR || ( - LEFTARG = ltree, RIGHTARG = ltree, PROCEDURE = ltree_addltree + LEFTARG = ltree, + RIGHTARG = ltree, + PROCEDURE = ltree_addltree ); CREATE OPERATOR || ( - LEFTARG = ltree, RIGHTARG = text, PROCEDURE = ltree_addtext + LEFTARG = ltree, + RIGHTARG = text, + PROCEDURE = ltree_addtext ); CREATE OPERATOR || ( - LEFTARG = text, RIGHTARG = ltree, PROCEDURE = ltree_textadd + LEFTARG = text, + RIGHTARG = ltree, + PROCEDURE = ltree_textadd ); @@ -235,135 +278,166 @@ CREATE OPERATOR CLASS ltree_ops CREATE FUNCTION lquery_in(cstring) RETURNS lquery AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' WITH (isstrict); CREATE FUNCTION lquery_out(lquery) RETURNS cstring AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' WITH (isstrict); CREATE TYPE lquery ( -internallength = -1, -input = lquery_in, -output = lquery_out, -storage = extended + INTERNALLENGTH = -1, + INPUT = lquery_in, + OUTPUT = lquery_out, + STORAGE = extended ); CREATE FUNCTION ltq_regex(ltree,lquery) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION ltq_rregex(lquery,ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE OPERATOR ~ ( - LEFTARG = ltree, RIGHTARG = lquery, PROCEDURE = ltq_regex, + LEFTARG = ltree, + RIGHTARG = lquery, + PROCEDURE = ltq_regex, COMMUTATOR = '~', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ~ ( - LEFTARG = lquery, RIGHTARG = ltree, PROCEDURE = ltq_rregex, + LEFTARG = lquery, + RIGHTARG = ltree, + PROCEDURE = ltq_rregex, COMMUTATOR = '~', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); --not-indexed CREATE OPERATOR ^~ ( - LEFTARG = ltree, RIGHTARG = lquery, PROCEDURE = ltq_regex, + LEFTARG = ltree, + RIGHTARG = lquery, + PROCEDURE = ltq_regex, COMMUTATOR = '^~', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ^~ ( - LEFTARG = lquery, RIGHTARG = ltree, PROCEDURE = ltq_rregex, + LEFTARG = lquery, + RIGHTARG = ltree, + PROCEDURE = ltq_rregex, COMMUTATOR = '^~', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE FUNCTION ltxtq_in(cstring) RETURNS ltxtquery AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' WITH (isstrict); CREATE FUNCTION ltxtq_out(ltxtquery) RETURNS cstring AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' WITH (isstrict); CREATE TYPE ltxtquery ( -internallength = -1, -input = ltxtq_in, -output = ltxtq_out, -storage = extended + INTERNALLENGTH = -1, + INPUT = ltxtq_in, + OUTPUT = ltxtq_out, + STORAGE = extended ); --- operations with ltxtquery +-- operations WITH ltxtquery CREATE FUNCTION ltxtq_exec(ltree, ltxtquery) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict, iscachable); +LANGUAGE 'C' WITH (isstrict, iscachable); CREATE FUNCTION ltxtq_rexec(ltxtquery, ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict, iscachable); +LANGUAGE 'C' WITH (isstrict, iscachable); CREATE OPERATOR @ ( - LEFTARG = ltree, RIGHTARG = ltxtquery, PROCEDURE = ltxtq_exec, + LEFTARG = ltree, + RIGHTARG = ltxtquery, + PROCEDURE = ltxtq_exec, COMMUTATOR = '@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR @ ( - LEFTARG = ltxtquery, RIGHTARG = ltree, PROCEDURE = ltxtq_rexec, + LEFTARG = ltxtquery, + RIGHTARG = ltree, + PROCEDURE = ltxtq_rexec, COMMUTATOR = '@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); --not-indexed CREATE OPERATOR ^@ ( - LEFTARG = ltree, RIGHTARG = ltxtquery, PROCEDURE = ltxtq_exec, + LEFTARG = ltree, + RIGHTARG = ltxtquery, + PROCEDURE = ltxtq_exec, COMMUTATOR = '^@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ^@ ( - LEFTARG = ltxtquery, RIGHTARG = ltree, PROCEDURE = ltxtq_rexec, + LEFTARG = ltxtquery, + RIGHTARG = ltree, + PROCEDURE = ltxtq_rexec, COMMUTATOR = '^@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); --GiST support for ltree CREATE FUNCTION ltree_gist_in(cstring) RETURNS ltree_gist AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); - +LANGUAGE 'C' WITH (isstrict); + CREATE FUNCTION ltree_gist_out(ltree_gist) RETURNS cstring AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); - +LANGUAGE 'C' WITH (isstrict); + CREATE TYPE ltree_gist ( internallength = -1, input = ltree_gist_in, output = ltree_gist_out, storage = plain -); - - -create function ltree_consistent(internal,internal,int2) returns bool as 'MODULE_PATHNAME' language 'C'; -create function ltree_compress(internal) returns internal as 'MODULE_PATHNAME' language 'C'; -create function ltree_decompress(internal) returns internal as 'MODULE_PATHNAME' language 'C'; -create function ltree_penalty(internal,internal,internal) returns internal as 'MODULE_PATHNAME' language 'C' with(isstrict); -create function ltree_picksplit(internal, internal) returns internal as 'MODULE_PATHNAME' language 'C'; -create function ltree_union(bytea, internal) returns int4 as 'MODULE_PATHNAME' language 'C'; -create function ltree_same(internal, internal, internal) returns internal as 'MODULE_PATHNAME' language 'C'; +); + + +CREATE FUNCTION ltree_consistent(internal,internal,int2) +RETURNS bool as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION ltree_compress(internal) +RETURNS internal as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION ltree_decompress(internal) +RETURNS internal as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION ltree_penalty(internal,internal,internal) +RETURNS internal as 'MODULE_PATHNAME' language 'C' with(isstrict); +CREATE FUNCTION ltree_picksplit(internal, internal) +RETURNS internal as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION ltree_union(bytea, internal) +RETURNS int4 as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION ltree_same(internal, internal, internal) +RETURNS internal as 'MODULE_PATHNAME' language 'C'; CREATE OPERATOR CLASS gist_ltree_ops DEFAULT FOR TYPE ltree USING gist AS @@ -393,185 +467,259 @@ CREATE OPERATOR CLASS gist_ltree_ops CREATE FUNCTION _ltree_isparent(_ltree,ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION _ltree_r_isparent(ltree,_ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION _ltree_risparent(_ltree,ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION _ltree_r_risparent(ltree,_ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION _ltq_regex(_ltree,lquery) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION _ltq_rregex(lquery,_ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE FUNCTION _ltxtq_exec(_ltree, ltxtquery) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict, iscachable); +LANGUAGE 'C' WITH (isstrict, iscachable); CREATE FUNCTION _ltxtq_rexec(ltxtquery, _ltree) RETURNS bool AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict, iscachable); +LANGUAGE 'C' WITH (isstrict, iscachable); CREATE OPERATOR @> ( - LEFTARG = _ltree, RIGHTARG = ltree, PROCEDURE = _ltree_isparent, + LEFTARG = _ltree, + RIGHTARG = ltree, + PROCEDURE = _ltree_isparent, COMMUTATOR = '<@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR <@ ( - LEFTARG = ltree, RIGHTARG = _ltree, PROCEDURE = _ltree_r_isparent, + LEFTARG = ltree, + RIGHTARG = _ltree, + PROCEDURE = _ltree_r_isparent, COMMUTATOR = '@>', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR <@ ( - LEFTARG = _ltree, RIGHTARG = ltree, PROCEDURE = _ltree_risparent, + LEFTARG = _ltree, + RIGHTARG = ltree, + PROCEDURE = _ltree_risparent, COMMUTATOR = '@>', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR @> ( - LEFTARG = ltree, RIGHTARG = _ltree, PROCEDURE = _ltree_r_risparent, + LEFTARG = ltree, + RIGHTARG = _ltree, + PROCEDURE = _ltree_r_risparent, COMMUTATOR = '<@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ~ ( - LEFTARG = _ltree, RIGHTARG = lquery, PROCEDURE = _ltq_regex, + LEFTARG = _ltree, + RIGHTARG = lquery, + PROCEDURE = _ltq_regex, COMMUTATOR = '~', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ~ ( - LEFTARG = lquery, RIGHTARG = _ltree, PROCEDURE = _ltq_rregex, + LEFTARG = lquery, + RIGHTARG = _ltree, + PROCEDURE = _ltq_rregex, COMMUTATOR = '~', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR @ ( - LEFTARG = _ltree, RIGHTARG = ltxtquery, PROCEDURE = _ltxtq_exec, + LEFTARG = _ltree, + RIGHTARG = ltxtquery, + PROCEDURE = _ltxtq_exec, COMMUTATOR = '@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR @ ( - LEFTARG = ltxtquery, RIGHTARG = _ltree, PROCEDURE = _ltxtq_rexec, + LEFTARG = ltxtquery, + RIGHTARG = _ltree, + PROCEDURE = _ltxtq_rexec, COMMUTATOR = '@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); --not indexed CREATE OPERATOR ^@> ( - LEFTARG = _ltree, RIGHTARG = ltree, PROCEDURE = _ltree_isparent, + LEFTARG = _ltree, + RIGHTARG = ltree, + PROCEDURE = _ltree_isparent, COMMUTATOR = '^<@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ^<@ ( - LEFTARG = ltree, RIGHTARG = _ltree, PROCEDURE = _ltree_r_isparent, + LEFTARG = ltree, + RIGHTARG = _ltree, + PROCEDURE = _ltree_r_isparent, COMMUTATOR = '^@>', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ^<@ ( - LEFTARG = _ltree, RIGHTARG = ltree, PROCEDURE = _ltree_risparent, + LEFTARG = _ltree, + RIGHTARG = ltree, + PROCEDURE = _ltree_risparent, COMMUTATOR = '^@>', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ^@> ( - LEFTARG = ltree, RIGHTARG = _ltree, PROCEDURE = _ltree_r_risparent, + LEFTARG = ltree, + RIGHTARG = _ltree, + PROCEDURE = _ltree_r_risparent, COMMUTATOR = '^<@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ^~ ( - LEFTARG = _ltree, RIGHTARG = lquery, PROCEDURE = _ltq_regex, + LEFTARG = _ltree, + RIGHTARG = lquery, + PROCEDURE = _ltq_regex, COMMUTATOR = '^~', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ^~ ( - LEFTARG = lquery, RIGHTARG = _ltree, PROCEDURE = _ltq_rregex, + LEFTARG = lquery, + RIGHTARG = _ltree, + PROCEDURE = _ltq_rregex, COMMUTATOR = '^~', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ^@ ( - LEFTARG = _ltree, RIGHTARG = ltxtquery, PROCEDURE = _ltxtq_exec, + LEFTARG = _ltree, + RIGHTARG = ltxtquery, + PROCEDURE = _ltxtq_exec, COMMUTATOR = '^@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ^@ ( - LEFTARG = ltxtquery, RIGHTARG = _ltree, PROCEDURE = _ltxtq_rexec, + LEFTARG = ltxtquery, + RIGHTARG = _ltree, + PROCEDURE = _ltxtq_rexec, COMMUTATOR = '^@', - RESTRICT = contsel, JOIN = contjoinsel + RESTRICT = contsel, + JOIN = contjoinsel ); --extractors CREATE FUNCTION _ltree_extract_isparent(_ltree,ltree) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE OPERATOR ?@> ( - LEFTARG = _ltree, RIGHTARG = ltree, PROCEDURE = _ltree_extract_isparent + LEFTARG = _ltree, + RIGHTARG = ltree, + PROCEDURE = _ltree_extract_isparent ); CREATE FUNCTION _ltree_extract_risparent(_ltree,ltree) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE OPERATOR ?<@ ( - LEFTARG = _ltree, RIGHTARG = ltree, PROCEDURE = _ltree_extract_risparent + LEFTARG = _ltree, + RIGHTARG = ltree, + PROCEDURE = _ltree_extract_risparent ); CREATE FUNCTION _ltq_extract_regex(_ltree,lquery) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE OPERATOR ?~ ( - LEFTARG = _ltree, RIGHTARG = lquery, PROCEDURE = _ltq_extract_regex + LEFTARG = _ltree, + RIGHTARG = lquery, + PROCEDURE = _ltq_extract_regex ); CREATE FUNCTION _ltxtq_extract_exec(_ltree,ltxtquery) RETURNS ltree AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict,iscachable); +LANGUAGE 'C' WITH (isstrict,iscachable); CREATE OPERATOR ?@ ( - LEFTARG = _ltree, RIGHTARG = ltxtquery, PROCEDURE = _ltxtq_extract_exec + LEFTARG = _ltree, + RIGHTARG = ltxtquery, + PROCEDURE = _ltxtq_extract_exec ); --GiST support for ltree[] -create function _ltree_consistent(internal,internal,int2) returns bool as 'MODULE_PATHNAME' language 'C'; -create function _ltree_compress(internal) returns internal as 'MODULE_PATHNAME' language 'C'; -create function _ltree_penalty(internal,internal,internal) returns internal as 'MODULE_PATHNAME' language 'C' with(isstrict); -create function _ltree_picksplit(internal, internal) returns internal as 'MODULE_PATHNAME' language 'C'; -create function _ltree_union(bytea, internal) returns int4 as 'MODULE_PATHNAME' language 'C'; -create function _ltree_same(internal, internal, internal) returns internal as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION _ltree_consistent(internal,internal,int2) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; +CREATE FUNCTION _ltree_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; +CREATE FUNCTION _ltree_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH(isstrict); +CREATE FUNCTION _ltree_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; +CREATE FUNCTION _ltree_union(bytea, internal) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; +CREATE FUNCTION _ltree_same(internal, internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; CREATE OPERATOR CLASS gist__ltree_ops DEFAULT FOR TYPE _ltree USING gist AS @@ -589,6 +737,3 @@ CREATE OPERATOR CLASS gist__ltree_ops FUNCTION 6 _ltree_picksplit (internal, internal), FUNCTION 7 _ltree_same (internal, internal, internal), STORAGE ltree_gist; - - -END; diff --git a/contrib/ltree/ltreetest.sql b/contrib/ltree/ltreetest.sql index 0dd6eaa63d..eea5c475ee 100644 --- a/contrib/ltree/ltreetest.sql +++ b/contrib/ltree/ltreetest.sql @@ -1,16 +1,16 @@ -create table test ( path ltree); -insert into test values ('Top'); -insert into test values ('Top.Science'); -insert into test values ('Top.Science.Astronomy'); -insert into test values ('Top.Science.Astronomy.Astrophysics'); -insert into test values ('Top.Science.Astronomy.Cosmology'); -insert into test values ('Top.Hobbies'); -insert into test values ('Top.Hobbies.Amateurs_Astronomy'); -insert into test values ('Top.Collections'); -insert into test values ('Top.Collections.Pictures'); -insert into test values ('Top.Collections.Pictures.Astronomy'); -insert into test values ('Top.Collections.Pictures.Astronomy.Stars'); -insert into test values ('Top.Collections.Pictures.Astronomy.Galaxies'); -insert into test values ('Top.Collections.Pictures.Astronomy.Astronauts'); -create index path_gist_idx on test using gist(path); -create index path_idx on test using btree(path); +CREATE TABLE test ( path ltree); +INSERT INTO test VALUES ('Top'); +INSERT INTO test VALUES ('Top.Science'); +INSERT INTO test VALUES ('Top.Science.Astronomy'); +INSERT INTO test VALUES ('Top.Science.Astronomy.Astrophysics'); +INSERT INTO test VALUES ('Top.Science.Astronomy.Cosmology'); +INSERT INTO test VALUES ('Top.Hobbies'); +INSERT INTO test VALUES ('Top.Hobbies.Amateurs_Astronomy'); +INSERT INTO test VALUES ('Top.Collections'); +INSERT INTO test VALUES ('Top.Collections.Pictures'); +INSERT INTO test VALUES ('Top.Collections.Pictures.Astronomy'); +INSERT INTO test VALUES ('Top.Collections.Pictures.Astronomy.Stars'); +INSERT INTO test VALUES ('Top.Collections.Pictures.Astronomy.Galaxies'); +INSERT INTO test VALUES ('Top.Collections.Pictures.Astronomy.Astronauts'); +CREATE INDEX path_gist_idx ON test USING gist(path); +CREATE INDEX path_idx ON test USING btree(path); diff --git a/contrib/ltree/sql/ltree.sql b/contrib/ltree/sql/ltree.sql index 8da7e2841b..0d9defcca4 100644 --- a/contrib/ltree/sql/ltree.sql +++ b/contrib/ltree/sql/ltree.sql @@ -1,250 +1,252 @@ \set ECHO none +SET autocommit TO 'on'; + \i ltree.sql \set ECHO all -select ''::ltree; -select '1'::ltree; -select '1.2'::ltree; -select '1.2._3'::ltree; - -select subltree('Top.Child1.Child2',1,2); -select subpath('Top.Child1.Child2',1,2); -select subpath('Top.Child1.Child2',-1,1); -select subpath('Top.Child1.Child2',0,-2); -select subpath('Top.Child1.Child2',0,-1); -select subpath('Top.Child1.Child2',0,0); -select subpath('Top.Child1.Child2',1,0); -select subpath('Top.Child1.Child2',0); -select subpath('Top.Child1.Child2',1); - -select 'Top.Child1.Child2'::ltree || 'Child3'::text; -select 'Top.Child1.Child2'::ltree || 'Child3'::ltree; -select 'Top_0'::ltree || 'Top.Child1.Child2'::ltree; -select 'Top.Child1.Child2'::ltree || ''::ltree; -select ''::ltree || 'Top.Child1.Child2'::ltree; - -select lca('{la.2.3,1.2.3.4.5.6,}') is null; -select lca('{la.2.3,1.2.3.4.5.6}') is null; -select lca('{1.la.2.3,1.2.3.4.5.6}'); -select lca('{1.2.3,1.2.3.4.5.6}'); -select lca('1.la.2.3','1.2.3.4.5.6'); -select lca('1.2.3','1.2.3.4.5.6'); -select lca('1.2.2.3','1.2.3.4.5.6'); -select lca('1.2.2.3','1.2.3.4.5.6',''); -select lca('1.2.2.3','1.2.3.4.5.6','2'); -select lca('1.2.2.3','1.2.3.4.5.6','1'); - - -select '1'::lquery; -select '4|3|2'::lquery; -select '1.2'::lquery; -select '1.4|3|2'::lquery; -select '1.0'::lquery; -select '4|3|2.0'::lquery; -select '1.2.0'::lquery; -select '1.4|3|2.0'::lquery; -select '1.*'::lquery; -select '4|3|2.*'::lquery; -select '1.2.*'::lquery; -select '1.4|3|2.*'::lquery; -select '*.1.*'::lquery; -select '*.4|3|2.*'::lquery; -select '*.1.2.*'::lquery; -select '*.1.4|3|2.*'::lquery; -select '1.*.4|3|2'::lquery; -select '1.*.4|3|2.0'::lquery; -select '1.*.4|3|2.*{1,4}'::lquery; -select '1.*.4|3|2.*{,4}'::lquery; -select '1.*.4|3|2.*{1,}'::lquery; -select '1.*.4|3|2.*{1}'::lquery; -select 'qwerty%@*.tu'::lquery; - -select nlevel('1.2.3.4'); -select '1.2'::ltree < '2.2'::ltree; -select '1.2'::ltree <= '2.2'::ltree; -select '2.2'::ltree = '2.2'::ltree; -select '3.2'::ltree >= '2.2'::ltree; -select '3.2'::ltree > '2.2'::ltree; - -select '1.2.3'::ltree @> '1.2.3.4'::ltree; -select '1.2.3.4'::ltree @> '1.2.3.4'::ltree; -select '1.2.3.4.5'::ltree @> '1.2.3.4'::ltree; -select '1.3.3'::ltree @> '1.2.3.4'::ltree; - -select 'a.b.c.d.e'::ltree ~ 'a.b.c.d.e'; -select 'a.b.c.d.e'::ltree ~ 'A.b.c.d.e'; -select 'a.b.c.d.e'::ltree ~ 'A@.b.c.d.e'; -select 'aa.b.c.d.e'::ltree ~ 'A@.b.c.d.e'; -select 'aa.b.c.d.e'::ltree ~ 'A*.b.c.d.e'; -select 'aa.b.c.d.e'::ltree ~ 'A*@.b.c.d.e'; -select 'aa.b.c.d.e'::ltree ~ 'A*@|g.b.c.d.e'; -select 'g.b.c.d.e'::ltree ~ 'A*@|g.b.c.d.e'; -select 'a.b.c.d.e'::ltree ~ 'a.b.c.d.e'; -select 'a.b.c.d.e'::ltree ~ 'a.*.e'; -select 'a.b.c.d.e'::ltree ~ 'a.*{3}.e'; -select 'a.b.c.d.e'::ltree ~ 'a.*{2}.e'; -select 'a.b.c.d.e'::ltree ~ 'a.*{4}.e'; -select 'a.b.c.d.e'::ltree ~ 'a.*{,4}.e'; -select 'a.b.c.d.e'::ltree ~ 'a.*{2,}.e'; -select 'a.b.c.d.e'::ltree ~ 'a.*{2,4}.e'; -select 'a.b.c.d.e'::ltree ~ 'a.*{2,3}.e'; -select 'a.b.c.d.e'::ltree ~ 'a.*{2,3}'; -select 'a.b.c.d.e'::ltree ~ 'a.*{2,4}'; -select 'a.b.c.d.e'::ltree ~ 'a.*{2,5}'; -select 'a.b.c.d.e'::ltree ~ '*{2,3}.e'; -select 'a.b.c.d.e'::ltree ~ '*{2,4}.e'; -select 'a.b.c.d.e'::ltree ~ '*{2,5}.e'; -select 'a.b.c.d.e'::ltree ~ '*.e'; -select 'a.b.c.d.e'::ltree ~ '*.e.*'; -select 'a.b.c.d.e'::ltree ~ '*.d.*'; -select 'a.b.c.d.e'::ltree ~ '*.a.*.d.*'; -select 'a.b.c.d.e'::ltree ~ '*.!d.*'; -select 'a.b.c.d.e'::ltree ~ '*.!d'; -select 'a.b.c.d.e'::ltree ~ '!d.*'; -select 'a.b.c.d.e'::ltree ~ '!a.*'; -select 'a.b.c.d.e'::ltree ~ '*.!e'; -select 'a.b.c.d.e'::ltree ~ '*.!e.*'; -select 'a.b.c.d.e'::ltree ~ 'a.*.!e'; -select 'a.b.c.d.e'::ltree ~ 'a.*.!d'; -select 'a.b.c.d.e'::ltree ~ 'a.*.!d.*'; -select 'a.b.c.d.e'::ltree ~ 'a.*.!f.*'; -select 'a.b.c.d.e'::ltree ~ '*.a.*.!f.*'; -select 'a.b.c.d.e'::ltree ~ '*.a.*.!d.*'; -select 'a.b.c.d.e'::ltree ~ '*.a.!d.*'; -select 'a.b.c.d.e'::ltree ~ '*.a.!d'; -select 'a.b.c.d.e'::ltree ~ 'a.!d.*'; -select 'a.b.c.d.e'::ltree ~ '*.a.*.!d.*'; -select 'a.b.c.d.e'::ltree ~ '*.!b.*'; -select 'a.b.c.d.e'::ltree ~ '*.!b.c.*'; -select 'a.b.c.d.e'::ltree ~ '*.!b.*.c.*'; -select 'a.b.c.d.e'::ltree ~ '!b.*.c.*'; -select 'a.b.c.d.e'::ltree ~ '!b.b.*'; -select 'a.b.c.d.e'::ltree ~ '!b.*.e'; -select 'a.b.c.d.e'::ltree ~ '!b.!c.*.e'; -select 'a.b.c.d.e'::ltree ~ '!b.*.!c.*.e'; -select 'a.b.c.d.e'::ltree ~ '*{2}.!b.*.!c.*.e'; -select 'a.b.c.d.e'::ltree ~ '*{1}.!b.*.!c.*.e'; -select 'a.b.c.d.e'::ltree ~ '*{1}.!b.*{1}.!c.*.e'; -select 'a.b.c.d.e'::ltree ~ 'a.!b.*{1}.!c.*.e'; -select 'a.b.c.d.e'::ltree ~ '!b.*{1}.!c.*.e'; -select 'a.b.c.d.e'::ltree ~ '*.!b.*{1}.!c.*.e'; -select 'a.b.c.d.e'::ltree ~ '*.!b.*.!c.*.e'; -select 'a.b.c.d.e'::ltree ~ '!b.!c.*'; -select 'a.b.c.d.e'::ltree ~ '!b.*.!c.*'; -select 'a.b.c.d.e'::ltree ~ '*{2}.!b.*.!c.*'; -select 'a.b.c.d.e'::ltree ~ '*{1}.!b.*.!c.*'; -select 'a.b.c.d.e'::ltree ~ '*{1}.!b.*{1}.!c.*'; -select 'a.b.c.d.e'::ltree ~ 'a.!b.*{1}.!c.*'; -select 'a.b.c.d.e'::ltree ~ '!b.*{1}.!c.*'; -select 'a.b.c.d.e'::ltree ~ '*.!b.*{1}.!c.*'; -select 'a.b.c.d.e'::ltree ~ '*.!b.*.!c.*'; - -select 'QWER_TY'::ltree ~ 'q%@*'; -select 'QWER_TY'::ltree ~ 'Q_t%@*'; -select 'QWER_GY'::ltree ~ 'q_t%@*'; +SELECT ''::ltree; +SELECT '1'::ltree; +SELECT '1.2'::ltree; +SELECT '1.2._3'::ltree; + +SELECT subltree('Top.Child1.Child2',1,2); +SELECT subpath('Top.Child1.Child2',1,2); +SELECT subpath('Top.Child1.Child2',-1,1); +SELECT subpath('Top.Child1.Child2',0,-2); +SELECT subpath('Top.Child1.Child2',0,-1); +SELECT subpath('Top.Child1.Child2',0,0); +SELECT subpath('Top.Child1.Child2',1,0); +SELECT subpath('Top.Child1.Child2',0); +SELECT subpath('Top.Child1.Child2',1); + +SELECT 'Top.Child1.Child2'::ltree || 'Child3'::text; +SELECT 'Top.Child1.Child2'::ltree || 'Child3'::ltree; +SELECT 'Top_0'::ltree || 'Top.Child1.Child2'::ltree; +SELECT 'Top.Child1.Child2'::ltree || ''::ltree; +SELECT ''::ltree || 'Top.Child1.Child2'::ltree; + +SELECT lca('{la.2.3,1.2.3.4.5.6,}') IS NULL; +SELECT lca('{la.2.3,1.2.3.4.5.6}') IS NULL; +SELECT lca('{1.la.2.3,1.2.3.4.5.6}'); +SELECT lca('{1.2.3,1.2.3.4.5.6}'); +SELECT lca('1.la.2.3','1.2.3.4.5.6'); +SELECT lca('1.2.3','1.2.3.4.5.6'); +SELECT lca('1.2.2.3','1.2.3.4.5.6'); +SELECT lca('1.2.2.3','1.2.3.4.5.6',''); +SELECT lca('1.2.2.3','1.2.3.4.5.6','2'); +SELECT lca('1.2.2.3','1.2.3.4.5.6','1'); + + +SELECT '1'::lquery; +SELECT '4|3|2'::lquery; +SELECT '1.2'::lquery; +SELECT '1.4|3|2'::lquery; +SELECT '1.0'::lquery; +SELECT '4|3|2.0'::lquery; +SELECT '1.2.0'::lquery; +SELECT '1.4|3|2.0'::lquery; +SELECT '1.*'::lquery; +SELECT '4|3|2.*'::lquery; +SELECT '1.2.*'::lquery; +SELECT '1.4|3|2.*'::lquery; +SELECT '*.1.*'::lquery; +SELECT '*.4|3|2.*'::lquery; +SELECT '*.1.2.*'::lquery; +SELECT '*.1.4|3|2.*'::lquery; +SELECT '1.*.4|3|2'::lquery; +SELECT '1.*.4|3|2.0'::lquery; +SELECT '1.*.4|3|2.*{1,4}'::lquery; +SELECT '1.*.4|3|2.*{,4}'::lquery; +SELECT '1.*.4|3|2.*{1,}'::lquery; +SELECT '1.*.4|3|2.*{1}'::lquery; +SELECT 'qwerty%@*.tu'::lquery; + +SELECT nlevel('1.2.3.4'); +SELECT '1.2'::ltree < '2.2'::ltree; +SELECT '1.2'::ltree <= '2.2'::ltree; +SELECT '2.2'::ltree = '2.2'::ltree; +SELECT '3.2'::ltree >= '2.2'::ltree; +SELECT '3.2'::ltree > '2.2'::ltree; + +SELECT '1.2.3'::ltree @> '1.2.3.4'::ltree; +SELECT '1.2.3.4'::ltree @> '1.2.3.4'::ltree; +SELECT '1.2.3.4.5'::ltree @> '1.2.3.4'::ltree; +SELECT '1.3.3'::ltree @> '1.2.3.4'::ltree; + +SELECT 'a.b.c.d.e'::ltree ~ 'a.b.c.d.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'A.b.c.d.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'A@.b.c.d.e'; +SELECT 'aa.b.c.d.e'::ltree ~ 'A@.b.c.d.e'; +SELECT 'aa.b.c.d.e'::ltree ~ 'A*.b.c.d.e'; +SELECT 'aa.b.c.d.e'::ltree ~ 'A*@.b.c.d.e'; +SELECT 'aa.b.c.d.e'::ltree ~ 'A*@|g.b.c.d.e'; +SELECT 'g.b.c.d.e'::ltree ~ 'A*@|g.b.c.d.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.b.c.d.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{3}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{4}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{,4}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,4}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,3}.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,3}'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,4}'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*{2,5}'; +SELECT 'a.b.c.d.e'::ltree ~ '*{2,3}.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*{2,4}.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*{2,5}.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*.e.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.*.d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!d'; +SELECT 'a.b.c.d.e'::ltree ~ '!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!a.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!e'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!e.*'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*.!e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*.!d'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.*.!f.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.*.!f.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.*.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.!d'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.a.*.!d.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*.c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*.c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.b.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*{2}.!b.*.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*{1}.!b.*.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*{1}.!b.*{1}.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.!b.*{1}.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*{1}.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*{1}.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*.!c.*.e'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*{2}.!b.*.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*{1}.!b.*.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*{1}.!b.*{1}.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ 'a.!b.*{1}.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '!b.*{1}.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*{1}.!c.*'; +SELECT 'a.b.c.d.e'::ltree ~ '*.!b.*.!c.*'; + +SELECT 'QWER_TY'::ltree ~ 'q%@*'; +SELECT 'QWER_TY'::ltree ~ 'Q_t%@*'; +SELECT 'QWER_GY'::ltree ~ 'q_t%@*'; --ltxtquery -select '!tree & aWdf@*'::ltxtquery; -select 'tree & aw_qw%*'::ltxtquery; -select 'ltree.awdfg'::ltree @ '!tree & aWdf@*'::ltxtquery; -select 'tree.awdfg'::ltree @ '!tree & aWdf@*'::ltxtquery; -select 'tree.awdfg'::ltree @ '!tree | aWdf@*'::ltxtquery; -select 'tree.awdfg'::ltree @ 'tree | aWdf@*'::ltxtquery; -select 'tree.awdfg'::ltree @ 'tree & aWdf@*'::ltxtquery; -select 'tree.awdfg'::ltree @ 'tree & aWdf@'::ltxtquery; -select 'tree.awdfg'::ltree @ 'tree & aWdf*'::ltxtquery; -select 'tree.awdfg'::ltree @ 'tree & aWdf'::ltxtquery; -select 'tree.awdfg'::ltree @ 'tree & awdf*'::ltxtquery; -select 'tree.awdfg'::ltree @ 'tree & aWdfg@'::ltxtquery; -select 'tree.awdfg_qwerty'::ltree @ 'tree & aw_qw%*'::ltxtquery; -select 'tree.awdfg_qwerty'::ltree @ 'tree & aw_rw%*'::ltxtquery; +SELECT '!tree & aWdf@*'::ltxtquery; +SELECT 'tree & aw_qw%*'::ltxtquery; +SELECT 'ltree.awdfg'::ltree @ '!tree & aWdf@*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ '!tree & aWdf@*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ '!tree | aWdf@*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree | aWdf@*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & aWdf@*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & aWdf@'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & aWdf*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & aWdf'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & awdf*'::ltxtquery; +SELECT 'tree.awdfg'::ltree @ 'tree & aWdfg@'::ltxtquery; +SELECT 'tree.awdfg_qwerty'::ltree @ 'tree & aw_qw%*'::ltxtquery; +SELECT 'tree.awdfg_qwerty'::ltree @ 'tree & aw_rw%*'::ltxtquery; --arrays -select '{1.2.3}'::ltree[] @> '1.2.3.4'; -select '{1.2.3.4}'::ltree[] @> '1.2.3.4'; -select '{1.2.3.4.5}'::ltree[] @> '1.2.3.4'; -select '{1.3.3}'::ltree[] @> '1.2.3.4'; -select '{5.67.8, 1.2.3}'::ltree[] @> '1.2.3.4'; -select '{5.67.8, 1.2.3.4}'::ltree[] @> '1.2.3.4'; -select '{5.67.8, 1.2.3.4.5}'::ltree[] @> '1.2.3.4'; -select '{5.67.8, 1.3.3}'::ltree[] @> '1.2.3.4'; -select '{1.2.3, 7.12.asd}'::ltree[] @> '1.2.3.4'; -select '{1.2.3.4, 7.12.asd}'::ltree[] @> '1.2.3.4'; -select '{1.2.3.4.5, 7.12.asd}'::ltree[] @> '1.2.3.4'; -select '{1.3.3, 7.12.asd}'::ltree[] @> '1.2.3.4'; -select '{ltree.asd, tree.awdfg}'::ltree[] @ 'tree & aWdfg@'::ltxtquery; -select '{j.k.l.m, g.b.c.d.e}'::ltree[] ~ 'A*@|g.b.c.d.e'; +SELECT '{1.2.3}'::ltree[] @> '1.2.3.4'; +SELECT '{1.2.3.4}'::ltree[] @> '1.2.3.4'; +SELECT '{1.2.3.4.5}'::ltree[] @> '1.2.3.4'; +SELECT '{1.3.3}'::ltree[] @> '1.2.3.4'; +SELECT '{5.67.8, 1.2.3}'::ltree[] @> '1.2.3.4'; +SELECT '{5.67.8, 1.2.3.4}'::ltree[] @> '1.2.3.4'; +SELECT '{5.67.8, 1.2.3.4.5}'::ltree[] @> '1.2.3.4'; +SELECT '{5.67.8, 1.3.3}'::ltree[] @> '1.2.3.4'; +SELECT '{1.2.3, 7.12.asd}'::ltree[] @> '1.2.3.4'; +SELECT '{1.2.3.4, 7.12.asd}'::ltree[] @> '1.2.3.4'; +SELECT '{1.2.3.4.5, 7.12.asd}'::ltree[] @> '1.2.3.4'; +SELECT '{1.3.3, 7.12.asd}'::ltree[] @> '1.2.3.4'; +SELECT '{ltree.asd, tree.awdfg}'::ltree[] @ 'tree & aWdfg@'::ltxtquery; +SELECT '{j.k.l.m, g.b.c.d.e}'::ltree[] ~ 'A*@|g.b.c.d.e'; --exractors -select ('{3456,1.2.3.34}'::ltree[] ?@> '1.2.3.4') is null; -select '{3456,1.2.3}'::ltree[] ?@> '1.2.3.4'; -select '{3456,1.2.3.4}'::ltree[] ?<@ '1.2.3'; -select ('{3456,1.2.3.4}'::ltree[] ?<@ '1.2.5') is null; -select '{ltree.asd, tree.awdfg}'::ltree[] ?@ 'tree & aWdfg@'::ltxtquery; -select '{j.k.l.m, g.b.c.d.e}'::ltree[] ?~ 'A*@|g.b.c.d.e'; - -create table ltreetest (t ltree); -\copy ltreetest from 'data/ltree.data' - -select * from ltreetest where t < '12.3' order by t asc; -select * from ltreetest where t <= '12.3' order by t asc; -select * from ltreetest where t = '12.3' order by t asc; -select * from ltreetest where t >= '12.3' order by t asc; -select * from ltreetest where t > '12.3' order by t asc; -select * from ltreetest where t @> '1.1.1' order by t asc; -select * from ltreetest where t <@ '1.1.1' order by t asc; -select * from ltreetest where t ~ '1.1.1.*' order by t asc; -select * from ltreetest where t ~ '*.1' order by t asc; -select * from ltreetest where t ~ '23.*.1' order by t asc; -select * from ltreetest where t ~ '23.*{1}.1' order by t asc; -select * from ltreetest where t @ '23 & 1' order by t asc; +SELECT ('{3456,1.2.3.34}'::ltree[] ?@> '1.2.3.4') is null; +SELECT '{3456,1.2.3}'::ltree[] ?@> '1.2.3.4'; +SELECT '{3456,1.2.3.4}'::ltree[] ?<@ '1.2.3'; +SELECT ('{3456,1.2.3.4}'::ltree[] ?<@ '1.2.5') is null; +SELECT '{ltree.asd, tree.awdfg}'::ltree[] ?@ 'tree & aWdfg@'::ltxtquery; +SELECT '{j.k.l.m, g.b.c.d.e}'::ltree[] ?~ 'A*@|g.b.c.d.e'; + +CREATE TABLE ltreetest (t ltree); +\copy ltreetest FROM 'data/ltree.data' + +SELECT * FROM ltreetest WHERE t < '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t <= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t = '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t >= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t > '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t @> '1.1.1' order by t asc; +SELECT * FROM ltreetest WHERE t <@ '1.1.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '1.1.1.*' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '*.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '23.*.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '23.*{1}.1' order by t asc; +SELECT * FROM ltreetest WHERE t @ '23 & 1' order by t asc; create unique index tstidx on ltreetest (t); set enable_seqscan=off; -select * from ltreetest where t < '12.3' order by t asc; -select * from ltreetest where t <= '12.3' order by t asc; -select * from ltreetest where t = '12.3' order by t asc; -select * from ltreetest where t >= '12.3' order by t asc; -select * from ltreetest where t > '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t < '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t <= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t = '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t >= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t > '12.3' order by t asc; drop index tstidx; create index tstidx on ltreetest using gist (t); set enable_seqscan=off; -select * from ltreetest where t < '12.3' order by t asc; -select * from ltreetest where t <= '12.3' order by t asc; -select * from ltreetest where t = '12.3' order by t asc; -select * from ltreetest where t >= '12.3' order by t asc; -select * from ltreetest where t > '12.3' order by t asc; -select * from ltreetest where t @> '1.1.1' order by t asc; -select * from ltreetest where t <@ '1.1.1' order by t asc; -select * from ltreetest where t ~ '1.1.1.*' order by t asc; -select * from ltreetest where t ~ '*.1' order by t asc; -select * from ltreetest where t ~ '23.*.1' order by t asc; -select * from ltreetest where t ~ '23.*{1}.1' order by t asc; -select * from ltreetest where t @ '23 & 1' order by t asc; +SELECT * FROM ltreetest WHERE t < '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t <= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t = '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t >= '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t > '12.3' order by t asc; +SELECT * FROM ltreetest WHERE t @> '1.1.1' order by t asc; +SELECT * FROM ltreetest WHERE t <@ '1.1.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '1.1.1.*' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '*.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '23.*.1' order by t asc; +SELECT * FROM ltreetest WHERE t ~ '23.*{1}.1' order by t asc; +SELECT * FROM ltreetest WHERE t @ '23 & 1' order by t asc; create table _ltreetest (t ltree[]); -\copy _ltreetest from 'data/_ltree.data' +\copy _ltreetest FROM 'data/_ltree.data' -select count(*) from _ltreetest where t @> '1.1.1' ; -select count(*) from _ltreetest where t <@ '1.1.1' ; -select count(*) from _ltreetest where t ~ '1.1.1.*' ; -select count(*) from _ltreetest where t ~ '*.1' ; -select count(*) from _ltreetest where t ~ '23.*.1' ; -select count(*) from _ltreetest where t ~ '23.*{1}.1' ; -select count(*) from _ltreetest where t @ '23 & 1' ; +SELECT count(*) FROM _ltreetest WHERE t @> '1.1.1' ; +SELECT count(*) FROM _ltreetest WHERE t <@ '1.1.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '1.1.1.*' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '*.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '23.*.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '23.*{1}.1' ; +SELECT count(*) FROM _ltreetest WHERE t @ '23 & 1' ; create index _tstidx on _ltreetest using gist (t); set enable_seqscan=off; -select count(*) from _ltreetest where t @> '1.1.1' ; -select count(*) from _ltreetest where t <@ '1.1.1' ; -select count(*) from _ltreetest where t ~ '1.1.1.*' ; -select count(*) from _ltreetest where t ~ '*.1' ; -select count(*) from _ltreetest where t ~ '23.*.1' ; -select count(*) from _ltreetest where t ~ '23.*{1}.1' ; -select count(*) from _ltreetest where t @ '23 & 1' ; +SELECT count(*) FROM _ltreetest WHERE t @> '1.1.1' ; +SELECT count(*) FROM _ltreetest WHERE t <@ '1.1.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '1.1.1.*' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '*.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '23.*.1' ; +SELECT count(*) FROM _ltreetest WHERE t ~ '23.*{1}.1' ; +SELECT count(*) FROM _ltreetest WHERE t @ '23 & 1' ; diff --git a/contrib/miscutil/misc_utils.sql.in b/contrib/miscutil/misc_utils.sql.in index 39d4fd51e9..ddf3274813 100644 --- a/contrib/miscutil/misc_utils.sql.in +++ b/contrib/miscutil/misc_utils.sql.in @@ -9,38 +9,48 @@ -- Return the pid of the backend. -- -create function backend_pid() returns int4 - as 'MODULE_PATHNAME' - language 'C'; + +-- Adjust this setting to control where the objects get created. +SET search_path = public; + +SET autocommit TO 'on'; + +CREATE OR REPLACE FUNCTION backend_pid() +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -- Unlisten from a relation. -- -create function "unlisten"(name) returns int4 - as 'MODULE_PATHNAME' - language 'C'; +CREATE OR REPLACE FUNCTION "unlisten"(name) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -- Unlisten from all relations for this backend. -- -create function "unlisten"() returns int4 - as 'select "unlisten"(''*'')' - language 'sql'; +CREATE OR REPLACE FUNCTION "unlisten"() +RETURNS int4 +AS 'SELECT "unlisten"(''*'')' +LANGUAGE 'SQL'; -- min(x,y) -- -create function min(int4,int4) returns int4 - as 'MODULE_PATHNAME' - language 'C'; +CREATE OR REPLACE FUNCTION min(int4,int4) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -- max(x,y) -- -create function max(int4,int4) returns int4 - as 'MODULE_PATHNAME' - language 'C'; +CREATE OR REPLACE FUNCTION max(int4,int4) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -- Return the number of active listeners on a relation -- -create function active_listeners(text) returns int4 - as 'MODULE_PATHNAME' - language 'C'; - --- end of file +CREATE OR REPLACE FUNCTION active_listeners(text) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; diff --git a/contrib/noupdate/noup.sql.in b/contrib/noupdate/noup.sql.in index 283876258b..47213779b4 100644 --- a/contrib/noupdate/noup.sql.in +++ b/contrib/noupdate/noup.sql.in @@ -1,6 +1,9 @@ -DROP FUNCTION noup (); +-- Adjust this setting to control where the objects get created. +SET search_path = public; -CREATE FUNCTION noup () - RETURNS trigger - AS 'MODULE_PATHNAME' - LANGUAGE 'C'; +SET autocommit TO 'on'; + +CREATE OR REPLACE FUNCTION noup () +RETURNS trigger +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; diff --git a/contrib/oid2name/oid2name.c b/contrib/oid2name/oid2name.c index 8613800056..155d54e707 100644 --- a/contrib/oid2name/oid2name.c +++ b/contrib/oid2name/oid2name.c @@ -245,6 +245,10 @@ sql_conn(const char *dbName, struct options * my_opts) if (pgpass != NULL) free(pgpass); + sql_exec(conn, "SET search_path = public;", 0); + + sql_exec(conn, "SET autocommit TO 'on';", 0); + /* return the conn if good */ return conn; } diff --git a/contrib/pg_dumplo/main.c b/contrib/pg_dumplo/main.c index 8bb9839aeb..27343f56bd 100644 --- a/contrib/pg_dumplo/main.c +++ b/contrib/pg_dumplo/main.c @@ -1,7 +1,7 @@ /* ------------------------------------------------------------------------- * pg_dumplo * - * $Header: /cvsroot/pgsql/contrib/pg_dumplo/Attic/main.c,v 1.12 2002/09/05 21:01:16 tgl Exp $ + * $Header: /cvsroot/pgsql/contrib/pg_dumplo/Attic/main.c,v 1.13 2002/10/18 18:41:20 momjian Exp $ * * Karel Zak 1999-2000 * ------------------------------------------------------------------------- @@ -191,6 +191,10 @@ main(int argc, char **argv) if (pgLO->action != ACTION_SHOW) index_file(pgLO); + PQexec(pgLO->conn, "SET search_path = public"); + + PQexec(pgLO->conn, "SET autocommit TO 'on'"); + PQexec(pgLO->conn, "BEGIN"); switch (pgLO->action) diff --git a/contrib/pgbench/pgbench.c b/contrib/pgbench/pgbench.c index 2eadf62541..f32b373c85 100644 --- a/contrib/pgbench/pgbench.c +++ b/contrib/pgbench/pgbench.c @@ -1,5 +1,5 @@ /* - * $Header: /cvsroot/pgsql/contrib/pgbench/pgbench.c,v 1.20 2002/10/07 05:10:02 ishii Exp $ + * $Header: /cvsroot/pgsql/contrib/pgbench/pgbench.c,v 1.21 2002/10/18 18:41:20 momjian Exp $ * * pgbench: a simple TPC-B like benchmark program for PostgreSQL * written by Tatsuo Ishii @@ -117,7 +117,8 @@ static PGconn * doConnect() { PGconn *con; - + PGresult *res; + con = PQsetdbLogin(pghost, pgport, pgoptions, pgtty, dbName, login, pwd); if (con == NULL) @@ -138,6 +139,22 @@ doConnect() return (NULL); } + + res = PQexec(con, "SET search_path = public"); + if (PQresultStatus(res) != PGRES_COMMAND_OK) + { + fprintf(stderr, "%s", PQerrorMessage(con)); + exit(1); + } + PQclear(res); + res = PQexec(con, "SET autocommit TO 'on'"); + if (PQresultStatus(res) != PGRES_COMMAND_OK) + { + fprintf(stderr, "%s", PQerrorMessage(con)); + exit(1); + } + PQclear(res); + return (con); } @@ -499,6 +516,7 @@ init(void) fprintf(stderr, "%s", PQerrorMessage(con)); exit(1); } + PQclear(res); for (i = 0; i < nbranches * tps; i++) { @@ -589,6 +607,7 @@ init(void) fprintf(stderr, "%s", PQerrorMessage(con)); exit(1); } + PQclear(res); #endif /* NOT_USED */ } } @@ -601,6 +620,7 @@ init(void) fprintf(stderr, "%s", PQerrorMessage(con)); exit(1); } + PQclear(res); fprintf(stderr, "done.\n"); PQfinish(con); @@ -833,6 +853,7 @@ main(int argc, char **argv) fprintf(stderr, "%s", PQerrorMessage(con)); exit(1); } + PQclear(res); tps = atoi(PQgetvalue(res, 0, 0)); if (tps < 0) { diff --git a/contrib/pgcrypto/expected/blowfish.out b/contrib/pgcrypto/expected/blowfish.out index e7fd632df2..1f2ccd82b4 100644 --- a/contrib/pgcrypto/expected/blowfish.out +++ b/contrib/pgcrypto/expected/blowfish.out @@ -1,8 +1,9 @@ -- -- Blowfish cipher -- +SET autocommit TO 'on'; -- some standard Blowfish testvalues -select encode(encrypt( +SELECT encode(encrypt( decode('0000000000000000', 'hex'), decode('0000000000000000', 'hex'), 'bf-ecb/pad:none'), 'hex'); @@ -11,7 +12,7 @@ decode('0000000000000000', 'hex'), 4ef997456198dd78 (1 row) -select encode(encrypt( +SELECT encode(encrypt( decode('ffffffffffffffff', 'hex'), decode('ffffffffffffffff', 'hex'), 'bf-ecb/pad:none'), 'hex'); @@ -20,7 +21,7 @@ decode('ffffffffffffffff', 'hex'), 51866fd5b85ecb8a (1 row) -select encode(encrypt( +SELECT encode(encrypt( decode('1000000000000001', 'hex'), decode('3000000000000000', 'hex'), 'bf-ecb/pad:none'), 'hex'); @@ -29,7 +30,7 @@ decode('3000000000000000', 'hex'), 7d856f9a613063f2 (1 row) -select encode(encrypt( +SELECT encode(encrypt( decode('1111111111111111', 'hex'), decode('1111111111111111', 'hex'), 'bf-ecb/pad:none'), 'hex'); @@ -38,7 +39,7 @@ decode('1111111111111111', 'hex'), 2466dd878b963c9d (1 row) -select encode(encrypt( +SELECT encode(encrypt( decode('0123456789abcdef', 'hex'), decode('fedcba9876543210', 'hex'), 'bf-ecb/pad:none'), 'hex'); @@ -47,7 +48,7 @@ decode('fedcba9876543210', 'hex'), 0aceab0fc6a0a28d (1 row) -select encode(encrypt( +SELECT encode(encrypt( decode('01a1d6d039776742', 'hex'), decode('fedcba9876543210', 'hex'), 'bf-ecb/pad:none'), 'hex'); @@ -56,7 +57,7 @@ decode('fedcba9876543210', 'hex'), 3273b8badc9e9e15 (1 row) -select encode(encrypt( +SELECT encode(encrypt( decode('ffffffffffffffff', 'hex'), decode('0000000000000000', 'hex'), 'bf-ecb/pad:none'), 'hex'); @@ -66,7 +67,7 @@ decode('0000000000000000', 'hex'), (1 row) -- setkey -select encode(encrypt( +SELECT encode(encrypt( decode('fedcba9876543210', 'hex'), decode('f0e1d2c3b4a5968778695a4b3c2d1e0f', 'hex'), 'bf-ecb/pad:none'), 'hex'); @@ -76,7 +77,7 @@ decode('f0e1d2c3b4a5968778695a4b3c2d1e0f', 'hex'), (1 row) -- with padding -select encode(encrypt( +SELECT encode(encrypt( decode('01234567890123456789', 'hex'), decode('33443344334433443344334433443344', 'hex'), 'bf-ecb'), 'hex'); @@ -87,7 +88,7 @@ decode('33443344334433443344334433443344', 'hex'), -- cbc -- 28 bytes key -select encode(encrypt( +SELECT encode(encrypt( decode('6b77b4d63006dee605b156e27403979358deb9e7154616d959f1652bd5', 'hex'), decode('37363534333231204e6f77206973207468652074696d6520666f7220', 'hex'), 'bf-cbc'), 'hex'); @@ -97,7 +98,7 @@ decode('37363534333231204e6f77206973207468652074696d6520666f7220', 'hex'), (1 row) -- 29 bytes key -select encode(encrypt( +SELECT encode(encrypt( decode('6b77b4d63006dee605b156e27403979358deb9e7154616d959f1652bd5ff92cc', 'hex'), decode('37363534333231204e6f77206973207468652074696d6520666f722000', 'hex'), 'bf-cbc'), 'hex'); diff --git a/contrib/pgcrypto/expected/crypt-blowfish.out b/contrib/pgcrypto/expected/crypt-blowfish.out index 7910a4e02e..9b92974931 100644 --- a/contrib/pgcrypto/expected/crypt-blowfish.out +++ b/contrib/pgcrypto/expected/crypt-blowfish.out @@ -1,26 +1,28 @@ -- -- crypt() and gen_salt(): bcrypt -- -select crypt('', '$2a$06$RQiOJ.3ELirrXwxIZY8q0O'); +SET autocommit TO 'on'; +SELECT crypt('', '$2a$06$RQiOJ.3ELirrXwxIZY8q0O'); crypt -------------------------------------------------------------- $2a$06$RQiOJ.3ELirrXwxIZY8q0OlGbBEpDmx7IRZlNYvGJ1SHXwNi2cEKK (1 row) -select crypt('foox', '$2a$06$RQiOJ.3ELirrXwxIZY8q0O'); +SELECT crypt('foox', '$2a$06$RQiOJ.3ELirrXwxIZY8q0O'); crypt -------------------------------------------------------------- $2a$06$RQiOJ.3ELirrXwxIZY8q0OR3CVJrAfda1z26CCHPnB6mmVZD8p0/C (1 row) -create table ctest (data text, res text, salt text); -insert into ctest values ('password', '', ''); -update ctest set salt = gen_salt('bf', 8); -update ctest set res = crypt(data, salt); -select res = crypt(data, res) as "worked" from ctest; +CREATE TABLE ctest (data text, res text, salt text); +INSERT INTO ctest VALUES ('password', '', ''); +UPDATE ctest SET salt = gen_salt('bf', 8); +UPDATE ctest SET res = crypt(data, salt); +SELECT res = crypt(data, res) AS "worked" +FROM ctest; worked -------- t (1 row) -drop table ctest; +DROP TABLE ctest; diff --git a/contrib/pgcrypto/expected/crypt-des.out b/contrib/pgcrypto/expected/crypt-des.out index 76a756eada..574a45bae7 100644 --- a/contrib/pgcrypto/expected/crypt-des.out +++ b/contrib/pgcrypto/expected/crypt-des.out @@ -1,26 +1,28 @@ -- -- crypt() and gen_salt(): crypt-des -- -select crypt('', 'NB'); +SET autocommit TO 'on'; +SELECT crypt('', 'NB'); crypt --------------- NBPx/38Y48kHg (1 row) -select crypt('foox', 'NB'); +SELECT crypt('foox', 'NB'); crypt --------------- NB53EGGqrrb5E (1 row) -create table ctest (data text, res text, salt text); -insert into ctest values ('password', '', ''); -update ctest set salt = gen_salt('des'); -update ctest set res = crypt(data, salt); -select res = crypt(data, res) as "worked" from ctest; +CREATE TABLE ctest (data text, res text, salt text); +INSERT INTO ctest VALUES ('password', '', ''); +UPDATE ctest SET salt = gen_salt('des'); +UPDATE ctest SET res = crypt(data, salt); +SELECT res = crypt(data, res) AS "worked" +FROM ctest; worked -------- t (1 row) -drop table ctest; +DROP TABLE ctest; diff --git a/contrib/pgcrypto/expected/crypt-md5.out b/contrib/pgcrypto/expected/crypt-md5.out index 4bd2f33a9f..545236d654 100644 --- a/contrib/pgcrypto/expected/crypt-md5.out +++ b/contrib/pgcrypto/expected/crypt-md5.out @@ -1,26 +1,28 @@ -- -- crypt() and gen_salt(): md5 -- -select crypt('', '$1$Szzz0yzz'); +SET autocommit TO 'on'; +SELECT crypt('', '$1$Szzz0yzz'); crypt ------------------------------------ $1$Szzz0yzz$To38XrR3BsbXQW2ZpfKjF1 (1 row) -select crypt('foox', '$1$Szzz0yzz'); +SELECT crypt('foox', '$1$Szzz0yzz'); crypt ------------------------------------ $1$Szzz0yzz$IYL49cd3t9bllsA7Jmz1M1 (1 row) -create table ctest (data text, res text, salt text); -insert into ctest values ('password', '', ''); -update ctest set salt = gen_salt('md5'); -update ctest set res = crypt(data, salt); -select res = crypt(data, res) as "worked" from ctest; +CREATE TABLE ctest (data text, res text, salt text); +INSERT INTO ctest VALUES ('password', '', ''); +UPDATE ctest SET salt = gen_salt('md5'); +UPDATE ctest SET res = crypt(data, salt); +SELECT res = crypt(data, res) AS "worked" +FROM ctest; worked -------- t (1 row) -drop table ctest; +DROP TABLE ctest; diff --git a/contrib/pgcrypto/expected/crypt-xdes.out b/contrib/pgcrypto/expected/crypt-xdes.out index d247b552b2..b2593fc16b 100644 --- a/contrib/pgcrypto/expected/crypt-xdes.out +++ b/contrib/pgcrypto/expected/crypt-xdes.out @@ -1,26 +1,28 @@ -- -- crypt() and gen_salt(): extended des -- -select crypt('', '_J9..j2zz'); +SET autocommit TO 'on'; +SELECT crypt('', '_J9..j2zz'); crypt ---------------------- _J9..j2zzR/nIRDK3pPc (1 row) -select crypt('foox', '_J9..j2zz'); +SELECT crypt('foox', '_J9..j2zz'); crypt ---------------------- _J9..j2zzAYKMvO2BYRY (1 row) -create table ctest (data text, res text, salt text); -insert into ctest values ('password', '', ''); -update ctest set salt = gen_salt('xdes', 1001); -update ctest set res = crypt(data, salt); -select res = crypt(data, res) as "worked" from ctest; +CREATE TABLE ctest (data text, res text, salt text); +INSERT INTO ctest VALUES ('password', '', ''); +UPDATE ctest SET salt = gen_salt('xdes', 1001); +UPDATE ctest SET res = crypt(data, salt); +SELECT res = crypt(data, res) AS "worked" +FROM ctest; worked -------- t (1 row) -drop table ctest; +DROP TABLE ctest; diff --git a/contrib/pgcrypto/expected/hmac-md5.out b/contrib/pgcrypto/expected/hmac-md5.out index 5cd55ce440..dedd5afe71 100644 --- a/contrib/pgcrypto/expected/hmac-md5.out +++ b/contrib/pgcrypto/expected/hmac-md5.out @@ -1,7 +1,8 @@ -- -- HMAC-MD5 -- -select encode(hmac( +SET autocommit TO 'on'; +SELECT encode(hmac( 'Hi There', decode('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b', 'hex'), 'md5'), 'hex'); @@ -11,7 +12,7 @@ decode('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b', 'hex'), (1 row) -- 2 -select encode(hmac( +SELECT encode(hmac( 'Jefe', 'what do ya want for nothing?', 'md5'), 'hex'); @@ -21,7 +22,7 @@ select encode(hmac( (1 row) -- 3 -select encode(hmac( +SELECT encode(hmac( decode('dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd', 'hex'), decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'), 'md5'), 'hex'); @@ -31,7 +32,7 @@ decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'), (1 row) -- 4 -select encode(hmac( +SELECT encode(hmac( decode('cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd', 'hex'), decode('0102030405060708090a0b0c0d0e0f10111213141516171819', 'hex'), 'md5'), 'hex'); @@ -41,7 +42,7 @@ decode('0102030405060708090a0b0c0d0e0f10111213141516171819', 'hex'), (1 row) -- 5 -select encode(hmac( +SELECT encode(hmac( 'Test With Truncation', decode('0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c', 'hex'), 'md5'), 'hex'); @@ -51,7 +52,7 @@ decode('0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c', 'hex'), (1 row) -- 6 -select encode(hmac( +SELECT encode(hmac( 'Test Using Larger Than Block-Size Key - Hash Key First', decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'), 'md5'), 'hex'); @@ -61,7 +62,7 @@ decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa (1 row) -- 7 -select encode(hmac( +SELECT encode(hmac( 'Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data', decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'), 'md5'), 'hex'); diff --git a/contrib/pgcrypto/expected/hmac-sha1.out b/contrib/pgcrypto/expected/hmac-sha1.out index e4739fe5f3..4ccb0f101b 100644 --- a/contrib/pgcrypto/expected/hmac-sha1.out +++ b/contrib/pgcrypto/expected/hmac-sha1.out @@ -1,7 +1,8 @@ -- -- HMAC-MD5 -- -select encode(hmac( +SET autocommit TO 'on'; +SELECT encode(hmac( 'Hi There', decode('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b', 'hex'), 'sha1'), 'hex'); @@ -11,7 +12,7 @@ decode('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b', 'hex'), (1 row) -- 2 -select encode(hmac( +SELECT encode(hmac( 'Jefe', 'what do ya want for nothing?', 'sha1'), 'hex'); @@ -21,7 +22,7 @@ select encode(hmac( (1 row) -- 3 -select encode(hmac( +SELECT encode(hmac( decode('dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd', 'hex'), decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'), 'sha1'), 'hex'); @@ -31,7 +32,7 @@ decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'), (1 row) -- 4 -select encode(hmac( +SELECT encode(hmac( decode('cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd', 'hex'), decode('0102030405060708090a0b0c0d0e0f10111213141516171819', 'hex'), 'sha1'), 'hex'); @@ -41,7 +42,7 @@ decode('0102030405060708090a0b0c0d0e0f10111213141516171819', 'hex'), (1 row) -- 5 -select encode(hmac( +SELECT encode(hmac( 'Test With Truncation', decode('0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c', 'hex'), 'sha1'), 'hex'); @@ -51,7 +52,7 @@ decode('0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c', 'hex'), (1 row) -- 6 -select encode(hmac( +SELECT encode(hmac( 'Test Using Larger Than Block-Size Key - Hash Key First', decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'), 'sha1'), 'hex'); @@ -61,7 +62,7 @@ decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa (1 row) -- 7 -select encode(hmac( +SELECT encode(hmac( 'Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data', decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'), 'sha1'), 'hex'); diff --git a/contrib/pgcrypto/expected/init.out b/contrib/pgcrypto/expected/init.out index a7c95eb63c..509f454047 100644 --- a/contrib/pgcrypto/expected/init.out +++ b/contrib/pgcrypto/expected/init.out @@ -3,13 +3,13 @@ -- \set ECHO none -- check for encoding fn's -select encode('foo', 'hex'); +SELECT encode('foo', 'hex'); encode -------- 666f6f (1 row) -select decode('666f6f', 'hex'); +SELECT decode('666f6f', 'hex'); decode -------- foo diff --git a/contrib/pgcrypto/expected/md5.out b/contrib/pgcrypto/expected/md5.out index ec8368042e..70933c9a73 100644 --- a/contrib/pgcrypto/expected/md5.out +++ b/contrib/pgcrypto/expected/md5.out @@ -1,43 +1,44 @@ -- -- MD5 message digest -- -select encode(digest('', 'md5'), 'hex'); +SET autocommit TO 'on'; +SELECT encode(digest('', 'md5'), 'hex'); encode ---------------------------------- d41d8cd98f00b204e9800998ecf8427e (1 row) -select encode(digest('a', 'md5'), 'hex'); +SELECT encode(digest('a', 'md5'), 'hex'); encode ---------------------------------- 0cc175b9c0f1b6a831c399e269772661 (1 row) -select encode(digest('abc', 'md5'), 'hex'); +SELECT encode(digest('abc', 'md5'), 'hex'); encode ---------------------------------- 900150983cd24fb0d6963f7d28e17f72 (1 row) -select encode(digest('message digest', 'md5'), 'hex'); +SELECT encode(digest('message digest', 'md5'), 'hex'); encode ---------------------------------- f96b697d7cb7938d525a2f31aaf161d0 (1 row) -select encode(digest('abcdefghijklmnopqrstuvwxyz', 'md5'), 'hex'); +SELECT encode(digest('abcdefghijklmnopqrstuvwxyz', 'md5'), 'hex'); encode ---------------------------------- c3fcd3d76192e4007dfb496cca67e13b (1 row) -select encode(digest('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'md5'), 'hex'); +SELECT encode(digest('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'md5'), 'hex'); encode ---------------------------------- d174ab98d277d9f5a5611c2c9f419d9f (1 row) -select encode(digest('12345678901234567890123456789012345678901234567890123456789012345678901234567890', 'md5'), 'hex'); +SELECT encode(digest('12345678901234567890123456789012345678901234567890123456789012345678901234567890', 'md5'), 'hex'); encode ---------------------------------- 57edf4a22be3c955ac49da2e2107b67a diff --git a/contrib/pgcrypto/expected/rijndael.out b/contrib/pgcrypto/expected/rijndael.out index 2f64268944..18ade2025b 100644 --- a/contrib/pgcrypto/expected/rijndael.out +++ b/contrib/pgcrypto/expected/rijndael.out @@ -1,8 +1,9 @@ -- -- AES / Rijndael-128 cipher -- +SET autocommit TO 'on'; -- some standard Rijndael testvalues -select encode(encrypt( +SELECT encode(encrypt( decode('00112233445566778899aabbccddeeff', 'hex'), decode('000102030405060708090a0b0c0d0e0f', 'hex'), 'aes-ecb/pad:none'), 'hex'); @@ -11,7 +12,7 @@ decode('000102030405060708090a0b0c0d0e0f', 'hex'), 69c4e0d86a7b0430d8cdb78070b4c55a (1 row) -select encode(encrypt( +SELECT encode(encrypt( decode('00112233445566778899aabbccddeeff', 'hex'), decode('000102030405060708090a0b0c0d0e0f1011121314151617', 'hex'), 'aes-ecb/pad:none'), 'hex'); @@ -20,7 +21,7 @@ decode('000102030405060708090a0b0c0d0e0f1011121314151617', 'hex'), dda97ca4864cdfe06eaf70a0ec0d7191 (1 row) -select encode(encrypt( +SELECT encode(encrypt( decode('00112233445566778899aabbccddeeff', 'hex'), decode('000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f', 'hex'), 'aes-ecb/pad:none'), 'hex'); @@ -30,7 +31,7 @@ decode('000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f', 'hex' (1 row) -- cbc -select encode(encrypt( +SELECT encode(encrypt( decode('00112233445566778899aabbccddeeff', 'hex'), decode('000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f', 'hex'), 'aes-cbc/pad:none'), 'hex'); @@ -40,7 +41,7 @@ decode('000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f', 'hex' (1 row) -- key padding -select encode(encrypt( +SELECT encode(encrypt( decode('0011223344', 'hex'), decode('000102030405', 'hex'), 'aes-cbc'), 'hex'); @@ -49,7 +50,7 @@ decode('000102030405', 'hex'), 189a28932213f017b246678dbc28655f (1 row) -select encode(encrypt( +SELECT encode(encrypt( decode('0011223344', 'hex'), decode('000102030405060708090a0b0c0d0e0f10111213', 'hex'), 'aes-cbc'), 'hex'); @@ -58,7 +59,7 @@ decode('000102030405060708090a0b0c0d0e0f10111213', 'hex'), 3b02279162d15580e069d3a71407a556 (1 row) -select encode(encrypt( +SELECT encode(encrypt( decode('0011223344', 'hex'), decode('000102030405060708090a0b0c0d0e0f101112131415161718191a1b', 'hex'), 'aes-cbc'), 'hex'); diff --git a/contrib/pgcrypto/expected/sha1.out b/contrib/pgcrypto/expected/sha1.out index 430c881a9f..af86171d88 100644 --- a/contrib/pgcrypto/expected/sha1.out +++ b/contrib/pgcrypto/expected/sha1.out @@ -1,43 +1,44 @@ -- -- SHA1 message digest -- -select encode(digest('', 'sha1'), 'hex'); +SET autocommit TO 'on'; +SELECT encode(digest('', 'sha1'), 'hex'); encode ------------------------------------------ da39a3ee5e6b4b0d3255bfef95601890afd80709 (1 row) -select encode(digest('a', 'sha1'), 'hex'); +SELECT encode(digest('a', 'sha1'), 'hex'); encode ------------------------------------------ 86f7e437faa5a7fce15d1ddcb9eaeaea377667b8 (1 row) -select encode(digest('abc', 'sha1'), 'hex'); +SELECT encode(digest('abc', 'sha1'), 'hex'); encode ------------------------------------------ a9993e364706816aba3e25717850c26c9cd0d89d (1 row) -select encode(digest('message digest', 'sha1'), 'hex'); +SELECT encode(digest('message digest', 'sha1'), 'hex'); encode ------------------------------------------ c12252ceda8be8994d5fa0290a47231c1d16aae3 (1 row) -select encode(digest('abcdefghijklmnopqrstuvwxyz', 'sha1'), 'hex'); +SELECT encode(digest('abcdefghijklmnopqrstuvwxyz', 'sha1'), 'hex'); encode ------------------------------------------ 32d10c7b8cf96570ca04ce37f2a19d84240d3a89 (1 row) -select encode(digest('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'sha1'), 'hex'); +SELECT encode(digest('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'sha1'), 'hex'); encode ------------------------------------------ 761c457bf73b14d27e9e9265c46f4b4dda11f940 (1 row) -select encode(digest('12345678901234567890123456789012345678901234567890123456789012345678901234567890', 'sha1'), 'hex'); +SELECT encode(digest('12345678901234567890123456789012345678901234567890123456789012345678901234567890', 'sha1'), 'hex'); encode ------------------------------------------ 50abf5706a150990a08b2c5ea40fa0e585554732 diff --git a/contrib/pgcrypto/pgcrypto.sql.in b/contrib/pgcrypto/pgcrypto.sql.in index 3efb2ed969..0f3cbe537a 100644 --- a/contrib/pgcrypto/pgcrypto.sql.in +++ b/contrib/pgcrypto/pgcrypto.sql.in @@ -1,75 +1,76 @@ - --- drop function digest(text, text); --- drop function digest(bytea, text); --- drop function digest_exists(text); --- drop function hmac(text, text, text); --- drop function hmac(bytea, bytea, text); --- drop function hmac_exists(text); --- drop function crypt(text, text); --- drop function gen_salt(text); --- drop function gen_salt(text, int4); --- drop function encrypt(bytea, bytea, text); --- drop function decrypt(bytea, bytea, text); --- drop function encrypt_iv(bytea, bytea, bytea, text); --- drop function decrypt_iv(bytea, bytea, bytea, text); --- drop function cipher_exists(text); - - - -CREATE FUNCTION digest(text, text) RETURNS bytea - AS 'MODULE_PATHNAME', - 'pg_digest' LANGUAGE 'C'; - -CREATE FUNCTION digest(bytea, text) RETURNS bytea - AS 'MODULE_PATHNAME', - 'pg_digest' LANGUAGE 'C'; - -CREATE FUNCTION digest_exists(text) RETURNS bool - AS 'MODULE_PATHNAME', - 'pg_digest_exists' LANGUAGE 'C'; - -CREATE FUNCTION hmac(text, text, text) RETURNS bytea - AS 'MODULE_PATHNAME', - 'pg_hmac' LANGUAGE 'C'; - -CREATE FUNCTION hmac(bytea, bytea, text) RETURNS bytea - AS 'MODULE_PATHNAME', - 'pg_hmac' LANGUAGE 'C'; - -CREATE FUNCTION hmac_exists(text) RETURNS bool - AS 'MODULE_PATHNAME', - 'pg_hmac_exists' LANGUAGE 'C'; - -CREATE FUNCTION crypt(text, text) RETURNS text - AS 'MODULE_PATHNAME', - 'pg_crypt' LANGUAGE 'C'; - -CREATE FUNCTION gen_salt(text) RETURNS text - AS 'MODULE_PATHNAME', - 'pg_gen_salt' LANGUAGE 'C'; - -CREATE FUNCTION gen_salt(text, int4) RETURNS text - AS 'MODULE_PATHNAME', - 'pg_gen_salt_rounds' LANGUAGE 'C'; - -CREATE FUNCTION encrypt(bytea, bytea, text) RETURNS bytea - AS 'MODULE_PATHNAME', - 'pg_encrypt' LANGUAGE 'C'; - -CREATE FUNCTION decrypt(bytea, bytea, text) RETURNS bytea - AS 'MODULE_PATHNAME', - 'pg_decrypt' LANGUAGE 'C'; - -CREATE FUNCTION encrypt_iv(bytea, bytea, bytea, text) RETURNS bytea - AS 'MODULE_PATHNAME', - 'pg_encrypt_iv' LANGUAGE 'C'; - -CREATE FUNCTION decrypt_iv(bytea, bytea, bytea, text) RETURNS bytea - AS 'MODULE_PATHNAME', - 'pg_decrypt_iv' LANGUAGE 'C'; - -CREATE FUNCTION cipher_exists(text) RETURNS bool - AS 'MODULE_PATHNAME', - 'pg_cipher_exists' LANGUAGE 'C'; +-- Adjust this setting to control where the objects get created. +SET search_path = public; + +SET autocommit TO 'on'; + +CREATE OR REPLACE FUNCTION digest(text, text) +RETURNS bytea +AS 'MODULE_PATHNAME', 'pg_digest' +LANGUAGE 'C'; + +CREATE OR REPLACE FUNCTION digest(bytea, text) +RETURNS bytea +AS 'MODULE_PATHNAME', 'pg_digest' +LANGUAGE 'C'; + +CREATE OR REPLACE FUNCTION digest_exists(text) +RETURNS bool +AS 'MODULE_PATHNAME', 'pg_digest_exists' +LANGUAGE 'C'; + +CREATE OR REPLACE FUNCTION hmac(text, text, text) +RETURNS bytea +AS 'MODULE_PATHNAME', 'pg_hmac' +LANGUAGE 'C'; + +CREATE OR REPLACE FUNCTION hmac(bytea, bytea, text) +RETURNS bytea +AS 'MODULE_PATHNAME', 'pg_hmac' +LANGUAGE 'C'; + +CREATE OR REPLACE FUNCTION hmac_exists(text) +RETURNS bool +AS 'MODULE_PATHNAME', 'pg_hmac_exists' +LANGUAGE 'C'; + +CREATE OR REPLACE FUNCTION crypt(text, text) +RETURNS text +AS 'MODULE_PATHNAME', 'pg_crypt' +LANGUAGE 'C'; + +CREATE OR REPLACE FUNCTION gen_salt(text) +RETURNS text +AS 'MODULE_PATHNAME', 'pg_gen_salt' +LANGUAGE 'C'; + +CREATE OR REPLACE FUNCTION gen_salt(text, int4) +RETURNS text +AS 'MODULE_PATHNAME', 'pg_gen_salt_rounds' +LANGUAGE 'C'; + +CREATE OR REPLACE FUNCTION encrypt(bytea, bytea, text) +RETURNS bytea +AS 'MODULE_PATHNAME', 'pg_encrypt' +LANGUAGE 'C'; + +CREATE OR REPLACE FUNCTION decrypt(bytea, bytea, text) +RETURNS bytea +AS 'MODULE_PATHNAME', 'pg_decrypt' +LANGUAGE 'C'; + +CREATE OR REPLACE FUNCTION encrypt_iv(bytea, bytea, bytea, text) +RETURNS bytea +AS 'MODULE_PATHNAME', 'pg_encrypt_iv' +LANGUAGE 'C'; + +CREATE OR REPLACE FUNCTION decrypt_iv(bytea, bytea, bytea, text) +RETURNS bytea +AS 'MODULE_PATHNAME', 'pg_decrypt_iv' +LANGUAGE 'C'; + +CREATE OR REPLACE FUNCTION cipher_exists(text) +RETURNS bool +AS 'MODULE_PATHNAME', 'pg_cipher_exists' +LANGUAGE 'C'; diff --git a/contrib/pgcrypto/sql/blowfish.sql b/contrib/pgcrypto/sql/blowfish.sql index e1fa7b1f49..93187dcba3 100644 --- a/contrib/pgcrypto/sql/blowfish.sql +++ b/contrib/pgcrypto/sql/blowfish.sql @@ -2,50 +2,52 @@ -- Blowfish cipher -- +SET autocommit TO 'on'; + -- some standard Blowfish testvalues -select encode(encrypt( +SELECT encode(encrypt( decode('0000000000000000', 'hex'), decode('0000000000000000', 'hex'), 'bf-ecb/pad:none'), 'hex'); -select encode(encrypt( +SELECT encode(encrypt( decode('ffffffffffffffff', 'hex'), decode('ffffffffffffffff', 'hex'), 'bf-ecb/pad:none'), 'hex'); -select encode(encrypt( +SELECT encode(encrypt( decode('1000000000000001', 'hex'), decode('3000000000000000', 'hex'), 'bf-ecb/pad:none'), 'hex'); -select encode(encrypt( +SELECT encode(encrypt( decode('1111111111111111', 'hex'), decode('1111111111111111', 'hex'), 'bf-ecb/pad:none'), 'hex'); -select encode(encrypt( +SELECT encode(encrypt( decode('0123456789abcdef', 'hex'), decode('fedcba9876543210', 'hex'), 'bf-ecb/pad:none'), 'hex'); -select encode(encrypt( +SELECT encode(encrypt( decode('01a1d6d039776742', 'hex'), decode('fedcba9876543210', 'hex'), 'bf-ecb/pad:none'), 'hex'); -select encode(encrypt( +SELECT encode(encrypt( decode('ffffffffffffffff', 'hex'), decode('0000000000000000', 'hex'), 'bf-ecb/pad:none'), 'hex'); -- setkey -select encode(encrypt( +SELECT encode(encrypt( decode('fedcba9876543210', 'hex'), decode('f0e1d2c3b4a5968778695a4b3c2d1e0f', 'hex'), 'bf-ecb/pad:none'), 'hex'); -- with padding -select encode(encrypt( +SELECT encode(encrypt( decode('01234567890123456789', 'hex'), decode('33443344334433443344334433443344', 'hex'), 'bf-ecb'), 'hex'); @@ -53,13 +55,13 @@ decode('33443344334433443344334433443344', 'hex'), -- cbc -- 28 bytes key -select encode(encrypt( +SELECT encode(encrypt( decode('6b77b4d63006dee605b156e27403979358deb9e7154616d959f1652bd5', 'hex'), decode('37363534333231204e6f77206973207468652074696d6520666f7220', 'hex'), 'bf-cbc'), 'hex'); -- 29 bytes key -select encode(encrypt( +SELECT encode(encrypt( decode('6b77b4d63006dee605b156e27403979358deb9e7154616d959f1652bd5ff92cc', 'hex'), decode('37363534333231204e6f77206973207468652074696d6520666f722000', 'hex'), 'bf-cbc'), 'hex'); diff --git a/contrib/pgcrypto/sql/crypt-blowfish.sql b/contrib/pgcrypto/sql/crypt-blowfish.sql index 6b82fdff63..5128675e0c 100644 --- a/contrib/pgcrypto/sql/crypt-blowfish.sql +++ b/contrib/pgcrypto/sql/crypt-blowfish.sql @@ -2,16 +2,19 @@ -- crypt() and gen_salt(): bcrypt -- -select crypt('', '$2a$06$RQiOJ.3ELirrXwxIZY8q0O'); +SET autocommit TO 'on'; -select crypt('foox', '$2a$06$RQiOJ.3ELirrXwxIZY8q0O'); +SELECT crypt('', '$2a$06$RQiOJ.3ELirrXwxIZY8q0O'); -create table ctest (data text, res text, salt text); -insert into ctest values ('password', '', ''); +SELECT crypt('foox', '$2a$06$RQiOJ.3ELirrXwxIZY8q0O'); -update ctest set salt = gen_salt('bf', 8); -update ctest set res = crypt(data, salt); -select res = crypt(data, res) as "worked" from ctest; +CREATE TABLE ctest (data text, res text, salt text); +INSERT INTO ctest VALUES ('password', '', ''); -drop table ctest; +UPDATE ctest SET salt = gen_salt('bf', 8); +UPDATE ctest SET res = crypt(data, salt); +SELECT res = crypt(data, res) AS "worked" +FROM ctest; + +DROP TABLE ctest; diff --git a/contrib/pgcrypto/sql/crypt-des.sql b/contrib/pgcrypto/sql/crypt-des.sql index 2a2fbfb36c..ff43112dd8 100644 --- a/contrib/pgcrypto/sql/crypt-des.sql +++ b/contrib/pgcrypto/sql/crypt-des.sql @@ -2,16 +2,19 @@ -- crypt() and gen_salt(): crypt-des -- -select crypt('', 'NB'); +SET autocommit TO 'on'; -select crypt('foox', 'NB'); +SELECT crypt('', 'NB'); -create table ctest (data text, res text, salt text); -insert into ctest values ('password', '', ''); +SELECT crypt('foox', 'NB'); -update ctest set salt = gen_salt('des'); -update ctest set res = crypt(data, salt); -select res = crypt(data, res) as "worked" from ctest; +CREATE TABLE ctest (data text, res text, salt text); +INSERT INTO ctest VALUES ('password', '', ''); -drop table ctest; +UPDATE ctest SET salt = gen_salt('des'); +UPDATE ctest SET res = crypt(data, salt); +SELECT res = crypt(data, res) AS "worked" +FROM ctest; + +DROP TABLE ctest; diff --git a/contrib/pgcrypto/sql/crypt-md5.sql b/contrib/pgcrypto/sql/crypt-md5.sql index 8ef8dbae0f..c570e4ab7a 100644 --- a/contrib/pgcrypto/sql/crypt-md5.sql +++ b/contrib/pgcrypto/sql/crypt-md5.sql @@ -2,16 +2,19 @@ -- crypt() and gen_salt(): md5 -- -select crypt('', '$1$Szzz0yzz'); +SET autocommit TO 'on'; -select crypt('foox', '$1$Szzz0yzz'); +SELECT crypt('', '$1$Szzz0yzz'); -create table ctest (data text, res text, salt text); -insert into ctest values ('password', '', ''); +SELECT crypt('foox', '$1$Szzz0yzz'); -update ctest set salt = gen_salt('md5'); -update ctest set res = crypt(data, salt); -select res = crypt(data, res) as "worked" from ctest; +CREATE TABLE ctest (data text, res text, salt text); +INSERT INTO ctest VALUES ('password', '', ''); -drop table ctest; +UPDATE ctest SET salt = gen_salt('md5'); +UPDATE ctest SET res = crypt(data, salt); +SELECT res = crypt(data, res) AS "worked" +FROM ctest; + +DROP TABLE ctest; diff --git a/contrib/pgcrypto/sql/crypt-xdes.sql b/contrib/pgcrypto/sql/crypt-xdes.sql index 6fd85b929a..c6205ab600 100644 --- a/contrib/pgcrypto/sql/crypt-xdes.sql +++ b/contrib/pgcrypto/sql/crypt-xdes.sql @@ -2,16 +2,19 @@ -- crypt() and gen_salt(): extended des -- -select crypt('', '_J9..j2zz'); +SET autocommit TO 'on'; -select crypt('foox', '_J9..j2zz'); +SELECT crypt('', '_J9..j2zz'); -create table ctest (data text, res text, salt text); -insert into ctest values ('password', '', ''); +SELECT crypt('foox', '_J9..j2zz'); -update ctest set salt = gen_salt('xdes', 1001); -update ctest set res = crypt(data, salt); -select res = crypt(data, res) as "worked" from ctest; +CREATE TABLE ctest (data text, res text, salt text); +INSERT INTO ctest VALUES ('password', '', ''); -drop table ctest; +UPDATE ctest SET salt = gen_salt('xdes', 1001); +UPDATE ctest SET res = crypt(data, salt); +SELECT res = crypt(data, res) AS "worked" +FROM ctest; + +DROP TABLE ctest; diff --git a/contrib/pgcrypto/sql/hmac-md5.sql b/contrib/pgcrypto/sql/hmac-md5.sql index d3cd1f649d..ed2b65b7b8 100644 --- a/contrib/pgcrypto/sql/hmac-md5.sql +++ b/contrib/pgcrypto/sql/hmac-md5.sql @@ -2,43 +2,45 @@ -- HMAC-MD5 -- -select encode(hmac( +SET autocommit TO 'on'; + +SELECT encode(hmac( 'Hi There', decode('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b', 'hex'), 'md5'), 'hex'); -- 2 -select encode(hmac( +SELECT encode(hmac( 'Jefe', 'what do ya want for nothing?', 'md5'), 'hex'); -- 3 -select encode(hmac( +SELECT encode(hmac( decode('dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd', 'hex'), decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'), 'md5'), 'hex'); -- 4 -select encode(hmac( +SELECT encode(hmac( decode('cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd', 'hex'), decode('0102030405060708090a0b0c0d0e0f10111213141516171819', 'hex'), 'md5'), 'hex'); -- 5 -select encode(hmac( +SELECT encode(hmac( 'Test With Truncation', decode('0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c', 'hex'), 'md5'), 'hex'); -- 6 -select encode(hmac( +SELECT encode(hmac( 'Test Using Larger Than Block-Size Key - Hash Key First', decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'), 'md5'), 'hex'); -- 7 -select encode(hmac( +SELECT encode(hmac( 'Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data', decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'), 'md5'), 'hex'); diff --git a/contrib/pgcrypto/sql/hmac-sha1.sql b/contrib/pgcrypto/sql/hmac-sha1.sql index f08c438963..fb70424dce 100644 --- a/contrib/pgcrypto/sql/hmac-sha1.sql +++ b/contrib/pgcrypto/sql/hmac-sha1.sql @@ -2,43 +2,45 @@ -- HMAC-MD5 -- -select encode(hmac( +SET autocommit TO 'on'; + +SELECT encode(hmac( 'Hi There', decode('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b', 'hex'), 'sha1'), 'hex'); -- 2 -select encode(hmac( +SELECT encode(hmac( 'Jefe', 'what do ya want for nothing?', 'sha1'), 'hex'); -- 3 -select encode(hmac( +SELECT encode(hmac( decode('dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd', 'hex'), decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'), 'sha1'), 'hex'); -- 4 -select encode(hmac( +SELECT encode(hmac( decode('cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd', 'hex'), decode('0102030405060708090a0b0c0d0e0f10111213141516171819', 'hex'), 'sha1'), 'hex'); -- 5 -select encode(hmac( +SELECT encode(hmac( 'Test With Truncation', decode('0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c', 'hex'), 'sha1'), 'hex'); -- 6 -select encode(hmac( +SELECT encode(hmac( 'Test Using Larger Than Block-Size Key - Hash Key First', decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'), 'sha1'), 'hex'); -- 7 -select encode(hmac( +SELECT encode(hmac( 'Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data', decode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'hex'), 'sha1'), 'hex'); diff --git a/contrib/pgcrypto/sql/init.sql b/contrib/pgcrypto/sql/init.sql index 8bddb73773..08ffeb4981 100644 --- a/contrib/pgcrypto/sql/init.sql +++ b/contrib/pgcrypto/sql/init.sql @@ -3,10 +3,11 @@ -- \set ECHO none +SET autocommit TO 'on'; \i pgcrypto.sql \set ECHO all -- check for encoding fn's -select encode('foo', 'hex'); -select decode('666f6f', 'hex'); +SELECT encode('foo', 'hex'); +SELECT decode('666f6f', 'hex'); diff --git a/contrib/pgcrypto/sql/md5.sql b/contrib/pgcrypto/sql/md5.sql index 78e4cfee0f..0c851217b2 100644 --- a/contrib/pgcrypto/sql/md5.sql +++ b/contrib/pgcrypto/sql/md5.sql @@ -2,11 +2,13 @@ -- MD5 message digest -- -select encode(digest('', 'md5'), 'hex'); -select encode(digest('a', 'md5'), 'hex'); -select encode(digest('abc', 'md5'), 'hex'); -select encode(digest('message digest', 'md5'), 'hex'); -select encode(digest('abcdefghijklmnopqrstuvwxyz', 'md5'), 'hex'); -select encode(digest('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'md5'), 'hex'); -select encode(digest('12345678901234567890123456789012345678901234567890123456789012345678901234567890', 'md5'), 'hex'); +SET autocommit TO 'on'; + +SELECT encode(digest('', 'md5'), 'hex'); +SELECT encode(digest('a', 'md5'), 'hex'); +SELECT encode(digest('abc', 'md5'), 'hex'); +SELECT encode(digest('message digest', 'md5'), 'hex'); +SELECT encode(digest('abcdefghijklmnopqrstuvwxyz', 'md5'), 'hex'); +SELECT encode(digest('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'md5'), 'hex'); +SELECT encode(digest('12345678901234567890123456789012345678901234567890123456789012345678901234567890', 'md5'), 'hex'); diff --git a/contrib/pgcrypto/sql/rijndael.sql b/contrib/pgcrypto/sql/rijndael.sql index fbacdc6dfc..793b07f362 100644 --- a/contrib/pgcrypto/sql/rijndael.sql +++ b/contrib/pgcrypto/sql/rijndael.sql @@ -2,41 +2,43 @@ -- AES / Rijndael-128 cipher -- +SET autocommit TO 'on'; + -- some standard Rijndael testvalues -select encode(encrypt( +SELECT encode(encrypt( decode('00112233445566778899aabbccddeeff', 'hex'), decode('000102030405060708090a0b0c0d0e0f', 'hex'), 'aes-ecb/pad:none'), 'hex'); -select encode(encrypt( +SELECT encode(encrypt( decode('00112233445566778899aabbccddeeff', 'hex'), decode('000102030405060708090a0b0c0d0e0f1011121314151617', 'hex'), 'aes-ecb/pad:none'), 'hex'); -select encode(encrypt( +SELECT encode(encrypt( decode('00112233445566778899aabbccddeeff', 'hex'), decode('000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f', 'hex'), 'aes-ecb/pad:none'), 'hex'); -- cbc -select encode(encrypt( +SELECT encode(encrypt( decode('00112233445566778899aabbccddeeff', 'hex'), decode('000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f', 'hex'), 'aes-cbc/pad:none'), 'hex'); -- key padding -select encode(encrypt( +SELECT encode(encrypt( decode('0011223344', 'hex'), decode('000102030405', 'hex'), 'aes-cbc'), 'hex'); -select encode(encrypt( +SELECT encode(encrypt( decode('0011223344', 'hex'), decode('000102030405060708090a0b0c0d0e0f10111213', 'hex'), 'aes-cbc'), 'hex'); -select encode(encrypt( +SELECT encode(encrypt( decode('0011223344', 'hex'), decode('000102030405060708090a0b0c0d0e0f101112131415161718191a1b', 'hex'), 'aes-cbc'), 'hex'); diff --git a/contrib/pgcrypto/sql/sha1.sql b/contrib/pgcrypto/sql/sha1.sql index 11ee5426cb..1c0fcd9072 100644 --- a/contrib/pgcrypto/sql/sha1.sql +++ b/contrib/pgcrypto/sql/sha1.sql @@ -2,11 +2,13 @@ -- SHA1 message digest -- -select encode(digest('', 'sha1'), 'hex'); -select encode(digest('a', 'sha1'), 'hex'); -select encode(digest('abc', 'sha1'), 'hex'); -select encode(digest('message digest', 'sha1'), 'hex'); -select encode(digest('abcdefghijklmnopqrstuvwxyz', 'sha1'), 'hex'); -select encode(digest('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'sha1'), 'hex'); -select encode(digest('12345678901234567890123456789012345678901234567890123456789012345678901234567890', 'sha1'), 'hex'); +SET autocommit TO 'on'; + +SELECT encode(digest('', 'sha1'), 'hex'); +SELECT encode(digest('a', 'sha1'), 'hex'); +SELECT encode(digest('abc', 'sha1'), 'hex'); +SELECT encode(digest('message digest', 'sha1'), 'hex'); +SELECT encode(digest('abcdefghijklmnopqrstuvwxyz', 'sha1'), 'hex'); +SELECT encode(digest('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 'sha1'), 'hex'); +SELECT encode(digest('12345678901234567890123456789012345678901234567890123456789012345678901234567890', 'sha1'), 'hex'); diff --git a/contrib/pgstattuple/pgstattuple.sql.in b/contrib/pgstattuple/pgstattuple.sql.in index 7ac7b6c11c..5489c93812 100644 --- a/contrib/pgstattuple/pgstattuple.sql.in +++ b/contrib/pgstattuple/pgstattuple.sql.in @@ -1,17 +1,22 @@ +-- Adjust this setting to control where the objects get created. +SET search_path = public; + +SET autocommit TO 'on'; + DROP TYPE pgstattuple_type CASCADE; CREATE TYPE pgstattuple_type AS ( - table_len BIGINT, -- physical table length in bytes - tuple_count BIGINT, -- number of live tuples - tuple_len BIGINT, -- total tuples length in bytes - tuple_percent FLOAT, -- live tuples in % - dead_tuple_count BIGINT, -- number of dead tuples - dead_tuple_len BIGINT, -- total dead tuples length in bytes - dead_tuple_percent FLOAT, -- dead tuples in % - free_space BIGINT, -- free space in bytes - free_percent FLOAT -- free space in % + table_len BIGINT, -- physical table length in bytes + tuple_count BIGINT, -- number of live tuples + tuple_len BIGINT, -- total tuples length in bytes + tuple_percent FLOAT, -- live tuples in % + dead_tuple_count BIGINT, -- number of dead tuples + dead_tuple_len BIGINT, -- total dead tuples length in bytes + dead_tuple_percent FLOAT, -- dead tuples in % + free_space BIGINT, -- free space in bytes + free_percent FLOAT -- free space in % ); -CREATE OR REPLACE FUNCTION pgstattuple(text) RETURNS pgstattuple_type - AS 'MODULE_PATHNAME', 'pgstattuple' - LANGUAGE 'c' WITH (isstrict); -GRANT EXECUTE ON FUNCTION pgstattuple(text) TO PUBLIC; +CREATE OR REPLACE FUNCTION pgstattuple(text) +RETURNS pgstattuple_type +AS 'MODULE_PATHNAME', 'pgstattuple' +LANGUAGE 'C' WITH (isstrict); diff --git a/contrib/reindexdb/reindexdb b/contrib/reindexdb/reindexdb index e9597e5fec..e9bfbbb052 100644 --- a/contrib/reindexdb/reindexdb +++ b/contrib/reindexdb/reindexdb @@ -1,6 +1,6 @@ #!/bin/sh # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # -# Package : reindexdb Version : $Revision: 1.1 $ +# Package : reindexdb Version : $Revision: 1.2 $ # Date : 05/08/2002 Author : Shaun Thomas # Req : psql, sh, perl, sed Type : Utility # @@ -184,11 +184,11 @@ fi # If index was set, reindex that index. if [ "$index" ]; then - $PSQL $PSQLOPT $ECHOOPT -c "REINDEX INDEX $index" -d $dbname + $PSQL $PSQLOPT $ECHOOPT -c "SET autocommit TO 'on';REINDEX INDEX $index" -d $dbname # Ok, no index. Is there a specific table to reindex? elif [ "$table" ]; then - $PSQL $PSQLOPT $ECHOOPT -c "REINDEX TABLE \"$table\"" -d $dbname + $PSQL $PSQLOPT $ECHOOPT -c "SET autocommit TO 'on';REINDEX TABLE \"$table\"" -d $dbname # No specific table, no specific index, either we have a specific database, # or were told to do all databases. Do it! @@ -204,9 +204,9 @@ else # Ok, reindex every table in the database. Use the same method # we used to get a list of databases, and get a list of tables in this # database that we may reindex. - tables=`$PSQL $PSQLOPT -q -t -A -d $db -c "$sql"` + tables=`$PSQL $PSQLOPT -q -t -A -d $db -c "SET autocommit TO 'on';$sql"` for tab in $tables; do - $PSQL $PSQLOPT $ECHOOPT -c "REINDEX TABLE \"$tab\"" -d $db + $PSQL $PSQLOPT $ECHOOPT -c "SET autocommit TO 'on';REINDEX TABLE \"$tab\"" -d $db done done diff --git a/contrib/rtree_gist/bench/bench.pl b/contrib/rtree_gist/bench/bench.pl index e6bc1332cf..e42ec9c63a 100755 --- a/contrib/rtree_gist/bench/bench.pl +++ b/contrib/rtree_gist/bench/bench.pl @@ -25,6 +25,20 @@ EOT $opt{d} ||= 'TEST'; my $dbi=DBI->connect('DBI:Pg:dbname='.$opt{d}) || die "Couldn't connect DB: $opt{d} !\n"; +my $setsql = qq{ + SET search_path = public; +}; + +my $sth = $dbi->prepare($setsql); +$sth->execute(); + +my $setsql2 = qq{ + SET autocommit TO 'on'; +}; + +my $sth2 = $dbi->prepare($setsql2); +$sth2->execute(); + my $sql; my $notice; my $sss = '(3000,3000,2990,2990)'; diff --git a/contrib/rtree_gist/bench/create_test.pl b/contrib/rtree_gist/bench/create_test.pl index 1c06b6863d..cde92da6cd 100755 --- a/contrib/rtree_gist/bench/create_test.pl +++ b/contrib/rtree_gist/bench/create_test.pl @@ -2,11 +2,11 @@ use strict; my $NUM = 20000; -print "drop table boxtmp;\n"; -print "drop table boxtmp2;\n"; +print "DROP TABLE boxtmp;\n"; +print "DROP TABLE boxtmp2;\n"; -print "create table boxtmp (b box);\n"; -print "create table boxtmp2 (b box);\n"; +print "CREATE TABLE boxtmp (b box);\n"; +print "CREATE TABLE boxtmp2 (b box);\n"; srand(1); open(DAT,">bbb.dat") || die; @@ -26,20 +26,20 @@ foreach ( 1..$NUM ) { } close DAT; -print "copy boxtmp from stdin;\n"; +print "COPY boxtmp FROM stdin;\n"; open(DAT,"bbb.dat") || die; while() { print; } close DAT; print "\\.\n"; -print "copy boxtmp2 from stdin;\n"; +print "COPY boxtmp2 FROM stdin;\n"; open(DAT,"bbb.dat") || die; while() { print; } close DAT; print "\\.\n"; -print "create index bix on boxtmp using gist (b gist_box_ops);\n"; -print "create index bix2 on boxtmp2 using rtree (b box_ops);\n"; +print "CREATE INDEX bix ON boxtmp USING gist (b gist_box_ops);\n"; +print "CREATE INDEX bix2 ON boxtmp2 USING rtree (b box_ops);\n"; sub min { diff --git a/contrib/rtree_gist/expected/rtree_gist.out b/contrib/rtree_gist/expected/rtree_gist.out index 74ac7e640d..cf7e8b3efd 100644 --- a/contrib/rtree_gist/expected/rtree_gist.out +++ b/contrib/rtree_gist/expected/rtree_gist.out @@ -3,41 +3,51 @@ -- does not depend on contents of seg.sql. -- \set ECHO none -create table boxtmp (b box); +CREATE TABLE boxtmp (b box); \copy boxtmp from 'data/test_box.data' -select count(*) from boxtmp where b && '(1000,1000,0,0)'::box; +SELECT count(*) +FROM boxtmp +WHERE b && '(1000,1000,0,0)'::box; count ------- 2 (1 row) -create index bix on boxtmp using rtree (b); -select count(*) from boxtmp where b && '(1000,1000,0,0)'::box; +CREATE INDEX bix ON boxtmp USING rtree (b); +SELECT count(*) +FROM boxtmp +WHERE b && '(1000,1000,0,0)'::box; count ------- 2 (1 row) -drop index bix; -create index bix on boxtmp using gist (b); -select count(*) from boxtmp where b && '(1000,1000,0,0)'::box; +DROP INDEX bix; +CREATE INDEX bix ON boxtmp USING gist (b); +SELECT count(*) +FROM boxtmp +WHERE b && '(1000,1000,0,0)'::box; count ------- 2 (1 row) -create table polytmp (p polygon); +CREATE TABLE polytmp (p polygon); \copy polytmp from 'data/test_box.data' -create index pix on polytmp using rtree (p); -select count(*) from polytmp where p && '(1000,1000),(0,0)'::polygon; +CREATE INDEX pix ON polytmp USING rtree (p); +SELECT count(*) +FROM polytmp +WHERE p && '(1000,1000),(0,0)'::polygon; count ------- 2 (1 row) -drop index pix; -create index pix on polytmp using gist (p); -select count(*) from polytmp where p && '(1000,1000),(0,0)'::polygon; +DROP INDEX pix; +CREATE INDEX pix ON polytmp USING gist (p); +SELECT count(*) +FROM polytmp +WHERE p && '(1000,1000),(0,0)'::polygon; count ------- 2 diff --git a/contrib/rtree_gist/rtree_gist.sql.in b/contrib/rtree_gist/rtree_gist.sql.in index b32671227f..f7ad2748bc 100644 --- a/contrib/rtree_gist/rtree_gist.sql.in +++ b/contrib/rtree_gist/rtree_gist.sql.in @@ -1,8 +1,8 @@ -begin transaction; - -- Adjust this setting to control where the objects get created. SET search_path = public; +SET autocommit TO 'on'; + -- -- -- @@ -11,23 +11,45 @@ SET search_path = public; -- -- -- define the GiST support methods -create function gbox_consistent(internal,box,int4) returns bool as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION gbox_consistent(internal,box,int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function gbox_compress(internal) returns internal as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION gbox_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function rtree_decompress(internal) returns internal as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION rtree_decompress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function gbox_penalty(internal,internal,internal) returns internal as 'MODULE_PATHNAME' language 'C' with (isstrict); +CREATE FUNCTION gbox_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); -create function gbox_picksplit(internal, internal) returns internal as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION gbox_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function gbox_union(bytea, internal) returns box as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION gbox_union(bytea, internal) +RETURNS box +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function gbox_same(box, box, internal) returns internal as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION gbox_same(box, box, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -- create the operator class CREATE OPERATOR CLASS gist_box_ops - DEFAULT FOR TYPE box USING gist AS +DEFAULT FOR TYPE box USING gist +AS OPERATOR 1 << , OPERATOR 2 &< , OPERATOR 3 && , @@ -53,21 +75,28 @@ CREATE OPERATOR CLASS gist_box_ops -- -- -- define the GiST support methods -create function gpoly_consistent(internal,polygon,int4) returns bool as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION gpoly_consistent(internal,polygon,int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function gpoly_compress(internal) returns internal as 'MODULE_PATHNAME' language 'C'; +CREATE FUNCTION gpoly_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -- create the operator class CREATE OPERATOR CLASS gist_poly_ops - DEFAULT FOR TYPE polygon USING gist AS - OPERATOR 1 << RECHECK , - OPERATOR 2 &< RECHECK , - OPERATOR 3 && RECHECK , - OPERATOR 4 &> RECHECK , - OPERATOR 5 >> RECHECK , - OPERATOR 6 ~= RECHECK , - OPERATOR 7 ~ RECHECK , - OPERATOR 8 @ RECHECK , +DEFAULT FOR TYPE polygon USING gist +AS + OPERATOR 1 << RECHECK, + OPERATOR 2 &< RECHECK, + OPERATOR 3 && RECHECK, + OPERATOR 4 &> RECHECK, + OPERATOR 5 >> RECHECK, + OPERATOR 6 ~= RECHECK, + OPERATOR 7 ~ RECHECK, + OPERATOR 8 @ RECHECK, FUNCTION 1 gpoly_consistent (internal, polygon, int4), FUNCTION 2 gbox_union (bytea, internal), FUNCTION 3 gpoly_compress (internal), @@ -76,6 +105,3 @@ CREATE OPERATOR CLASS gist_poly_ops FUNCTION 6 gbox_picksplit (internal, internal), FUNCTION 7 gbox_same (box, box, internal), STORAGE box; - - -end transaction; diff --git a/contrib/rtree_gist/sql/rtree_gist.sql b/contrib/rtree_gist/sql/rtree_gist.sql index 7a2a7faf85..161abae1ed 100644 --- a/contrib/rtree_gist/sql/rtree_gist.sql +++ b/contrib/rtree_gist/sql/rtree_gist.sql @@ -3,36 +3,46 @@ -- does not depend on contents of seg.sql. -- \set ECHO none +SET autocommit TO 'on'; \i rtree_gist.sql \set ECHO all -create table boxtmp (b box); +CREATE TABLE boxtmp (b box); \copy boxtmp from 'data/test_box.data' -select count(*) from boxtmp where b && '(1000,1000,0,0)'::box; +SELECT count(*) +FROM boxtmp +WHERE b && '(1000,1000,0,0)'::box; -create index bix on boxtmp using rtree (b); +CREATE INDEX bix ON boxtmp USING rtree (b); -select count(*) from boxtmp where b && '(1000,1000,0,0)'::box; +SELECT count(*) +FROM boxtmp +WHERE b && '(1000,1000,0,0)'::box; -drop index bix; +DROP INDEX bix; -create index bix on boxtmp using gist (b); +CREATE INDEX bix ON boxtmp USING gist (b); -select count(*) from boxtmp where b && '(1000,1000,0,0)'::box; +SELECT count(*) +FROM boxtmp +WHERE b && '(1000,1000,0,0)'::box; -create table polytmp (p polygon); +CREATE TABLE polytmp (p polygon); \copy polytmp from 'data/test_box.data' -create index pix on polytmp using rtree (p); +CREATE INDEX pix ON polytmp USING rtree (p); -select count(*) from polytmp where p && '(1000,1000),(0,0)'::polygon; +SELECT count(*) +FROM polytmp +WHERE p && '(1000,1000),(0,0)'::polygon; -drop index pix; +DROP INDEX pix; -create index pix on polytmp using gist (p); - -select count(*) from polytmp where p && '(1000,1000),(0,0)'::polygon; +CREATE INDEX pix ON polytmp USING gist (p); +SELECT count(*) +FROM polytmp +WHERE p && '(1000,1000),(0,0)'::polygon; diff --git a/contrib/seg/expected/seg.out b/contrib/seg/expected/seg.out index aa79cc799e..d5193734e2 100644 --- a/contrib/seg/expected/seg.out +++ b/contrib/seg/expected/seg.out @@ -6,8 +6,8 @@ -- does not depend on contents of seg.sql. -- \set ECHO none -psql:seg.sql:11: WARNING: ProcedureCreate: type seg is not yet defined -psql:seg.sql:16: WARNING: Argument type "seg" is only a shell +psql:seg.sql:12: WARNING: ProcedureCreate: type seg is not yet defined +psql:seg.sql:17: WARNING: Argument type "seg" is only a shell -- -- testing the input and output functions -- diff --git a/contrib/seg/seg.sql.in b/contrib/seg/seg.sql.in index cbeaa08d13..42e2deec4b 100644 --- a/contrib/seg/seg.sql.in +++ b/contrib/seg/seg.sql.in @@ -1,24 +1,25 @@ -- Create the user-defined type for 1-D floating point intervals (seg) -- -BEGIN TRANSACTION; -- Adjust this setting to control where the objects get created. SET search_path = public; +SET autocommit TO 'on'; + CREATE FUNCTION seg_in(cstring) RETURNS seg AS 'MODULE_PATHNAME' -LANGUAGE 'c'; +LANGUAGE 'C'; CREATE FUNCTION seg_out(seg) RETURNS cstring AS 'MODULE_PATHNAME' -LANGUAGE 'c'; +LANGUAGE 'C'; CREATE TYPE seg ( -internallength = 12, -input = seg_in, -output = seg_out + INTERNALLENGTH = 12, + INPUT = seg_in, + OUTPUT = seg_out ); COMMENT ON TYPE seg IS @@ -30,26 +31,34 @@ COMMENT ON TYPE seg IS -- Left/Right methods -CREATE FUNCTION seg_over_left(seg, seg) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION seg_over_left(seg, seg) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); COMMENT ON FUNCTION seg_over_left(seg, seg) IS 'is over and left of'; -CREATE FUNCTION seg_over_right(seg, seg) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION seg_over_right(seg, seg) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); COMMENT ON FUNCTION seg_over_right(seg, seg) IS 'is over and right of'; -CREATE FUNCTION seg_left(seg, seg) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION seg_left(seg, seg) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); COMMENT ON FUNCTION seg_left(seg, seg) IS 'is left of'; -CREATE FUNCTION seg_right(seg, seg) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION seg_right(seg, seg) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); COMMENT ON FUNCTION seg_right(seg, seg) IS 'is right of'; @@ -57,78 +66,106 @@ COMMENT ON FUNCTION seg_right(seg, seg) IS -- Comparison methods -CREATE FUNCTION seg_lt(seg, seg) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION seg_lt(seg, seg) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); COMMENT ON FUNCTION seg_lt(seg, seg) IS 'less than'; -CREATE FUNCTION seg_le(seg, seg) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION seg_le(seg, seg) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); COMMENT ON FUNCTION seg_le(seg, seg) IS 'less than or equal'; -CREATE FUNCTION seg_gt(seg, seg) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION seg_gt(seg, seg) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); COMMENT ON FUNCTION seg_gt(seg, seg) IS 'greater than'; -CREATE FUNCTION seg_ge(seg, seg) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION seg_ge(seg, seg) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); COMMENT ON FUNCTION seg_ge(seg, seg) IS 'greater than or equal'; -CREATE FUNCTION seg_contains(seg, seg) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION seg_contains(seg, seg) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); COMMENT ON FUNCTION seg_contains(seg, seg) IS 'contains'; -CREATE FUNCTION seg_contained(seg, seg) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION seg_contained(seg, seg) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); COMMENT ON FUNCTION seg_contained(seg, seg) IS 'contained in'; -CREATE FUNCTION seg_overlap(seg, seg) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION seg_overlap(seg, seg) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); COMMENT ON FUNCTION seg_overlap(seg, seg) IS 'overlaps'; -CREATE FUNCTION seg_same(seg, seg) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION seg_same(seg, seg) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); COMMENT ON FUNCTION seg_same(seg, seg) IS 'same as'; -CREATE FUNCTION seg_different(seg, seg) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION seg_different(seg, seg) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); COMMENT ON FUNCTION seg_different(seg, seg) IS 'different'; -- support routines for indexing -CREATE FUNCTION seg_union(seg, seg) RETURNS seg - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION seg_union(seg, seg) +RETURNS seg +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); -CREATE FUNCTION seg_inter(seg, seg) RETURNS seg - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION seg_inter(seg, seg) +RETURNS seg +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); -CREATE FUNCTION seg_size(seg) RETURNS float4 - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION seg_size(seg) +RETURNS float4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); -- miscellaneous -CREATE FUNCTION seg_upper(seg) RETURNS float4 - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION seg_upper(seg) +RETURNS float4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); -CREATE FUNCTION seg_lower(seg) RETURNS float4 - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION seg_lower(seg) +RETURNS float4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); -- @@ -136,112 +173,173 @@ CREATE FUNCTION seg_lower(seg) RETURNS float4 -- CREATE OPERATOR < ( - LEFTARG = seg, RIGHTARG = seg, PROCEDURE = seg_lt, - COMMUTATOR = '>', NEGATOR = '>=', - RESTRICT = scalarltsel, JOIN = scalarltjoinsel + LEFTARG = seg, + RIGHTARG = seg, + PROCEDURE = seg_lt, + COMMUTATOR = '>', + NEGATOR = '>=', + RESTRICT = scalarltsel, + JOIN = scalarltjoinsel ); CREATE OPERATOR <= ( - LEFTARG = seg, RIGHTARG = seg, PROCEDURE = seg_le, - COMMUTATOR = '>=', NEGATOR = '>', - RESTRICT = scalarltsel, JOIN = scalarltjoinsel + LEFTARG = seg, + RIGHTARG = seg, + PROCEDURE = seg_le, + COMMUTATOR = '>=', + NEGATOR = '>', + RESTRICT = scalarltsel, + JOIN = scalarltjoinsel ); CREATE OPERATOR > ( - LEFTARG = seg, RIGHTARG = seg, PROCEDURE = seg_gt, - COMMUTATOR = '<', NEGATOR = '<=', - RESTRICT = scalargtsel, JOIN = scalargtjoinsel + LEFTARG = seg, + RIGHTARG = seg, + PROCEDURE = seg_gt, + COMMUTATOR = '<', + NEGATOR = '<=', + RESTRICT = scalargtsel, + JOIN = scalargtjoinsel ); CREATE OPERATOR >= ( - LEFTARG = seg, RIGHTARG = seg, PROCEDURE = seg_ge, - COMMUTATOR = '<=', NEGATOR = '<', - RESTRICT = scalargtsel, JOIN = scalargtjoinsel + LEFTARG = seg, + RIGHTARG = seg, + PROCEDURE = seg_ge, + COMMUTATOR = '<=', + NEGATOR = '<', + RESTRICT = scalargtsel, + JOIN = scalargtjoinsel ); CREATE OPERATOR << ( - LEFTARG = seg, RIGHTARG = seg, PROCEDURE = seg_left, - COMMUTATOR = '>>', - RESTRICT = positionsel, JOIN = positionjoinsel + LEFTARG = seg, + RIGHTARG = seg, + PROCEDURE = seg_left, + COMMUTATOR = '>>', + RESTRICT = positionsel, + JOIN = positionjoinsel ); CREATE OPERATOR &< ( - LEFTARG = seg, RIGHTARG = seg, PROCEDURE = seg_over_left, - COMMUTATOR = '&>', - RESTRICT = positionsel, JOIN = positionjoinsel + LEFTARG = seg, + RIGHTARG = seg, + PROCEDURE = seg_over_left, + COMMUTATOR = '&>', + RESTRICT = positionsel, + JOIN = positionjoinsel ); CREATE OPERATOR && ( - LEFTARG = seg, RIGHTARG = seg, PROCEDURE = seg_overlap, - COMMUTATOR = '&&', - RESTRICT = positionsel, JOIN = positionjoinsel + LEFTARG = seg, + RIGHTARG = seg, + PROCEDURE = seg_overlap, + COMMUTATOR = '&&', + RESTRICT = positionsel, + JOIN = positionjoinsel ); CREATE OPERATOR &> ( - LEFTARG = seg, RIGHTARG = seg, PROCEDURE = seg_over_right, - COMMUTATOR = '&<', - RESTRICT = positionsel, JOIN = positionjoinsel + LEFTARG = seg, + RIGHTARG = seg, + PROCEDURE = seg_over_right, + COMMUTATOR = '&<', + RESTRICT = positionsel, + JOIN = positionjoinsel ); CREATE OPERATOR >> ( - LEFTARG = seg, RIGHTARG = seg, PROCEDURE = seg_right, - COMMUTATOR = '<<', - RESTRICT = positionsel, JOIN = positionjoinsel + LEFTARG = seg, + RIGHTARG = seg, + PROCEDURE = seg_right, + COMMUTATOR = '<<', + RESTRICT = positionsel, + JOIN = positionjoinsel ); CREATE OPERATOR = ( - LEFTARG = seg, RIGHTARG = seg, PROCEDURE = seg_same, - COMMUTATOR = '=', NEGATOR = '<>', - RESTRICT = eqsel, JOIN = eqjoinsel, - SORT1 = '<', SORT2 = '<' + LEFTARG = seg, + RIGHTARG = seg, + PROCEDURE = seg_same, + COMMUTATOR = '=', + NEGATOR = '<>', + RESTRICT = eqsel, + JOIN = eqjoinsel, + SORT1 = '<', + SORT2 = '<' ); CREATE OPERATOR <> ( - LEFTARG = seg, RIGHTARG = seg, PROCEDURE = seg_different, - COMMUTATOR = '<>', NEGATOR = '=', - RESTRICT = neqsel, JOIN = neqjoinsel + LEFTARG = seg, + RIGHTARG = seg, + PROCEDURE = seg_different, + COMMUTATOR = '<>', + NEGATOR = '=', + RESTRICT = neqsel, + JOIN = neqjoinsel ); CREATE OPERATOR @ ( - LEFTARG = seg, RIGHTARG = seg, PROCEDURE = seg_contains, - COMMUTATOR = '~', - RESTRICT = contsel, JOIN = contjoinsel + LEFTARG = seg, + RIGHTARG = seg, + PROCEDURE = seg_contains, + COMMUTATOR = '~', + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ~ ( - LEFTARG = seg, RIGHTARG = seg, PROCEDURE = seg_contained, - COMMUTATOR = '@', - RESTRICT = contsel, JOIN = contjoinsel + LEFTARG = seg, + RIGHTARG = seg, + PROCEDURE = seg_contained, + COMMUTATOR = '@', + RESTRICT = contsel, + JOIN = contjoinsel ); -- define the GiST support methods -CREATE FUNCTION gseg_consistent(internal,seg,int4) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION gseg_consistent(internal,seg,int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -CREATE FUNCTION gseg_compress(internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION gseg_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -CREATE FUNCTION gseg_decompress(internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION gseg_decompress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -CREATE FUNCTION gseg_penalty(internal,internal,internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION gseg_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); -CREATE FUNCTION gseg_picksplit(internal, internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION gseg_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -CREATE FUNCTION gseg_union(bytea, internal) RETURNS seg - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION gseg_union(bytea, internal) +RETURNS seg +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -CREATE FUNCTION gseg_same(seg, seg, internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION gseg_same(seg, seg, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -- Create the operator class for indexing CREATE OPERATOR CLASS gist_seg_ops - DEFAULT FOR TYPE seg USING gist AS +DEFAULT FOR TYPE seg USING gist +AS OPERATOR 1 << , OPERATOR 2 &< , OPERATOR 3 && , @@ -257,6 +355,3 @@ CREATE OPERATOR CLASS gist_seg_ops FUNCTION 5 gseg_penalty (internal, internal, internal), FUNCTION 6 gseg_picksplit (internal, internal), FUNCTION 7 gseg_same (seg, seg, internal); - - -END TRANSACTION; diff --git a/contrib/seg/sql/seg.sql b/contrib/seg/sql/seg.sql index 95394c95d0..6614ead0c5 100644 --- a/contrib/seg/sql/seg.sql +++ b/contrib/seg/sql/seg.sql @@ -7,6 +7,7 @@ -- does not depend on contents of seg.sql. -- \set ECHO none +SET autocommit TO 'on'; \i seg.sql \set ECHO all diff --git a/contrib/spi/autoinc.sql.in b/contrib/spi/autoinc.sql.in index 172fdd74b2..cec50b6189 100644 --- a/contrib/spi/autoinc.sql.in +++ b/contrib/spi/autoinc.sql.in @@ -1,6 +1,9 @@ -DROP FUNCTION autoinc(); +-- Adjust this setting to control where the objects get created. +SET search_path = public; -CREATE FUNCTION autoinc() - RETURNS trigger - AS 'MODULE_PATHNAME' - LANGUAGE 'C'; +SET autocommit TO 'on'; + +CREATE OR REPLACE FUNCTION autoinc() +RETURNS trigger +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; diff --git a/contrib/spi/insert_username.sql.in b/contrib/spi/insert_username.sql.in index b7689a4321..c8c6766579 100644 --- a/contrib/spi/insert_username.sql.in +++ b/contrib/spi/insert_username.sql.in @@ -1,6 +1,9 @@ -DROP FUNCTION insert_username(); +-- Adjust this setting to control where the objects get created. +SET search_path = public; -CREATE FUNCTION insert_username() - RETURNS trigger - AS 'MODULE_PATHNAME' - LANGUAGE 'C'; +SET autocommit TO 'on'; + +CREATE OR REPLACE FUNCTION insert_username() +RETURNS trigger +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; diff --git a/contrib/spi/moddatetime.sql.in b/contrib/spi/moddatetime.sql.in index 07208787a6..e89c37e6d5 100644 --- a/contrib/spi/moddatetime.sql.in +++ b/contrib/spi/moddatetime.sql.in @@ -1,6 +1,9 @@ -DROP FUNCTION moddatetime(); +-- Adjust this setting to control where the objects get created. +SET search_path = public; -CREATE FUNCTION moddatetime() - RETURNS trigger - AS 'MODULE_PATHNAME' - LANGUAGE 'C'; +SET autocommit TO 'on'; + +CREATE OR REPLACE FUNCTION moddatetime() +RETURNS trigger +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; diff --git a/contrib/spi/refint.sql.in b/contrib/spi/refint.sql.in index 688d2abd44..322de9521e 100644 --- a/contrib/spi/refint.sql.in +++ b/contrib/spi/refint.sql.in @@ -1,12 +1,14 @@ -DROP FUNCTION check_primary_key (); -DROP FUNCTION check_foreign_key (); +-- Adjust this setting to control where the objects get created. +SET search_path = public; -CREATE FUNCTION check_primary_key () - RETURNS trigger - AS 'MODULE_PATHNAME' - LANGUAGE 'C'; +SET autocommit TO 'on'; -CREATE FUNCTION check_foreign_key () - RETURNS trigger - AS 'MODULE_PATHNAME' - LANGUAGE 'C'; +CREATE OR REPLACE FUNCTION check_primary_key() +RETURNS trigger +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; + +CREATE OR REPLACE FUNCTION check_foreign_key() +RETURNS trigger +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; diff --git a/contrib/spi/timetravel.sql.in b/contrib/spi/timetravel.sql.in index f519b93de1..b297a23ec2 100644 --- a/contrib/spi/timetravel.sql.in +++ b/contrib/spi/timetravel.sql.in @@ -1,12 +1,14 @@ -DROP FUNCTION timetravel(); -DROP FUNCTION set_timetravel(name, int4); +-- Adjust this setting to control where the objects get created. +SET search_path = public; -CREATE FUNCTION timetravel() - RETURNS trigger - AS 'MODULE_PATHNAME' - LANGUAGE 'C'; +SET autocommit TO 'on'; -CREATE FUNCTION set_timetravel(name, int4) - RETURNS int4 - AS 'MODULE_PATHNAME' - LANGUAGE 'C' WITH (isStrict); +CREATE OR REPLACE FUNCTION timetravel() +RETURNS trigger +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; + +CREATE OR REPLACE FUNCTION set_timetravel(name, int4) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C' WITH (isStrict); diff --git a/contrib/string/string_io.sql.in b/contrib/string/string_io.sql.in index 8718b812bb..392cda2ee7 100644 --- a/contrib/string/string_io.sql.in +++ b/contrib/string/string_io.sql.in @@ -9,71 +9,76 @@ -- Define the new output functions. -- -create function c_charout(bpchar) returns cstring - as 'MODULE_PATHNAME' - language 'c'; +CREATE FUNCTION c_charout(bpchar) +RETURNS cstring +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function c_textout(text) returns cstring - as 'MODULE_PATHNAME' - language 'c'; +CREATE FUNCTION c_textout(text) +RETURNS cstring +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -create function c_varcharout(varchar) returns cstring - as 'MODULE_PATHNAME' - language 'c'; +CREATE FUNCTION c_varcharout(varchar) +RETURNS cstring +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -- This is not needed because escapes are handled by the parser -- --- create function c_textin(cstring) --- returns text --- as 'MODULE_PATHNAME' --- language 'c'; +-- CREATE FUNCTION c_textin(cstring) +-- RETURNS text +-- AS 'MODULE_PATHNAME' +-- LANGUAGE 'c'; -- Define a function which sets the new output routines for char types. -- --- select c_mode(); +-- SELECT c_mode(); -- -create function c_mode() returns text - as 'update pg_type set typoutput=''c_textout'' where typname=''SET''; - update pg_type set typoutput=''c_varcharout'' where typname=''bpchar''; - update pg_type set typoutput=''c_textout'' where typname=''bytea''; - update pg_type set typoutput=''c_charout'' where typname=''char''; - update pg_type set typoutput=''c_textout'' where typname=''text''; - update pg_type set typoutput=''c_textout'' where typname=''unknown''; - update pg_type set typoutput=''c_varcharout'' where typname=''varchar''; +CREATE FUNCTION c_mode() +RETURNS text +AS ' UPDATE pg_type SET typoutput=''c_textout'' WHERE typname=''SET''; + UPDATE pg_type SET typoutput=''c_varcharout'' WHERE typname=''bpchar''; + UPDATE pg_type SET typoutput=''c_textout'' WHERE typname=''bytea''; + UPDATE pg_type SET typoutput=''c_charout'' WHERE typname=''char''; + UPDATE pg_type SET typoutput=''c_textout'' WHERE typname=''text''; + UPDATE pg_type SET typoutput=''c_textout'' WHERE typname=''unknown''; + UPDATE pg_type SET typoutput=''c_varcharout'' WHERE typname=''varchar''; select ''c_mode''::text;' - language 'sql'; +LANGUAGE 'SQL'; -- Define a function which restores the standard routines for char types. -- --- select pg_mode(); +-- SELECT pg_mode(); -- -create function pg_mode() returns text - as 'update pg_type set typoutput=''textout'' where typname=''SET''; - update pg_type set typoutput=''varcharout'' where typname=''bpchar''; - update pg_type set typoutput=''textout'' where typname=''bytea''; - update pg_type set typoutput=''charout'' where typname=''char''; - update pg_type set typoutput=''textout'' where typname=''text''; - update pg_type set typoutput=''textout'' where typname=''unknown''; - update pg_type set typoutput=''varcharout'' where typname=''varchar''; +CREATE FUNCTION pg_mode() +RETURNS text +AS ' UPDATE pg_type SET typoutput=''textout'' WHERE typname=''SET''; + UPDATE pg_type SET typoutput=''varcharout'' WHERE typname=''bpchar''; + UPDATE pg_type SET typoutput=''textout'' WHERE typname=''bytea''; + UPDATE pg_type SET typoutput=''charout'' WHERE typname=''char''; + UPDATE pg_type SET typoutput=''textout'' WHERE typname=''text''; + UPDATE pg_type SET typoutput=''textout'' WHERE typname=''unknown''; + UPDATE pg_type SET typoutput=''varcharout'' WHERE typname=''varchar''; select ''pg_mode''::text;' - language 'sql'; +LANGUAGE 'SQL'; -- Use these to do the changes manually. -- --- update pg_type set typoutput='textout' where typname='SET'; --- update pg_type set typoutput='varcharout' where typname='bpchar'; --- update pg_type set typoutput='textout' where typname='bytea'; --- update pg_type set typoutput='charout' where typname='char'; --- update pg_type set typoutput='textout' where typname='text'; --- update pg_type set typoutput='textout' where typname='unknown'; --- update pg_type set typoutput='varcharout' where typname='varchar'; +-- UPDATE pg_type SET typoutput='textout' WHERE typname='SET'; +-- UPDATE pg_type SET typoutput='varcharout' WHERE typname='bpchar'; +-- UPDATE pg_type SET typoutput='textout' WHERE typname='bytea'; +-- UPDATE pg_type SET typoutput='charout' WHERE typname='char'; +-- UPDATE pg_type SET typoutput='textout' WHERE typname='text'; +-- UPDATE pg_type SET typoutput='textout' WHERE typname='unknown'; +-- UPDATE pg_type SET typoutput='varcharout' WHERE typname='varchar'; -- --- update pg_type set typoutput='c_textout' where typname='SET'; --- update pg_type set typoutput='c_varcharout' where typname='bpchar'; --- update pg_type set typoutput='c_textout' where typname='bytea'; --- update pg_type set typoutput='c_charout' where typname='char'; --- update pg_type set typoutput='c_textout' where typname='text'; --- update pg_type set typoutput='c_textout' where typname='unknown'; --- update pg_type set typoutput='c_varcharout' where typname='varchar'; +-- UPDATE pg_type SET typoutput='c_textout' WHERE typname='SET'; +-- UPDATE pg_type SET typoutput='c_varcharout' WHERE typname='bpchar'; +-- UPDATE pg_type SET typoutput='c_textout' WHERE typname='bytea'; +-- UPDATE pg_type SET typoutput='c_charout' WHERE typname='char'; +-- UPDATE pg_type SET typoutput='c_textout' WHERE typname='text'; +-- UPDATE pg_type SET typoutput='c_textout' WHERE typname='unknown'; +-- UPDATE pg_type SET typoutput='c_varcharout' WHERE typname='varchar'; -- end of file diff --git a/contrib/tablefunc/expected/tablefunc.out b/contrib/tablefunc/expected/tablefunc.out index 9b04bfa4f5..8afcdebdf7 100644 --- a/contrib/tablefunc/expected/tablefunc.out +++ b/contrib/tablefunc/expected/tablefunc.out @@ -16,107 +16,107 @@ SELECT avg(normal_rand)::int FROM normal_rand(100, 250, 0.2, EXTRACT(SECONDS FRO -- -- crosstab() -- -create table ct(id int, rowclass text, rowid text, attribute text, value text); +CREATE TABLE ct(id int, rowclass text, rowid text, attribute text, value text); \copy ct from 'data/ct.data' -select * from crosstab2('select rowid, attribute, value from ct where rowclass = ''group1'' and (attribute = ''att2'' or attribute = ''att3'') order by 1,2;'); +SELECT * FROM crosstab2('SELECT rowid, attribute, value FROM ct where rowclass = ''group1'' and (attribute = ''att2'' or attribute = ''att3'') ORDER BY 1,2;'); row_name | category_1 | category_2 ----------+------------+------------ test1 | val2 | val3 test2 | val6 | val7 (2 rows) -select * from crosstab3('select rowid, attribute, value from ct where rowclass = ''group1'' and (attribute = ''att2'' or attribute = ''att3'') order by 1,2;'); +SELECT * FROM crosstab3('SELECT rowid, attribute, value FROM ct where rowclass = ''group1'' and (attribute = ''att2'' or attribute = ''att3'') ORDER BY 1,2;'); row_name | category_1 | category_2 | category_3 ----------+------------+------------+------------ test1 | val2 | val3 | test2 | val6 | val7 | (2 rows) -select * from crosstab4('select rowid, attribute, value from ct where rowclass = ''group1'' and (attribute = ''att2'' or attribute = ''att3'') order by 1,2;'); +SELECT * FROM crosstab4('SELECT rowid, attribute, value FROM ct where rowclass = ''group1'' and (attribute = ''att2'' or attribute = ''att3'') ORDER BY 1,2;'); row_name | category_1 | category_2 | category_3 | category_4 ----------+------------+------------+------------+------------ test1 | val2 | val3 | | test2 | val6 | val7 | | (2 rows) -select * from crosstab2('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;'); +SELECT * FROM crosstab2('SELECT rowid, attribute, value FROM ct where rowclass = ''group1'' ORDER BY 1,2;'); row_name | category_1 | category_2 ----------+------------+------------ test1 | val1 | val2 test2 | val5 | val6 (2 rows) -select * from crosstab3('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;'); +SELECT * FROM crosstab3('SELECT rowid, attribute, value FROM ct where rowclass = ''group1'' ORDER BY 1,2;'); row_name | category_1 | category_2 | category_3 ----------+------------+------------+------------ test1 | val1 | val2 | val3 test2 | val5 | val6 | val7 (2 rows) -select * from crosstab4('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;'); +SELECT * FROM crosstab4('SELECT rowid, attribute, value FROM ct where rowclass = ''group1'' ORDER BY 1,2;'); row_name | category_1 | category_2 | category_3 | category_4 ----------+------------+------------+------------+------------ test1 | val1 | val2 | val3 | val4 test2 | val5 | val6 | val7 | val8 (2 rows) -select * from crosstab2('select rowid, attribute, value from ct where rowclass = ''group2'' and (attribute = ''att1'' or attribute = ''att2'') order by 1,2;'); +SELECT * FROM crosstab2('SELECT rowid, attribute, value FROM ct where rowclass = ''group2'' and (attribute = ''att1'' or attribute = ''att2'') ORDER BY 1,2;'); row_name | category_1 | category_2 ----------+------------+------------ test3 | val1 | val2 test4 | val4 | val5 (2 rows) -select * from crosstab3('select rowid, attribute, value from ct where rowclass = ''group2'' and (attribute = ''att1'' or attribute = ''att2'') order by 1,2;'); +SELECT * FROM crosstab3('SELECT rowid, attribute, value FROM ct where rowclass = ''group2'' and (attribute = ''att1'' or attribute = ''att2'') ORDER BY 1,2;'); row_name | category_1 | category_2 | category_3 ----------+------------+------------+------------ test3 | val1 | val2 | test4 | val4 | val5 | (2 rows) -select * from crosstab4('select rowid, attribute, value from ct where rowclass = ''group2'' and (attribute = ''att1'' or attribute = ''att2'') order by 1,2;'); +SELECT * FROM crosstab4('SELECT rowid, attribute, value FROM ct where rowclass = ''group2'' and (attribute = ''att1'' or attribute = ''att2'') ORDER BY 1,2;'); row_name | category_1 | category_2 | category_3 | category_4 ----------+------------+------------+------------+------------ test3 | val1 | val2 | | test4 | val4 | val5 | | (2 rows) -select * from crosstab2('select rowid, attribute, value from ct where rowclass = ''group2'' order by 1,2;'); +SELECT * FROM crosstab2('SELECT rowid, attribute, value FROM ct where rowclass = ''group2'' ORDER BY 1,2;'); row_name | category_1 | category_2 ----------+------------+------------ test3 | val1 | val2 test4 | val4 | val5 (2 rows) -select * from crosstab3('select rowid, attribute, value from ct where rowclass = ''group2'' order by 1,2;'); +SELECT * FROM crosstab3('SELECT rowid, attribute, value FROM ct where rowclass = ''group2'' ORDER BY 1,2;'); row_name | category_1 | category_2 | category_3 ----------+------------+------------+------------ test3 | val1 | val2 | val3 test4 | val4 | val5 | val6 (2 rows) -select * from crosstab4('select rowid, attribute, value from ct where rowclass = ''group2'' order by 1,2;'); +SELECT * FROM crosstab4('SELECT rowid, attribute, value FROM ct where rowclass = ''group2'' ORDER BY 1,2;'); row_name | category_1 | category_2 | category_3 | category_4 ----------+------------+------------+------------+------------ test3 | val1 | val2 | val3 | test4 | val4 | val5 | val6 | (2 rows) -select * from crosstab('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;', 2) as c(rowid text, att1 text, att2 text); +SELECT * FROM crosstab('SELECT rowid, attribute, value FROM ct where rowclass = ''group1'' ORDER BY 1,2;', 2) AS c(rowid text, att1 text, att2 text); rowid | att1 | att2 -------+------+------ test1 | val1 | val2 test2 | val5 | val6 (2 rows) -select * from crosstab('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;', 3) as c(rowid text, att1 text, att2 text, att3 text); +SELECT * FROM crosstab('SELECT rowid, attribute, value FROM ct where rowclass = ''group1'' ORDER BY 1,2;', 3) AS c(rowid text, att1 text, att2 text, att3 text); rowid | att1 | att2 | att3 -------+------+------+------ test1 | val1 | val2 | val3 test2 | val5 | val6 | val7 (2 rows) -select * from crosstab('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;', 4) as c(rowid text, att1 text, att2 text, att3 text, att4 text); +SELECT * FROM crosstab('SELECT rowid, attribute, value FROM ct where rowclass = ''group1'' ORDER BY 1,2;', 4) AS c(rowid text, att1 text, att2 text, att3 text, att4 text); rowid | att1 | att2 | att3 | att4 -------+------+------+------+------ test1 | val1 | val2 | val3 | val4 diff --git a/contrib/tablefunc/sql/tablefunc.sql b/contrib/tablefunc/sql/tablefunc.sql index a450670d50..4c1da06687 100644 --- a/contrib/tablefunc/sql/tablefunc.sql +++ b/contrib/tablefunc/sql/tablefunc.sql @@ -3,6 +3,7 @@ -- does not depend on contents of tablefunc.sql. -- \set ECHO none +SET autocommit TO 'on'; \i tablefunc.sql \set ECHO all @@ -15,28 +16,28 @@ SELECT avg(normal_rand)::int FROM normal_rand(100, 250, 0.2, EXTRACT(SECONDS FRO -- -- crosstab() -- -create table ct(id int, rowclass text, rowid text, attribute text, value text); +CREATE TABLE ct(id int, rowclass text, rowid text, attribute text, value text); \copy ct from 'data/ct.data' -select * from crosstab2('select rowid, attribute, value from ct where rowclass = ''group1'' and (attribute = ''att2'' or attribute = ''att3'') order by 1,2;'); -select * from crosstab3('select rowid, attribute, value from ct where rowclass = ''group1'' and (attribute = ''att2'' or attribute = ''att3'') order by 1,2;'); -select * from crosstab4('select rowid, attribute, value from ct where rowclass = ''group1'' and (attribute = ''att2'' or attribute = ''att3'') order by 1,2;'); +SELECT * FROM crosstab2('SELECT rowid, attribute, value FROM ct where rowclass = ''group1'' and (attribute = ''att2'' or attribute = ''att3'') ORDER BY 1,2;'); +SELECT * FROM crosstab3('SELECT rowid, attribute, value FROM ct where rowclass = ''group1'' and (attribute = ''att2'' or attribute = ''att3'') ORDER BY 1,2;'); +SELECT * FROM crosstab4('SELECT rowid, attribute, value FROM ct where rowclass = ''group1'' and (attribute = ''att2'' or attribute = ''att3'') ORDER BY 1,2;'); -select * from crosstab2('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;'); -select * from crosstab3('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;'); -select * from crosstab4('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;'); +SELECT * FROM crosstab2('SELECT rowid, attribute, value FROM ct where rowclass = ''group1'' ORDER BY 1,2;'); +SELECT * FROM crosstab3('SELECT rowid, attribute, value FROM ct where rowclass = ''group1'' ORDER BY 1,2;'); +SELECT * FROM crosstab4('SELECT rowid, attribute, value FROM ct where rowclass = ''group1'' ORDER BY 1,2;'); -select * from crosstab2('select rowid, attribute, value from ct where rowclass = ''group2'' and (attribute = ''att1'' or attribute = ''att2'') order by 1,2;'); -select * from crosstab3('select rowid, attribute, value from ct where rowclass = ''group2'' and (attribute = ''att1'' or attribute = ''att2'') order by 1,2;'); -select * from crosstab4('select rowid, attribute, value from ct where rowclass = ''group2'' and (attribute = ''att1'' or attribute = ''att2'') order by 1,2;'); +SELECT * FROM crosstab2('SELECT rowid, attribute, value FROM ct where rowclass = ''group2'' and (attribute = ''att1'' or attribute = ''att2'') ORDER BY 1,2;'); +SELECT * FROM crosstab3('SELECT rowid, attribute, value FROM ct where rowclass = ''group2'' and (attribute = ''att1'' or attribute = ''att2'') ORDER BY 1,2;'); +SELECT * FROM crosstab4('SELECT rowid, attribute, value FROM ct where rowclass = ''group2'' and (attribute = ''att1'' or attribute = ''att2'') ORDER BY 1,2;'); -select * from crosstab2('select rowid, attribute, value from ct where rowclass = ''group2'' order by 1,2;'); -select * from crosstab3('select rowid, attribute, value from ct where rowclass = ''group2'' order by 1,2;'); -select * from crosstab4('select rowid, attribute, value from ct where rowclass = ''group2'' order by 1,2;'); +SELECT * FROM crosstab2('SELECT rowid, attribute, value FROM ct where rowclass = ''group2'' ORDER BY 1,2;'); +SELECT * FROM crosstab3('SELECT rowid, attribute, value FROM ct where rowclass = ''group2'' ORDER BY 1,2;'); +SELECT * FROM crosstab4('SELECT rowid, attribute, value FROM ct where rowclass = ''group2'' ORDER BY 1,2;'); -select * from crosstab('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;', 2) as c(rowid text, att1 text, att2 text); -select * from crosstab('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;', 3) as c(rowid text, att1 text, att2 text, att3 text); -select * from crosstab('select rowid, attribute, value from ct where rowclass = ''group1'' order by 1,2;', 4) as c(rowid text, att1 text, att2 text, att3 text, att4 text); +SELECT * FROM crosstab('SELECT rowid, attribute, value FROM ct where rowclass = ''group1'' ORDER BY 1,2;', 2) AS c(rowid text, att1 text, att2 text); +SELECT * FROM crosstab('SELECT rowid, attribute, value FROM ct where rowclass = ''group1'' ORDER BY 1,2;', 3) AS c(rowid text, att1 text, att2 text, att3 text); +SELECT * FROM crosstab('SELECT rowid, attribute, value FROM ct where rowclass = ''group1'' ORDER BY 1,2;', 4) AS c(rowid text, att1 text, att2 text, att3 text, att4 text); -- test connectby with text based hierarchy CREATE TABLE connectby_text(keyid text, parent_keyid text); diff --git a/contrib/tablefunc/tablefunc.sql.in b/contrib/tablefunc/tablefunc.sql.in index 504d8ee014..3f98354a91 100644 --- a/contrib/tablefunc/tablefunc.sql.in +++ b/contrib/tablefunc/tablefunc.sql.in @@ -1,59 +1,63 @@ +-- Adjust this setting to control where the objects get created. +SET search_path = public; + +SET autocommit TO 'on'; + CREATE OR REPLACE FUNCTION normal_rand(int4, float8, float8, int4) - RETURNS setof float8 - AS 'MODULE_PATHNAME','normal_rand' LANGUAGE 'c' VOLATILE STRICT; +RETURNS setof float8 +AS 'MODULE_PATHNAME','normal_rand' +LANGUAGE 'C' VOLATILE STRICT; CREATE TYPE tablefunc_crosstab_2 AS ( - row_name TEXT, - category_1 TEXT, - category_2 TEXT + row_name TEXT, + category_1 TEXT, + category_2 TEXT ); CREATE TYPE tablefunc_crosstab_3 AS ( - row_name TEXT, - category_1 TEXT, - category_2 TEXT, - category_3 TEXT + row_name TEXT, + category_1 TEXT, + category_2 TEXT, + category_3 TEXT ); CREATE TYPE tablefunc_crosstab_4 AS ( - row_name TEXT, - category_1 TEXT, - category_2 TEXT, - category_3 TEXT, - category_4 TEXT + row_name TEXT, + category_1 TEXT, + category_2 TEXT, + category_3 TEXT, + category_4 TEXT ); CREATE OR REPLACE FUNCTION crosstab2(text) - RETURNS setof tablefunc_crosstab_2 - AS 'MODULE_PATHNAME','crosstab' LANGUAGE 'c' STABLE STRICT; +RETURNS setof tablefunc_crosstab_2 +AS 'MODULE_PATHNAME','crosstab' +LANGUAGE 'C' STABLE STRICT; CREATE OR REPLACE FUNCTION crosstab3(text) - RETURNS setof tablefunc_crosstab_3 - AS 'MODULE_PATHNAME','crosstab' LANGUAGE 'c' STABLE STRICT; +RETURNS setof tablefunc_crosstab_3 +AS 'MODULE_PATHNAME','crosstab' +LANGUAGE 'C' STABLE STRICT; CREATE OR REPLACE FUNCTION crosstab4(text) - RETURNS setof tablefunc_crosstab_4 - AS 'MODULE_PATHNAME','crosstab' LANGUAGE 'c' STABLE STRICT; +RETURNS setof tablefunc_crosstab_4 +AS 'MODULE_PATHNAME','crosstab' +LANGUAGE 'C' STABLE STRICT; CREATE OR REPLACE FUNCTION crosstab(text,int) - RETURNS setof record - AS 'MODULE_PATHNAME','crosstab' LANGUAGE 'c' STABLE STRICT; +RETURNS setof record +AS 'MODULE_PATHNAME','crosstab' +LANGUAGE 'C' STABLE STRICT; CREATE OR REPLACE FUNCTION connectby(text,text,text,text,int,text) - RETURNS setof record - AS 'MODULE_PATHNAME','connectby_text' LANGUAGE 'c' STABLE STRICT; +RETURNS setof record +AS 'MODULE_PATHNAME','connectby_text' +LANGUAGE 'C' STABLE STRICT; CREATE OR REPLACE FUNCTION connectby(text,text,text,text,int) - RETURNS setof record - AS 'MODULE_PATHNAME','connectby_text' LANGUAGE 'c' STABLE STRICT; - -GRANT EXECUTE ON FUNCTION normal_rand(int4, float8, float8, int4) TO PUBLIC; -GRANT EXECUTE ON FUNCTION crosstab2(text) TO PUBLIC; -GRANT EXECUTE ON FUNCTION crosstab3(text) TO PUBLIC; -GRANT EXECUTE ON FUNCTION crosstab4(text) TO PUBLIC; -GRANT EXECUTE ON FUNCTION crosstab(text,int) TO PUBLIC; -GRANT EXECUTE ON FUNCTION connectby(text,text,text,text,int,text) TO PUBLIC; -GRANT EXECUTE ON FUNCTION connectby(text,text,text,text,int) TO PUBLIC; +RETURNS setof record +AS 'MODULE_PATHNAME','connectby_text' +LANGUAGE 'C' STABLE STRICT; diff --git a/contrib/tsearch/expected/tsearch.out b/contrib/tsearch/expected/tsearch.out index 85aa978655..0c8831189f 100644 --- a/contrib/tsearch/expected/tsearch.out +++ b/contrib/tsearch/expected/tsearch.out @@ -9,539 +9,539 @@ psql:tsearch.sql:40: WARNING: ProcedureCreate: type query_txt is not yet define psql:tsearch.sql:45: WARNING: Argument type "query_txt" is only a shell psql:tsearch.sql:57: WARNING: ProcedureCreate: type mquery_txt is not yet defined psql:tsearch.sql:63: WARNING: Argument type "mquery_txt" is only a shell -psql:tsearch.sql:133: WARNING: ProcedureCreate: type gtxtidx is not yet defined -psql:tsearch.sql:138: WARNING: Argument type "gtxtidx" is only a shell +psql:tsearch.sql:158: WARNING: ProcedureCreate: type gtxtidx is not yet defined +psql:tsearch.sql:163: WARNING: Argument type "gtxtidx" is only a shell --txtidx -select '1'::txtidx; +SELECT '1'::txtidx; txtidx -------- '1' (1 row) -select '1 '::txtidx; +SELECT '1 '::txtidx; txtidx -------- '1' (1 row) -select ' 1'::txtidx; +SELECT ' 1'::txtidx; txtidx -------- '1' (1 row) -select ' 1 '::txtidx; +SELECT ' 1 '::txtidx; txtidx -------- '1' (1 row) -select '1 2'::txtidx; +SELECT '1 2'::txtidx; txtidx --------- '1' '2' (1 row) -select '\'1 2\''::txtidx; +SELECT '\'1 2\''::txtidx; txtidx -------- '1 2' (1 row) -select '\'1 \\\'2\''::txtidx; +SELECT '\'1 \\\'2\''::txtidx; txtidx --------- '1 \'2' (1 row) -select '\'1 \\\'2\'3'::txtidx; +SELECT '\'1 \\\'2\'3'::txtidx; txtidx ------------- '3' '1 \'2' (1 row) -select '\'1 \\\'2\' 3'::txtidx; +SELECT '\'1 \\\'2\' 3'::txtidx; txtidx ------------- '3' '1 \'2' (1 row) -select '\'1 \\\'2\' \' 3\' 4 '::txtidx; +SELECT '\'1 \\\'2\' \' 3\' 4 '::txtidx; txtidx ------------------ '4' ' 3' '1 \'2' (1 row) --query_txt -select '1'::query_txt; +SELECT '1'::query_txt; query_txt ----------- '1' (1 row) -select '1 '::query_txt; +SELECT '1 '::query_txt; query_txt ----------- '1' (1 row) -select ' 1'::query_txt; +SELECT ' 1'::query_txt; query_txt ----------- '1' (1 row) -select ' 1 '::query_txt; +SELECT ' 1 '::query_txt; query_txt ----------- '1' (1 row) -select '\'1 2\''::query_txt; +SELECT '\'1 2\''::query_txt; query_txt ----------- '1 2' (1 row) -select '\'1 \\\'2\''::query_txt; +SELECT '\'1 \\\'2\''::query_txt; query_txt ----------- '1 \'2' (1 row) -select '!1'::query_txt; +SELECT '!1'::query_txt; query_txt ----------- !'1' (1 row) -select '1|2'::query_txt; +SELECT '1|2'::query_txt; query_txt ----------- '1' | '2' (1 row) -select '1|!2'::query_txt; +SELECT '1|!2'::query_txt; query_txt ------------ '1' | !'2' (1 row) -select '!1|2'::query_txt; +SELECT '!1|2'::query_txt; query_txt ------------ !'1' | '2' (1 row) -select '!1|!2'::query_txt; +SELECT '!1|!2'::query_txt; query_txt ------------- !'1' | !'2' (1 row) -select '!(!1|!2)'::query_txt; +SELECT '!(!1|!2)'::query_txt; query_txt ------------------ !( !'1' | !'2' ) (1 row) -select '!(!1|2)'::query_txt; +SELECT '!(!1|2)'::query_txt; query_txt ----------------- !( !'1' | '2' ) (1 row) -select '!(1|!2)'::query_txt; +SELECT '!(1|!2)'::query_txt; query_txt ----------------- !( '1' | !'2' ) (1 row) -select '!(1|2)'::query_txt; +SELECT '!(1|2)'::query_txt; query_txt ---------------- !( '1' | '2' ) (1 row) -select '1&2'::query_txt; +SELECT '1&2'::query_txt; query_txt ----------- '1' & '2' (1 row) -select '!1&2'::query_txt; +SELECT '!1&2'::query_txt; query_txt ------------ !'1' & '2' (1 row) -select '1&!2'::query_txt; +SELECT '1&!2'::query_txt; query_txt ------------ '1' & !'2' (1 row) -select '!1&!2'::query_txt; +SELECT '!1&!2'::query_txt; query_txt ------------- !'1' & !'2' (1 row) -select '(1&2)'::query_txt; +SELECT '(1&2)'::query_txt; query_txt ----------- '1' & '2' (1 row) -select '1&(2)'::query_txt; +SELECT '1&(2)'::query_txt; query_txt ----------- '1' & '2' (1 row) -select '!(1)&2'::query_txt; +SELECT '!(1)&2'::query_txt; query_txt ------------ !'1' & '2' (1 row) -select '!(1&2)'::query_txt; +SELECT '!(1&2)'::query_txt; query_txt ---------------- !( '1' & '2' ) (1 row) -select '1|2&3'::query_txt; +SELECT '1|2&3'::query_txt; query_txt ----------------- '1' | '2' & '3' (1 row) -select '1|(2&3)'::query_txt; +SELECT '1|(2&3)'::query_txt; query_txt ----------------- '1' | '2' & '3' (1 row) -select '(1|2)&3'::query_txt; +SELECT '(1|2)&3'::query_txt; query_txt --------------------- ( '1' | '2' ) & '3' (1 row) -select '1|2&!3'::query_txt; +SELECT '1|2&!3'::query_txt; query_txt ------------------ '1' | '2' & !'3' (1 row) -select '1|!2&3'::query_txt; +SELECT '1|!2&3'::query_txt; query_txt ------------------ '1' | !'2' & '3' (1 row) -select '!1|2&3'::query_txt; +SELECT '!1|2&3'::query_txt; query_txt ------------------ !'1' | '2' & '3' (1 row) -select '!1|(2&3)'::query_txt; +SELECT '!1|(2&3)'::query_txt; query_txt ------------------ !'1' | '2' & '3' (1 row) -select '!(1|2)&3'::query_txt; +SELECT '!(1|2)&3'::query_txt; query_txt ---------------------- !( '1' | '2' ) & '3' (1 row) -select '(!1|2)&3'::query_txt; +SELECT '(!1|2)&3'::query_txt; query_txt ---------------------- ( !'1' | '2' ) & '3' (1 row) -select '1|(2|(4|(5|6)))'::query_txt; +SELECT '1|(2|(4|(5|6)))'::query_txt; query_txt ----------------------------------------- '1' | ( '2' | ( '4' | ( '5' | '6' ) ) ) (1 row) -select '1|2|4|5|6'::query_txt; +SELECT '1|2|4|5|6'::query_txt; query_txt ----------------------------------------- ( ( ( '1' | '2' ) | '4' ) | '5' ) | '6' (1 row) -select '1&(2&(4&(5&6)))'::query_txt; +SELECT '1&(2&(4&(5&6)))'::query_txt; query_txt ----------------------------- '1' & '2' & '4' & '5' & '6' (1 row) -select '1&2&4&5&6'::query_txt; +SELECT '1&2&4&5&6'::query_txt; query_txt ----------------------------- '1' & '2' & '4' & '5' & '6' (1 row) -select '1&(2&(4&(5|6)))'::query_txt; +SELECT '1&(2&(4&(5|6)))'::query_txt; query_txt --------------------------------- '1' & '2' & '4' & ( '5' | '6' ) (1 row) -select '1&(2&(4&(5|!6)))'::query_txt; +SELECT '1&(2&(4&(5|!6)))'::query_txt; query_txt ---------------------------------- '1' & '2' & '4' & ( '5' | !'6' ) (1 row) -select '1&(\'2\'&(\' 4\'&(\\|5 | \'6 \\\' !|&\')))'::query_txt; +SELECT '1&(\'2\'&(\' 4\'&(\\|5 | \'6 \\\' !|&\')))'::query_txt; query_txt ------------------------------------------ '1' & '2' & ' 4' & ( '|5' | '6 \' !|&' ) (1 row) -select '1'::mquery_txt; +SELECT '1'::mquery_txt; mquery_txt ------------ '1' (1 row) -select '1 '::mquery_txt; +SELECT '1 '::mquery_txt; mquery_txt ------------ '1' (1 row) -select ' 1'::mquery_txt; +SELECT ' 1'::mquery_txt; mquery_txt ------------ '1' (1 row) -select ' 1 '::mquery_txt; +SELECT ' 1 '::mquery_txt; mquery_txt ------------ '1' (1 row) -select '\'1 2\''::mquery_txt; +SELECT '\'1 2\''::mquery_txt; mquery_txt ------------ '1' & '2' (1 row) -select '\'1 \\\'2\''::mquery_txt; +SELECT '\'1 \\\'2\''::mquery_txt; mquery_txt ------------ '1' & '2' (1 row) -select '!1'::mquery_txt; +SELECT '!1'::mquery_txt; mquery_txt ------------ !'1' (1 row) -select '1|2'::mquery_txt; +SELECT '1|2'::mquery_txt; mquery_txt ------------ '1' | '2' (1 row) -select '1|!2'::mquery_txt; +SELECT '1|!2'::mquery_txt; mquery_txt ------------ '1' | !'2' (1 row) -select '!1|2'::mquery_txt; +SELECT '!1|2'::mquery_txt; mquery_txt ------------ !'1' | '2' (1 row) -select '!1|!2'::mquery_txt; +SELECT '!1|!2'::mquery_txt; mquery_txt ------------- !'1' | !'2' (1 row) -select '!(!1|!2)'::mquery_txt; +SELECT '!(!1|!2)'::mquery_txt; mquery_txt ------------------ !( !'1' | !'2' ) (1 row) -select '!(!1|2)'::mquery_txt; +SELECT '!(!1|2)'::mquery_txt; mquery_txt ----------------- !( !'1' | '2' ) (1 row) -select '!(1|!2)'::mquery_txt; +SELECT '!(1|!2)'::mquery_txt; mquery_txt ----------------- !( '1' | !'2' ) (1 row) -select '!(1|2)'::mquery_txt; +SELECT '!(1|2)'::mquery_txt; mquery_txt ---------------- !( '1' | '2' ) (1 row) -select '1&2'::mquery_txt; +SELECT '1&2'::mquery_txt; mquery_txt ------------ '1' & '2' (1 row) -select '!1&2'::mquery_txt; +SELECT '!1&2'::mquery_txt; mquery_txt ------------ !'1' & '2' (1 row) -select '1&!2'::mquery_txt; +SELECT '1&!2'::mquery_txt; mquery_txt ------------ '1' & !'2' (1 row) -select '!1&!2'::mquery_txt; +SELECT '!1&!2'::mquery_txt; mquery_txt ------------- !'1' & !'2' (1 row) -select '(1&2)'::mquery_txt; +SELECT '(1&2)'::mquery_txt; mquery_txt ------------ '1' & '2' (1 row) -select '1&(2)'::mquery_txt; +SELECT '1&(2)'::mquery_txt; mquery_txt ------------ '1' & '2' (1 row) -select '!(1)&2'::mquery_txt; +SELECT '!(1)&2'::mquery_txt; mquery_txt ------------ !'1' & '2' (1 row) -select '!(1&2)'::mquery_txt; +SELECT '!(1&2)'::mquery_txt; mquery_txt ---------------- !( '1' & '2' ) (1 row) -select '1|2&3'::mquery_txt; +SELECT '1|2&3'::mquery_txt; mquery_txt ----------------- '1' | '2' & '3' (1 row) -select '1|(2&3)'::mquery_txt; +SELECT '1|(2&3)'::mquery_txt; mquery_txt ----------------- '1' | '2' & '3' (1 row) -select '(1|2)&3'::mquery_txt; +SELECT '(1|2)&3'::mquery_txt; mquery_txt --------------------- ( '1' | '2' ) & '3' (1 row) -select '1|2&!3'::mquery_txt; +SELECT '1|2&!3'::mquery_txt; mquery_txt ------------------ '1' | '2' & !'3' (1 row) -select '1|!2&3'::mquery_txt; +SELECT '1|!2&3'::mquery_txt; mquery_txt ------------------ '1' | !'2' & '3' (1 row) -select '!1|2&3'::mquery_txt; +SELECT '!1|2&3'::mquery_txt; mquery_txt ------------------ !'1' | '2' & '3' (1 row) -select '!1|(2&3)'::mquery_txt; +SELECT '!1|(2&3)'::mquery_txt; mquery_txt ------------------ !'1' | '2' & '3' (1 row) -select '!(1|2)&3'::mquery_txt; +SELECT '!(1|2)&3'::mquery_txt; mquery_txt ---------------------- !( '1' | '2' ) & '3' (1 row) -select '(!1|2)&3'::mquery_txt; +SELECT '(!1|2)&3'::mquery_txt; mquery_txt ---------------------- ( !'1' | '2' ) & '3' (1 row) -select '1|(2|(4|(5|6)))'::mquery_txt; +SELECT '1|(2|(4|(5|6)))'::mquery_txt; mquery_txt ----------------------------------------- '1' | ( '2' | ( '4' | ( '5' | '6' ) ) ) (1 row) -select '1|2|4|5|6'::mquery_txt; +SELECT '1|2|4|5|6'::mquery_txt; mquery_txt ----------------------------------------- ( ( ( '1' | '2' ) | '4' ) | '5' ) | '6' (1 row) -select '1&(2&(4&(5&6)))'::mquery_txt; +SELECT '1&(2&(4&(5&6)))'::mquery_txt; mquery_txt ----------------------------- '1' & '2' & '4' & '5' & '6' (1 row) -select '1&2&4&5&6'::mquery_txt; +SELECT '1&2&4&5&6'::mquery_txt; mquery_txt ----------------------------- '1' & '2' & '4' & '5' & '6' (1 row) -select '1&(2&(4&(5|6)))'::mquery_txt; +SELECT '1&(2&(4&(5|6)))'::mquery_txt; mquery_txt --------------------------------- '1' & '2' & '4' & ( '5' | '6' ) (1 row) -select '1&(2&(4&(5|!6)))'::mquery_txt; +SELECT '1&(2&(4&(5|!6)))'::mquery_txt; mquery_txt ---------------------------------- '1' & '2' & '4' & ( '5' | !'6' ) (1 row) -select '1&(\'2\'&(\' 4\'&(\\|5 | \'6 \\\' !|&\')))'::mquery_txt; +SELECT '1&(\'2\'&(\' 4\'&(\\|5 | \'6 \\\' !|&\')))'::mquery_txt; mquery_txt --------------------------------- '1' & '2' & '4' & ( '5' | '6' ) (1 row) -select 'querty-fgries | http://www.google.com/index.html | www.rambler.ru/index.shtml'::mquery_txt; +SELECT 'querty-fgries | http://www.google.com/index.html | www.rambler.ru/index.shtml'::mquery_txt; mquery_txt --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ( 'querty-fgri' & 'querti' & 'fgri' | 'www.google.com/index.html' & 'www.google.com' & '/index.html' ) | 'www.rambler.ru/index.shtml' & 'www.rambler.ru' & '/index.shtml' @@ -694,7 +694,7 @@ SELECT count(*) FROM test_txtidx WHERE a ## '(eq|yt)&(wR|qh)'; 11 (1 row) -select txt2txtidx('345 qwe@efd.r \' http://www.com/ http://aew.werc.ewr/?ad=qwe&dw 1aew.werc.ewr/?ad=qwe&dw 2aew.werc.ewr http://3aew.werc.ewr/?ad=qwe&dw http://4aew.werc.ewr http://5aew.werc.ewr:8100/? ad=qwe&dw 6aew.werc.ewr:8100/?ad=qwe&dw 7aew.werc.ewr:8100/?ad=qwe&dw=%20%32 +4.0e-10 qwe qwe qwqwe 234.435 455 5.005 teodor@stack.net qwe-wer asdf qwer jf sdjk ewr1> ewri2 +SELECT txt2txtidx('345 qwe@efd.r \' http://www.com/ http://aew.werc.ewr/?ad=qwe&dw 1aew.werc.ewr/?ad=qwe&dw 2aew.werc.ewr http://3aew.werc.ewr/?ad=qwe&dw http://4aew.werc.ewr http://5aew.werc.ewr:8100/? ad=qwe&dw 6aew.werc.ewr:8100/?ad=qwe&dw 7aew.werc.ewr:8100/?ad=qwe&dw=%20%32 +4.0e-10 qwe qwe qwqwe 234.435 455 5.005 teodor@stack.net qwe-wer asdf qwer jf sdjk ewr1> ewri2 /usr/local/fff /awdf/dwqe/4325 rewt/ewr wefjn /wqe-324/ewr gist.h gist.h.c gist.c. readline 4.2 4.2. 4.2, readline-4.2 readline-4.2. 234 wow < jqw <> qwerty'); txt2txtidx @@ -702,13 +702,13 @@ select txt2txtidx('345 qwe@efd.r \' http://www.com/ http://aew.werc.ewr/?ad=qwe& 'ad' 'dw' 'jf' '234' '345' '4.2' '455' 'jqw' 'qwe' 'wer' 'wow' 'asdf' 'ewr1' 'qwer' 'sdjk' '5.005' 'ewri2' 'qwqwe' 'wefjn' 'gist.c' 'gist.h' 'qwerti' '234.435' ':8100/?' 'qwe-wer' 'readlin' 'www.com' '+4.0e-10' 'gist.h.c' 'rewt/ewr' 'qwe@efd.r' 'readline-4' '/?ad=qwe&dw' '/wqe-324/ewr' 'aew.werc.ewr' '1aew.werc.ewr' '2aew.werc.ewr' '3aew.werc.ewr' '4aew.werc.ewr' '5aew.werc.ewr' '6aew.werc.ewr' '7aew.werc.ewr' '/usr/local/fff' '/awdf/dwqe/4325' ':8100/?ad=qwe&dw' 'teodor@stack.net' '5aew.werc.ewr:8100/?' ':8100/?ad=qwe&dw=%20%32' 'aew.werc.ewr/?ad=qwe&dw' '1aew.werc.ewr/?ad=qwe&dw' '3aew.werc.ewr/?ad=qwe&dw' '6aew.werc.ewr:8100/?ad=qwe&dw' '7aew.werc.ewr:8100/?ad=qwe&dw=%20%32' (1 row) -select txtidxsize(txt2txtidx('345 qw')); +SELECT txtidxsize(txt2txtidx('345 qw')); txtidxsize ------------ 2 (1 row) -select txtidxsize(txt2txtidx('345 qwe@efd.r \' http://www.com/ http://aew.werc.ewr/?ad=qwe&dw 1aew.werc.ewr/?ad=qwe&dw 2aew.werc.ewr http://3aew.werc.ewr/?ad=qwe&dw http://4aew.werc.ewr http://5aew.werc.ewr:8100/? ad=qwe&dw 6aew.werc.ewr:8100/?ad=qwe&dw 7aew.werc.ewr:8100/?ad=qwe&dw=%20%32 +4.0e-10 qwe qwe qwqwe 234.435 455 5.005 teodor@stack.net qwe-wer asdf qwer jf sdjk ewr1> ewri2 +SELECT txtidxsize(txt2txtidx('345 qwe@efd.r \' http://www.com/ http://aew.werc.ewr/?ad=qwe&dw 1aew.werc.ewr/?ad=qwe&dw 2aew.werc.ewr http://3aew.werc.ewr/?ad=qwe&dw http://4aew.werc.ewr http://5aew.werc.ewr:8100/? ad=qwe&dw 6aew.werc.ewr:8100/?ad=qwe&dw 7aew.werc.ewr:8100/?ad=qwe&dw=%20%32 +4.0e-10 qwe qwe qwqwe 234.435 455 5.005 teodor@stack.net qwe-wer asdf qwer jf sdjk ewr1> ewri2 /usr/local/fff /awdf/dwqe/4325 rewt/ewr wefjn /wqe-324/ewr gist.h gist.h.c gist.c. readline 4.2 4.2. 4.2, readline-4.2 readline-4.2. 234 wow < jqw <> qwerty')); txtidxsize @@ -716,30 +716,31 @@ select txtidxsize(txt2txtidx('345 qwe@efd.r \' http://www.com/ http://aew.werc.e 53 (1 row) -insert into test_txtidx (a) values ('345 qwerty'); -create trigger txtidxupdate before update or insert on test_txtidx -for each row execute procedure tsearch(a, t); -insert into test_txtidx (t) values ('345 qwerty'); -select count(*) FROM test_txtidx WHERE a @@ '345&qwerty'; +INSERT INTO test_txtidx (a) VALUES ('345 qwerty'); +CREATE TRIGGER txtidxupdate +BEFORE UPDATE OR INSERT ON test_txtidx +FOR EACH ROW EXECUTE PROCEDURE tsearch(a, t); +INSERT INTO test_txtidx (t) VALUES ('345 qwerty'); +SELECT count(*) FROM test_txtidx WHERE a @@ '345&qwerty'; count ------- 1 (1 row) -select count(*) FROM test_txtidx WHERE a ## '345&qwerty'; +SELECT count(*) FROM test_txtidx WHERE a ## '345&qwerty'; count ------- 1 (1 row) -update test_txtidx set t = null where t = '345 qwerty'; -select count(*) FROM test_txtidx WHERE a ## '345&qwerty'; +UPDATE test_txtidx SET t = null WHERE t = '345 qwerty'; +SELECT count(*) FROM test_txtidx WHERE a ## '345&qwerty'; count ------- 0 (1 row) -select count(*) FROM test_txtidx WHERE a @@ '345&qwerty'; +SELECT count(*) FROM test_txtidx WHERE a @@ '345&qwerty'; count ------- 1 diff --git a/contrib/tsearch/sql/tsearch.sql b/contrib/tsearch/sql/tsearch.sql index d863fa743c..5b0b50afca 100644 --- a/contrib/tsearch/sql/tsearch.sql +++ b/contrib/tsearch/sql/tsearch.sql @@ -3,101 +3,102 @@ -- does not depend on contents of seg.sql. -- \set ECHO none +SET autocommit TO 'on'; \i tsearch.sql \set ECHO all --txtidx -select '1'::txtidx; -select '1 '::txtidx; -select ' 1'::txtidx; -select ' 1 '::txtidx; -select '1 2'::txtidx; -select '\'1 2\''::txtidx; -select '\'1 \\\'2\''::txtidx; -select '\'1 \\\'2\'3'::txtidx; -select '\'1 \\\'2\' 3'::txtidx; -select '\'1 \\\'2\' \' 3\' 4 '::txtidx; +SELECT '1'::txtidx; +SELECT '1 '::txtidx; +SELECT ' 1'::txtidx; +SELECT ' 1 '::txtidx; +SELECT '1 2'::txtidx; +SELECT '\'1 2\''::txtidx; +SELECT '\'1 \\\'2\''::txtidx; +SELECT '\'1 \\\'2\'3'::txtidx; +SELECT '\'1 \\\'2\' 3'::txtidx; +SELECT '\'1 \\\'2\' \' 3\' 4 '::txtidx; --query_txt -select '1'::query_txt; -select '1 '::query_txt; -select ' 1'::query_txt; -select ' 1 '::query_txt; -select '\'1 2\''::query_txt; -select '\'1 \\\'2\''::query_txt; -select '!1'::query_txt; -select '1|2'::query_txt; -select '1|!2'::query_txt; -select '!1|2'::query_txt; -select '!1|!2'::query_txt; -select '!(!1|!2)'::query_txt; -select '!(!1|2)'::query_txt; -select '!(1|!2)'::query_txt; -select '!(1|2)'::query_txt; -select '1&2'::query_txt; -select '!1&2'::query_txt; -select '1&!2'::query_txt; -select '!1&!2'::query_txt; -select '(1&2)'::query_txt; -select '1&(2)'::query_txt; -select '!(1)&2'::query_txt; -select '!(1&2)'::query_txt; -select '1|2&3'::query_txt; -select '1|(2&3)'::query_txt; -select '(1|2)&3'::query_txt; -select '1|2&!3'::query_txt; -select '1|!2&3'::query_txt; -select '!1|2&3'::query_txt; -select '!1|(2&3)'::query_txt; -select '!(1|2)&3'::query_txt; -select '(!1|2)&3'::query_txt; -select '1|(2|(4|(5|6)))'::query_txt; -select '1|2|4|5|6'::query_txt; -select '1&(2&(4&(5&6)))'::query_txt; -select '1&2&4&5&6'::query_txt; -select '1&(2&(4&(5|6)))'::query_txt; -select '1&(2&(4&(5|!6)))'::query_txt; -select '1&(\'2\'&(\' 4\'&(\\|5 | \'6 \\\' !|&\')))'::query_txt; -select '1'::mquery_txt; -select '1 '::mquery_txt; -select ' 1'::mquery_txt; -select ' 1 '::mquery_txt; -select '\'1 2\''::mquery_txt; -select '\'1 \\\'2\''::mquery_txt; -select '!1'::mquery_txt; -select '1|2'::mquery_txt; -select '1|!2'::mquery_txt; -select '!1|2'::mquery_txt; -select '!1|!2'::mquery_txt; -select '!(!1|!2)'::mquery_txt; -select '!(!1|2)'::mquery_txt; -select '!(1|!2)'::mquery_txt; -select '!(1|2)'::mquery_txt; -select '1&2'::mquery_txt; -select '!1&2'::mquery_txt; -select '1&!2'::mquery_txt; -select '!1&!2'::mquery_txt; -select '(1&2)'::mquery_txt; -select '1&(2)'::mquery_txt; -select '!(1)&2'::mquery_txt; -select '!(1&2)'::mquery_txt; -select '1|2&3'::mquery_txt; -select '1|(2&3)'::mquery_txt; -select '(1|2)&3'::mquery_txt; -select '1|2&!3'::mquery_txt; -select '1|!2&3'::mquery_txt; -select '!1|2&3'::mquery_txt; -select '!1|(2&3)'::mquery_txt; -select '!(1|2)&3'::mquery_txt; -select '(!1|2)&3'::mquery_txt; -select '1|(2|(4|(5|6)))'::mquery_txt; -select '1|2|4|5|6'::mquery_txt; -select '1&(2&(4&(5&6)))'::mquery_txt; -select '1&2&4&5&6'::mquery_txt; -select '1&(2&(4&(5|6)))'::mquery_txt; -select '1&(2&(4&(5|!6)))'::mquery_txt; -select '1&(\'2\'&(\' 4\'&(\\|5 | \'6 \\\' !|&\')))'::mquery_txt; -select 'querty-fgries | http://www.google.com/index.html | www.rambler.ru/index.shtml'::mquery_txt; +SELECT '1'::query_txt; +SELECT '1 '::query_txt; +SELECT ' 1'::query_txt; +SELECT ' 1 '::query_txt; +SELECT '\'1 2\''::query_txt; +SELECT '\'1 \\\'2\''::query_txt; +SELECT '!1'::query_txt; +SELECT '1|2'::query_txt; +SELECT '1|!2'::query_txt; +SELECT '!1|2'::query_txt; +SELECT '!1|!2'::query_txt; +SELECT '!(!1|!2)'::query_txt; +SELECT '!(!1|2)'::query_txt; +SELECT '!(1|!2)'::query_txt; +SELECT '!(1|2)'::query_txt; +SELECT '1&2'::query_txt; +SELECT '!1&2'::query_txt; +SELECT '1&!2'::query_txt; +SELECT '!1&!2'::query_txt; +SELECT '(1&2)'::query_txt; +SELECT '1&(2)'::query_txt; +SELECT '!(1)&2'::query_txt; +SELECT '!(1&2)'::query_txt; +SELECT '1|2&3'::query_txt; +SELECT '1|(2&3)'::query_txt; +SELECT '(1|2)&3'::query_txt; +SELECT '1|2&!3'::query_txt; +SELECT '1|!2&3'::query_txt; +SELECT '!1|2&3'::query_txt; +SELECT '!1|(2&3)'::query_txt; +SELECT '!(1|2)&3'::query_txt; +SELECT '(!1|2)&3'::query_txt; +SELECT '1|(2|(4|(5|6)))'::query_txt; +SELECT '1|2|4|5|6'::query_txt; +SELECT '1&(2&(4&(5&6)))'::query_txt; +SELECT '1&2&4&5&6'::query_txt; +SELECT '1&(2&(4&(5|6)))'::query_txt; +SELECT '1&(2&(4&(5|!6)))'::query_txt; +SELECT '1&(\'2\'&(\' 4\'&(\\|5 | \'6 \\\' !|&\')))'::query_txt; +SELECT '1'::mquery_txt; +SELECT '1 '::mquery_txt; +SELECT ' 1'::mquery_txt; +SELECT ' 1 '::mquery_txt; +SELECT '\'1 2\''::mquery_txt; +SELECT '\'1 \\\'2\''::mquery_txt; +SELECT '!1'::mquery_txt; +SELECT '1|2'::mquery_txt; +SELECT '1|!2'::mquery_txt; +SELECT '!1|2'::mquery_txt; +SELECT '!1|!2'::mquery_txt; +SELECT '!(!1|!2)'::mquery_txt; +SELECT '!(!1|2)'::mquery_txt; +SELECT '!(1|!2)'::mquery_txt; +SELECT '!(1|2)'::mquery_txt; +SELECT '1&2'::mquery_txt; +SELECT '!1&2'::mquery_txt; +SELECT '1&!2'::mquery_txt; +SELECT '!1&!2'::mquery_txt; +SELECT '(1&2)'::mquery_txt; +SELECT '1&(2)'::mquery_txt; +SELECT '!(1)&2'::mquery_txt; +SELECT '!(1&2)'::mquery_txt; +SELECT '1|2&3'::mquery_txt; +SELECT '1|(2&3)'::mquery_txt; +SELECT '(1|2)&3'::mquery_txt; +SELECT '1|2&!3'::mquery_txt; +SELECT '1|!2&3'::mquery_txt; +SELECT '!1|2&3'::mquery_txt; +SELECT '!1|(2&3)'::mquery_txt; +SELECT '!(1|2)&3'::mquery_txt; +SELECT '(!1|2)&3'::mquery_txt; +SELECT '1|(2|(4|(5|6)))'::mquery_txt; +SELECT '1|2|4|5|6'::mquery_txt; +SELECT '1&(2&(4&(5&6)))'::mquery_txt; +SELECT '1&2&4&5&6'::mquery_txt; +SELECT '1&(2&(4&(5|6)))'::mquery_txt; +SELECT '1&(2&(4&(5|!6)))'::mquery_txt; +SELECT '1&(\'2\'&(\' 4\'&(\\|5 | \'6 \\\' !|&\')))'::mquery_txt; +SELECT 'querty-fgries | http://www.google.com/index.html | www.rambler.ru/index.shtml'::mquery_txt; CREATE TABLE test_txtidx( t text, a txtidx ); @@ -133,30 +134,31 @@ SELECT count(*) FROM test_txtidx WHERE a ## 'eq|yt'; SELECT count(*) FROM test_txtidx WHERE a ## '(eq&yt)|(wR&qh)'; SELECT count(*) FROM test_txtidx WHERE a ## '(eq|yt)&(wR|qh)'; -select txt2txtidx('345 qwe@efd.r \' http://www.com/ http://aew.werc.ewr/?ad=qwe&dw 1aew.werc.ewr/?ad=qwe&dw 2aew.werc.ewr http://3aew.werc.ewr/?ad=qwe&dw http://4aew.werc.ewr http://5aew.werc.ewr:8100/? ad=qwe&dw 6aew.werc.ewr:8100/?ad=qwe&dw 7aew.werc.ewr:8100/?ad=qwe&dw=%20%32 +4.0e-10 qwe qwe qwqwe 234.435 455 5.005 teodor@stack.net qwe-wer asdf qwer jf sdjk ewr1> ewri2 +SELECT txt2txtidx('345 qwe@efd.r \' http://www.com/ http://aew.werc.ewr/?ad=qwe&dw 1aew.werc.ewr/?ad=qwe&dw 2aew.werc.ewr http://3aew.werc.ewr/?ad=qwe&dw http://4aew.werc.ewr http://5aew.werc.ewr:8100/? ad=qwe&dw 6aew.werc.ewr:8100/?ad=qwe&dw 7aew.werc.ewr:8100/?ad=qwe&dw=%20%32 +4.0e-10 qwe qwe qwqwe 234.435 455 5.005 teodor@stack.net qwe-wer asdf qwer jf sdjk ewr1> ewri2 /usr/local/fff /awdf/dwqe/4325 rewt/ewr wefjn /wqe-324/ewr gist.h gist.h.c gist.c. readline 4.2 4.2. 4.2, readline-4.2 readline-4.2. 234 wow < jqw <> qwerty'); -select txtidxsize(txt2txtidx('345 qw')); +SELECT txtidxsize(txt2txtidx('345 qw')); -select txtidxsize(txt2txtidx('345 qwe@efd.r \' http://www.com/ http://aew.werc.ewr/?ad=qwe&dw 1aew.werc.ewr/?ad=qwe&dw 2aew.werc.ewr http://3aew.werc.ewr/?ad=qwe&dw http://4aew.werc.ewr http://5aew.werc.ewr:8100/? ad=qwe&dw 6aew.werc.ewr:8100/?ad=qwe&dw 7aew.werc.ewr:8100/?ad=qwe&dw=%20%32 +4.0e-10 qwe qwe qwqwe 234.435 455 5.005 teodor@stack.net qwe-wer asdf qwer jf sdjk ewr1> ewri2 +SELECT txtidxsize(txt2txtidx('345 qwe@efd.r \' http://www.com/ http://aew.werc.ewr/?ad=qwe&dw 1aew.werc.ewr/?ad=qwe&dw 2aew.werc.ewr http://3aew.werc.ewr/?ad=qwe&dw http://4aew.werc.ewr http://5aew.werc.ewr:8100/? ad=qwe&dw 6aew.werc.ewr:8100/?ad=qwe&dw 7aew.werc.ewr:8100/?ad=qwe&dw=%20%32 +4.0e-10 qwe qwe qwqwe 234.435 455 5.005 teodor@stack.net qwe-wer asdf qwer jf sdjk ewr1> ewri2 /usr/local/fff /awdf/dwqe/4325 rewt/ewr wefjn /wqe-324/ewr gist.h gist.h.c gist.c. readline 4.2 4.2. 4.2, readline-4.2 readline-4.2. 234 wow < jqw <> qwerty')); -insert into test_txtidx (a) values ('345 qwerty'); +INSERT INTO test_txtidx (a) VALUES ('345 qwerty'); -create trigger txtidxupdate before update or insert on test_txtidx -for each row execute procedure tsearch(a, t); +CREATE TRIGGER txtidxupdate +BEFORE UPDATE OR INSERT ON test_txtidx +FOR EACH ROW EXECUTE PROCEDURE tsearch(a, t); -insert into test_txtidx (t) values ('345 qwerty'); +INSERT INTO test_txtidx (t) VALUES ('345 qwerty'); -select count(*) FROM test_txtidx WHERE a @@ '345&qwerty'; +SELECT count(*) FROM test_txtidx WHERE a @@ '345&qwerty'; -select count(*) FROM test_txtidx WHERE a ## '345&qwerty'; +SELECT count(*) FROM test_txtidx WHERE a ## '345&qwerty'; -update test_txtidx set t = null where t = '345 qwerty'; +UPDATE test_txtidx SET t = null WHERE t = '345 qwerty'; -select count(*) FROM test_txtidx WHERE a ## '345&qwerty'; +SELECT count(*) FROM test_txtidx WHERE a ## '345&qwerty'; -select count(*) FROM test_txtidx WHERE a @@ '345&qwerty'; +SELECT count(*) FROM test_txtidx WHERE a @@ '345&qwerty'; diff --git a/contrib/tsearch/tsearch.sql.in b/contrib/tsearch/tsearch.sql.in index a709a14758..4577fa02e8 100644 --- a/contrib/tsearch/tsearch.sql.in +++ b/contrib/tsearch/tsearch.sql.in @@ -1,173 +1,213 @@ -BEGIN TRANSACTION; - -- Adjust this setting to control where the objects get created. SET search_path = public; +SET autocommit TO 'on'; + -- TXTIDX type CREATE FUNCTION txtidx_in(cstring) RETURNS txtidx AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' with (isstrict); CREATE FUNCTION txtidx_out(txtidx) RETURNS cstring AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' with (isstrict); CREATE TYPE txtidx ( -internallength = -1, -input = txtidx_in, -output = txtidx_out, -storage = extended + INTERNALLENGTH = -1, + INPUT = txtidx_in, + OUTPUT = txtidx_out, + STORAGE = extended ); CREATE FUNCTION txt2txtidx(text) RETURNS txtidx AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' with (isstrict); CREATE FUNCTION txtidxsize(txtidx) RETURNS int4 AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' with (isstrict); --QUERYTYPES --without morphology CREATE FUNCTION qtxt_in(cstring) RETURNS query_txt AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' with (isstrict); CREATE FUNCTION qtxt_out(query_txt) RETURNS cstring AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' with (isstrict); CREATE TYPE query_txt ( -internallength = -1, -input = qtxt_in, -output = qtxt_out + INTERNALLENGTH = -1, + INPUT = qtxt_in, + OUTPUT = qtxt_out ); --with morphology CREATE FUNCTION mqtxt_in(cstring) RETURNS mquery_txt AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' with (isstrict); --same C output function as for query_txt CREATE FUNCTION mqtxt_out(mquery_txt) RETURNS cstring AS 'MODULE_PATHNAME', 'qtxt_out' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' with (isstrict); CREATE TYPE mquery_txt ( -internallength = -1, -input = mqtxt_in, -output = mqtxt_out + INTERNALLENGTH = -1, + INPUT = mqtxt_in, + OUTPUT = mqtxt_out ); --only for debug CREATE FUNCTION querytree(query_txt) RETURNS text AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' with (isstrict); CREATE FUNCTION querytree(mquery_txt) RETURNS text AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' with (isstrict); --operations -CREATE FUNCTION execqtxt(txtidx, query_txt) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION execqtxt(txtidx, query_txt) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); COMMENT ON FUNCTION execqtxt(txtidx, query_txt) IS 'boolean operation with text index'; -CREATE FUNCTION execqtxt(txtidx, mquery_txt) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION execqtxt(txtidx, mquery_txt) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); COMMENT ON FUNCTION execqtxt(txtidx, mquery_txt) IS 'boolean operation with text index'; -CREATE FUNCTION rexecqtxt(query_txt, txtidx) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION rexecqtxt(query_txt, txtidx) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); COMMENT ON FUNCTION rexecqtxt(query_txt, txtidx) IS 'boolean operation with text index'; -CREATE FUNCTION rexecqtxt(mquery_txt, txtidx) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION rexecqtxt(mquery_txt, txtidx) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); COMMENT ON FUNCTION rexecqtxt(mquery_txt, txtidx) IS 'boolean operation with text index'; CREATE OPERATOR @@ ( - LEFTARG = txtidx, RIGHTARG = query_txt, PROCEDURE = execqtxt, - COMMUTATOR = '~@', RESTRICT = contsel, JOIN = contjoinsel + LEFTARG = txtidx, + RIGHTARG = query_txt, + PROCEDURE = execqtxt, + COMMUTATOR = '~@', + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ~@ ( - LEFTARG = query_txt, RIGHTARG = txtidx, PROCEDURE = rexecqtxt, - COMMUTATOR = '@@', RESTRICT = contsel, JOIN = contjoinsel + LEFTARG = query_txt, + RIGHTARG = txtidx, + PROCEDURE = rexecqtxt, + COMMUTATOR = '@@', + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ## ( - LEFTARG = txtidx, RIGHTARG = mquery_txt, PROCEDURE = execqtxt, - COMMUTATOR = '~#', RESTRICT = contsel, JOIN = contjoinsel + LEFTARG = txtidx, + RIGHTARG = mquery_txt, + PROCEDURE = execqtxt, + COMMUTATOR = '~#', + RESTRICT = contsel, + JOIN = contjoinsel ); CREATE OPERATOR ~# ( - LEFTARG = mquery_txt, RIGHTARG = txtidx, PROCEDURE = rexecqtxt, - COMMUTATOR = '##', RESTRICT = contsel, JOIN = contjoinsel + LEFTARG = mquery_txt, + RIGHTARG = txtidx, + PROCEDURE = rexecqtxt, + COMMUTATOR = '##', + RESTRICT = contsel, + JOIN = contjoinsel ); --Trigger -create function tsearch() returns trigger as - 'MODULE_PATHNAME' - language 'C'; +CREATE FUNCTION tsearch() +RETURNS trigger +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; --GiST --GiST key type CREATE FUNCTION gtxtidx_in(cstring) RETURNS gtxtidx AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' with (isstrict); CREATE FUNCTION gtxtidx_out(gtxtidx) RETURNS cstring AS 'MODULE_PATHNAME' -LANGUAGE 'c' with (isstrict); +LANGUAGE 'C' with (isstrict); CREATE TYPE gtxtidx ( -internallength = -1, -input = gtxtidx_in, -output = gtxtidx_out + INTERNALLENGTH = -1, + INPUT = gtxtidx_in, + OUTPUT = gtxtidx_out ); -- support functions -CREATE FUNCTION gtxtidx_consistent(gtxtidx,internal,int4) RETURNS bool - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION gtxtidx_consistent(gtxtidx,internal,int4) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -CREATE FUNCTION gtxtidx_compress(internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION gtxtidx_compress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -CREATE FUNCTION gtxtidx_decompress(internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION gtxtidx_decompress(internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -CREATE FUNCTION gtxtidx_penalty(internal,internal,internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict); +CREATE FUNCTION gtxtidx_penalty(internal,internal,internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C' with (isstrict); -CREATE FUNCTION gtxtidx_picksplit(internal, internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION gtxtidx_picksplit(internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -CREATE FUNCTION gtxtidx_union(bytea, internal) RETURNS _int4 - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION gtxtidx_union(bytea, internal) +RETURNS _int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -CREATE FUNCTION gtxtidx_same(gtxtidx, gtxtidx, internal) RETURNS internal - AS 'MODULE_PATHNAME' LANGUAGE 'c'; +CREATE FUNCTION gtxtidx_same(gtxtidx, gtxtidx, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; -- create the operator class CREATE OPERATOR CLASS gist_txtidx_ops - DEFAULT FOR TYPE txtidx USING gist AS +DEFAULT FOR TYPE txtidx USING gist +AS OPERATOR 1 @@ (txtidx, query_txt) RECHECK , OPERATOR 2 ## (txtidx, mquery_txt) RECHECK , FUNCTION 1 gtxtidx_consistent (gtxtidx, internal, int4), @@ -178,6 +218,3 @@ CREATE OPERATOR CLASS gist_txtidx_ops FUNCTION 6 gtxtidx_picksplit (internal, internal), FUNCTION 7 gtxtidx_same (gtxtidx, gtxtidx, internal), STORAGE gtxtidx; - - -END TRANSACTION; diff --git a/contrib/userlock/user_locks.sql.in b/contrib/userlock/user_locks.sql.in index f5ae6a6e95..1826fcf249 100644 --- a/contrib/userlock/user_locks.sql.in +++ b/contrib/userlock/user_locks.sql.in @@ -9,68 +9,82 @@ -- select user_lock(group,id,mode); -- -create function user_lock(int4,int4,int4) returns int4 - as 'MODULE_PATHNAME' - language 'c'; +-- Adjust this setting to control where the objects get created. +SET search_path = public; --- select user_unlock(group,id,mode); --- -create function user_unlock(int4,int4,int4) returns int4 - as 'MODULE_PATHNAME' - language 'c'; +SET autocommit TO 'on'; + +CREATE OR REPLACE FUNCTION user_lock(int4,int4,int4) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; --- select user_write_lock(group,id); +-- SELECT user_unlock(group,id,mode); -- -create function user_write_lock(int4,int4) returns int4 - as 'MODULE_PATHNAME' - language 'c'; +CREATE OR REPLACE FUNCTION user_unlock(int4,int4,int4) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; --- select user_write_unlock(group,id); +-- SELECT user_write_lock(group,id); -- -create function user_write_unlock(int4,int4) returns int4 - as 'MODULE_PATHNAME' - language 'c'; +CREATE OR REPLACE FUNCTION user_write_lock(int4,int4) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; --- select user_write_lock(group,oid); +-- SELECT user_write_unlock(group,id); -- -create function user_write_lock(int4,oid) returns int4 - as 'MODULE_PATHNAME' - language 'c'; +CREATE OR REPLACE FUNCTION user_write_unlock(int4,int4) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; --- select user_write_unlock(group,oid); +-- SELECT user_write_lock(group,oid); -- -create function user_write_unlock(int4,oid) returns int4 - as 'MODULE_PATHNAME' - language 'c'; +CREATE OR REPLACE FUNCTION user_write_lock(int4,oid) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; --- select user_write_lock_oid(oid); +-- SELECT user_write_unlock(group,oid); -- -create function user_write_lock_oid(oid) returns int4 - as 'MODULE_PATHNAME' - language 'c'; +CREATE OR REPLACE FUNCTION user_write_unlock(int4,oid) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; --- select user_write_unlock_oid(oid); +-- SELECT user_write_lock_oid(oid); -- -create function user_write_unlock_oid(oid) returns int4 - as 'MODULE_PATHNAME' - language 'c'; +CREATE OR REPLACE FUNCTION user_write_lock_oid(oid) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; --- select user_write_lock_oid(int4); +-- SELECT user_write_unlock_oid(oid); -- -create function user_write_lock_oid(int4) returns int4 - as 'MODULE_PATHNAME' - language 'c'; +CREATE OR REPLACE FUNCTION user_write_unlock_oid(oid) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; --- select user_write_unlock_oid(int4); +-- SELECT user_write_lock_oid(int4); -- -create function user_write_unlock_oid(int4) returns int4 - as 'MODULE_PATHNAME' - language 'c'; +CREATE OR REPLACE FUNCTION user_write_lock_oid(int4) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; --- select user_unlock_all(); +-- SELECT user_write_unlock_oid(int4); -- -create function user_unlock_all() returns int4 - as 'MODULE_PATHNAME' - language 'c'; +CREATE OR REPLACE FUNCTION user_write_unlock_oid(int4) +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; --- end of file +-- SELECT user_unlock_all(); +-- +CREATE OR REPLACE FUNCTION user_unlock_all() +RETURNS int4 +AS 'MODULE_PATHNAME' +LANGUAGE 'C'; diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index fa2b647f98..b49873c325 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/contrib/vacuumlo/vacuumlo.c,v 1.16 2002/10/03 17:20:39 momjian Exp $ + * $Header: /cvsroot/pgsql/contrib/vacuumlo/vacuumlo.c,v 1.17 2002/10/18 18:41:21 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -207,6 +207,28 @@ vacuumlo(char *database, struct _param * param) fprintf(stdout, "Test run: no large objects will be removed!\n"); } + res = PQexec(conn, "SET search_path = public"); + if (PQresultStatus(res) != PGRES_COMMAND_OK) + { + fprintf(stderr, "Failed to set search_path on:\n"); + fprintf(stderr, "%s", PQerrorMessage(conn)); + PQclear(res); + PQfinish(conn); + return -1; + } + PQclear(res); + + res = PQexec(conn, "SET autocommit TO 'on'"); + if (PQresultStatus(res) != PGRES_COMMAND_OK) + { + fprintf(stderr, "Failed to set autocommit on:\n"); + fprintf(stderr, "%s", PQerrorMessage(conn)); + PQclear(res); + PQfinish(conn); + return -1; + } + PQclear(res); + /* * First we create and populate the LO temp table */ diff --git a/contrib/xml/pgxml_dom.source b/contrib/xml/pgxml_dom.source index a8582398b1..d5272d742e 100644 --- a/contrib/xml/pgxml_dom.source +++ b/contrib/xml/pgxml_dom.source @@ -1,7 +1,16 @@ --SQL for XML parser -CREATE FUNCTION pgxml_parse(text) RETURNS bool - AS '_OBJWD_/pgxml_dom_DLSUFFIX_' LANGUAGE 'c' WITH (isStrict); +-- Adjust this setting to control where the objects get created. +SET search_path = public; -CREATE FUNCTION pgxml_xpath(text,text,text,text) RETURNS text - AS '_OBJWD_/pgxml_dom_DLSUFFIX_' LANGUAGE 'c' WITH (isStrict); \ No newline at end of file +SET autocommit TO 'on'; + +CREATE OR REPLACE FUNCTION pgxml_parse(text) +RETURNS bool +AS '_OBJWD_/pgxml_dom_DLSUFFIX_' +LANGUAGE 'c' WITH (isStrict); + +CREATE OR REPLACE FUNCTION pgxml_xpath(text,text,text,text) +RETURNS text +AS '_OBJWD_/pgxml_dom_DLSUFFIX_' +LANGUAGE 'c' WITH (isStrict); diff --git a/src/bin/scripts/Makefile b/src/bin/scripts/Makefile index db87a9efc0..69bec44d4b 100644 --- a/src/bin/scripts/Makefile +++ b/src/bin/scripts/Makefile @@ -5,7 +5,7 @@ # Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group # Portions Copyright (c) 1994, Regents of the University of California # -# $Header: /cvsroot/pgsql/src/bin/scripts/Makefile,v 1.16 2002/08/27 03:38:27 momjian Exp $ +# $Header: /cvsroot/pgsql/src/bin/scripts/Makefile,v 1.17 2002/10/18 18:41:22 momjian Exp $ # #------------------------------------------------------------------------- @@ -19,9 +19,9 @@ SCRIPTS := createdb dropdb createuser dropuser createlang droplang vacuumdb \ all: $(SCRIPTS) # we don't need this now, but we may need it some day, bjm 2002-01-03 -createlang: createlang.sh - cp $< $@ - chmod a+x $@ +#createlang: createlang.sh +# cp $< $@ +# chmod a+x $@ install: all installdirs for i in $(filter-out createlang, $(SCRIPTS)); do \