This patch updates the DDL for contrib/pgcrypto to create all
functions as STRICT, and all functions except gen_salt() as IMMUTABLE.
gen_salt() is VOLATILE.

Although the functions are now STRICT, I left their PG_ARGISNULL()
checks in place as a protective measure for users who install the
new code but use old (non-STRICT) catalog entries (e.g., restored
from a dump).  Per recent discussion in pgsql-hackers.

-- 
Michael Fuhr
http://www.fuhr.org/~mfuhr/
Index: contrib/pgcrypto/pgcrypto.sql.in
===================================================================
RCS file: /projects/cvsroot/pgsql/contrib/pgcrypto/pgcrypto.sql.in,v
retrieving revision 1.9
diff -c -r1.9 pgcrypto.sql.in
*** contrib/pgcrypto/pgcrypto.sql.in    14 May 2003 03:25:56 -0000      1.9
--- contrib/pgcrypto/pgcrypto.sql.in    5 Jul 2005 14:11:45 -0000
***************
*** 4,74 ****
  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';
  
  
--- 4,74 ----
  CREATE OR REPLACE FUNCTION digest(text, text)
  RETURNS bytea
  AS 'MODULE_PATHNAME', 'pg_digest'
! LANGUAGE 'C' IMMUTABLE STRICT;
  
  CREATE OR REPLACE FUNCTION digest(bytea, text)
  RETURNS bytea
  AS 'MODULE_PATHNAME', 'pg_digest'
! LANGUAGE 'C' IMMUTABLE STRICT;
  
  CREATE OR REPLACE FUNCTION digest_exists(text)
  RETURNS bool
  AS 'MODULE_PATHNAME', 'pg_digest_exists'
! LANGUAGE 'C' IMMUTABLE STRICT;
  
  CREATE OR REPLACE FUNCTION hmac(text, text, text)
  RETURNS bytea
  AS 'MODULE_PATHNAME', 'pg_hmac'
! LANGUAGE 'C' IMMUTABLE STRICT;
  
  CREATE OR REPLACE FUNCTION hmac(bytea, bytea, text)
  RETURNS bytea
  AS 'MODULE_PATHNAME', 'pg_hmac'
! LANGUAGE 'C' IMMUTABLE STRICT;
  
  CREATE OR REPLACE FUNCTION hmac_exists(text)
  RETURNS bool
  AS 'MODULE_PATHNAME', 'pg_hmac_exists'
! LANGUAGE 'C' IMMUTABLE STRICT;
  
  CREATE OR REPLACE FUNCTION crypt(text, text)
  RETURNS text
  AS 'MODULE_PATHNAME', 'pg_crypt'
! LANGUAGE 'C' IMMUTABLE STRICT;
  
  CREATE OR REPLACE FUNCTION gen_salt(text)
  RETURNS text
  AS 'MODULE_PATHNAME', 'pg_gen_salt'
! LANGUAGE 'C' VOLATILE STRICT;
  
  CREATE OR REPLACE FUNCTION gen_salt(text, int4)
  RETURNS text
  AS 'MODULE_PATHNAME', 'pg_gen_salt_rounds'
! LANGUAGE 'C' VOLATILE STRICT;
  
  CREATE OR REPLACE FUNCTION encrypt(bytea, bytea, text)
  RETURNS bytea
  AS 'MODULE_PATHNAME', 'pg_encrypt'
! LANGUAGE 'C' IMMUTABLE STRICT;
  
  CREATE OR REPLACE FUNCTION decrypt(bytea, bytea, text)
  RETURNS bytea
  AS 'MODULE_PATHNAME', 'pg_decrypt'
! LANGUAGE 'C' IMMUTABLE STRICT;
  
  CREATE OR REPLACE FUNCTION encrypt_iv(bytea, bytea, bytea, text)
  RETURNS bytea
  AS 'MODULE_PATHNAME', 'pg_encrypt_iv'
! LANGUAGE 'C' IMMUTABLE STRICT;
  
  CREATE OR REPLACE FUNCTION decrypt_iv(bytea, bytea, bytea, text)
  RETURNS bytea
  AS 'MODULE_PATHNAME', 'pg_decrypt_iv'
! LANGUAGE 'C' IMMUTABLE STRICT;
  
  CREATE OR REPLACE FUNCTION cipher_exists(text)
  RETURNS bool
  AS 'MODULE_PATHNAME', 'pg_cipher_exists'
! LANGUAGE 'C' IMMUTABLE STRICT;
  
  
---------------------------(end of broadcast)---------------------------
TIP 8: explain analyze is your friend

Reply via email to