From ce5174767370d25535f800c3b0a9bdb37b66a95c Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Fri, 2 Jul 2010 20:36:49 +0000 Subject: [PATCH] Remove hstore % text[] operator; use slice() function instead. David Wheeler, with one small correction by me. --- contrib/hstore/expected/hstore.out | 26 +++++++++++++------------- contrib/hstore/hstore.sql.in | 10 ++-------- contrib/hstore/sql/hstore.sql | 14 +++++++------- contrib/hstore/uninstall_hstore.sql | 5 ++--- doc/src/sgml/hstore.sgml | 17 +++++++++-------- 5 files changed, 33 insertions(+), 39 deletions(-) diff --git a/contrib/hstore/expected/hstore.out b/contrib/hstore/expected/hstore.out index 9f15a9be6c..e78264d12b 100644 --- a/contrib/hstore/expected/hstore.out +++ b/contrib/hstore/expected/hstore.out @@ -4,7 +4,7 @@ -- SET client_min_messages = warning; \set ECHO none -psql:hstore.sql:234: WARNING: => is deprecated as an operator name +psql:hstore.sql:228: WARNING: => is deprecated as an operator name DETAIL: This name may be disallowed altogether in future versions of PostgreSQL. RESET client_min_messages; set escape_string_warning=off; @@ -759,39 +759,39 @@ select pg_column_size('a=>g, b=>c'::hstore || ('b'=>'gf')) t (1 row) --- % -select hstore 'aa=>1, b=>2, c=>3' % ARRAY['g','h','i']; - ?column? ----------- +-- slice() +select slice(hstore 'aa=>1, b=>2, c=>3', ARRAY['g','h','i']); + slice +------- (1 row) -select hstore 'aa=>1, b=>2, c=>3' % ARRAY['c','b']; - ?column? +select slice(hstore 'aa=>1, b=>2, c=>3', ARRAY['c','b']); + slice -------------------- "b"=>"2", "c"=>"3" (1 row) -select hstore 'aa=>1, b=>2, c=>3' % ARRAY['aa','b']; - ?column? +select slice(hstore 'aa=>1, b=>2, c=>3', ARRAY['aa','b']); + slice --------------------- "b"=>"2", "aa"=>"1" (1 row) -select hstore 'aa=>1, b=>2, c=>3' % ARRAY['c','b','aa']; - ?column? +select slice(hstore 'aa=>1, b=>2, c=>3', ARRAY['c','b','aa']); + slice ------------------------------- "b"=>"2", "c"=>"3", "aa"=>"1" (1 row) -select pg_column_size(hstore 'aa=>1, b=>2, c=>3' % ARRAY['c','b']) +select pg_column_size(slice(hstore 'aa=>1, b=>2, c=>3', ARRAY['c','b'])) = pg_column_size('b=>2, c=>3'::hstore); ?column? ---------- t (1 row) -select pg_column_size(hstore 'aa=>1, b=>2, c=>3' % ARRAY['c','b','aa']) +select pg_column_size(slice(hstore 'aa=>1, b=>2, c=>3', ARRAY['c','b','aa'])) = pg_column_size('aa=>1, b=>2, c=>3'::hstore); ?column? ---------- diff --git a/contrib/hstore/hstore.sql.in b/contrib/hstore/hstore.sql.in index 3cf4178afb..c7a5e8e556 100644 --- a/contrib/hstore/hstore.sql.in +++ b/contrib/hstore/hstore.sql.in @@ -1,4 +1,4 @@ -/* $PostgreSQL: pgsql/contrib/hstore/hstore.sql.in,v 1.14 2010/06/18 03:52:02 rhaas Exp $ */ +/* $PostgreSQL: pgsql/contrib/hstore/hstore.sql.in,v 1.15 2010/07/02 20:36:48 rhaas Exp $ */ -- Adjust this setting to control where the objects get created. SET search_path = public; @@ -61,17 +61,11 @@ CREATE OPERATOR -> ( PROCEDURE = slice_array ); -CREATE OR REPLACE FUNCTION slice_hstore(hstore,text[]) +CREATE OR REPLACE FUNCTION slice(hstore,text[]) RETURNS hstore AS 'MODULE_PATHNAME','hstore_slice_to_hstore' LANGUAGE C STRICT IMMUTABLE; -CREATE OPERATOR % ( - LEFTARG = hstore, - RIGHTARG = text[], - PROCEDURE = slice_hstore -); - CREATE OR REPLACE FUNCTION isexists(hstore,text) RETURNS bool AS 'MODULE_PATHNAME','hstore_exists' diff --git a/contrib/hstore/sql/hstore.sql b/contrib/hstore/sql/hstore.sql index a066f11b2b..8fefcbba93 100644 --- a/contrib/hstore/sql/hstore.sql +++ b/contrib/hstore/sql/hstore.sql @@ -171,14 +171,14 @@ select pg_column_size(('b'=>'gf')) select pg_column_size('a=>g, b=>c'::hstore || ('b'=>'gf')) = pg_column_size('a=>g, b=>gf'::hstore); --- % -select hstore 'aa=>1, b=>2, c=>3' % ARRAY['g','h','i']; -select hstore 'aa=>1, b=>2, c=>3' % ARRAY['c','b']; -select hstore 'aa=>1, b=>2, c=>3' % ARRAY['aa','b']; -select hstore 'aa=>1, b=>2, c=>3' % ARRAY['c','b','aa']; -select pg_column_size(hstore 'aa=>1, b=>2, c=>3' % ARRAY['c','b']) +-- slice() +select slice(hstore 'aa=>1, b=>2, c=>3', ARRAY['g','h','i']); +select slice(hstore 'aa=>1, b=>2, c=>3', ARRAY['c','b']); +select slice(hstore 'aa=>1, b=>2, c=>3', ARRAY['aa','b']); +select slice(hstore 'aa=>1, b=>2, c=>3', ARRAY['c','b','aa']); +select pg_column_size(slice(hstore 'aa=>1, b=>2, c=>3', ARRAY['c','b'])) = pg_column_size('b=>2, c=>3'::hstore); -select pg_column_size(hstore 'aa=>1, b=>2, c=>3' % ARRAY['c','b','aa']) +select pg_column_size(slice(hstore 'aa=>1, b=>2, c=>3', ARRAY['c','b','aa'])) = pg_column_size('aa=>1, b=>2, c=>3'::hstore); -- array input diff --git a/contrib/hstore/uninstall_hstore.sql b/contrib/hstore/uninstall_hstore.sql index 468bfb3c96..ca2b05aa83 100644 --- a/contrib/hstore/uninstall_hstore.sql +++ b/contrib/hstore/uninstall_hstore.sql @@ -1,4 +1,4 @@ -/* $PostgreSQL: pgsql/contrib/hstore/uninstall_hstore.sql,v 1.10 2010/06/18 03:52:02 rhaas Exp $ */ +/* $PostgreSQL: pgsql/contrib/hstore/uninstall_hstore.sql,v 1.11 2010/07/02 20:36:48 rhaas Exp $ */ -- Adjust this setting to control where the objects get dropped. SET search_path = public; @@ -22,7 +22,6 @@ DROP OPERATOR <@ ( hstore, hstore ); DROP OPERATOR @ ( hstore, hstore ); DROP OPERATOR ~ ( hstore, hstore ); DROP OPERATOR => ( text, text ); -DROP OPERATOR % ( hstore, text[] ); DROP OPERATOR #= ( anyelement, hstore ); DROP OPERATOR %% ( NONE, hstore ); DROP OPERATOR %# ( NONE, hstore ); @@ -44,7 +43,7 @@ DROP FUNCTION hstore_le(hstore,hstore); DROP FUNCTION hstore_cmp(hstore,hstore); DROP FUNCTION hstore_hash(hstore); DROP FUNCTION slice_array(hstore,text[]); -DROP FUNCTION slice_hstore(hstore,text[]); +DROP FUNCTION slice(hstore,text[]); DROP FUNCTION fetchval(hstore,text); DROP FUNCTION isexists(hstore,text); DROP FUNCTION exist(hstore,text); diff --git a/doc/src/sgml/hstore.sgml b/doc/src/sgml/hstore.sgml index ef09a4ca86..c5effb88e0 100644 --- a/doc/src/sgml/hstore.sgml +++ b/doc/src/sgml/hstore.sgml @@ -1,4 +1,4 @@ - + hstore @@ -120,13 +120,6 @@ "a"=>"b" - - hstore % text[] - extract a subset of an hstore - 'a=>1,b=>2,c=>3'::hstore % ARRAY['b','c','x'] - "b"=>"2", "c"=>"3" - - hstore || hstore concatenate hstores @@ -338,6 +331,14 @@ b {{a,1},{b,2}} + + slice(hstore, text[]) + hstore + extract a subset of an hstore + slice('a=>1,b=>2,c=>3'::hstore, ARRAY['b','c','x']) + "b"=>"2", "c"=>"3" + + each(hstore) setof(key text, value text) -- 2.40.0