Commit aa4c702e authored by Bruce Momjian's avatar Bruce Momjian

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.
parent fb9bc342
#!/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;
}
......
This diff is collapsed.
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;
......@@ -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
......
......@@ -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';
......@@ -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 = =,
......
This diff is collapsed.
......@@ -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
--
......
......@@ -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
......
......@@ -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);
......
-- 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';
......@@ -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
......
......@@ -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();
-- 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" ();
......@@ -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;
......
SET autocommit TO 'on';
CREATE FUNCTION "recordchange" () RETURNS trigger AS
'/usr/local/pgsql/lib/pending.so', 'recordchange' LANGUAGE 'C';
......
......@@ -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;
......
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;
......@@ -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
......
......@@ -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);
......@@ -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 "
......
......@@ -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 (\"";
......
-- 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;
-- Adjust this setting to control where the objects get created.
SET search_path = public;
SET autocommit TO 'on';
DROP FUNCTION fti() CASCADE;
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';
-- 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';
This diff is collapsed.
......@@ -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
......
......@@ -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)';
--
-- 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 = ,
......
--
-- 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';
......@@ -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
......@@ -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
This diff is collapsed.
This diff is collapsed.
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);
This diff is collapsed.
This diff is collapsed.
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';
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment