This adds the strict function attribute to the places in contrib that 
crash on null inputs.

Kris Jurka
Index: contrib/chkpass/chkpass.sql.in
===================================================================
RCS file: /projects/cvsroot/pgsql/contrib/chkpass/chkpass.sql.in,v
retrieving revision 1.5
diff -c -r1.5 chkpass.sql.in
*** contrib/chkpass/chkpass.sql.in      29 Nov 2003 19:51:19 -0000      1.5
--- contrib/chkpass/chkpass.sql.in      29 Jan 2005 03:03:13 -0000
***************
*** 19,30 ****
  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,
--- 19,30 ----
  CREATE FUNCTION chkpass_in(cstring)
        RETURNS chkpass
        AS 'MODULE_PATHNAME'
!       LANGUAGE C STRICT;
  
  CREATE FUNCTION chkpass_out(chkpass)
        RETURNS cstring
        AS 'MODULE_PATHNAME'
!       LANGUAGE C STRICT;
  
  CREATE TYPE chkpass (
        internallength = 16,
***************
*** 36,42 ****
  CREATE FUNCTION raw(chkpass)
        RETURNS text
        AS 'MODULE_PATHNAME', 'chkpass_rout'
!       LANGUAGE 'c';
  
  --
  --    The various boolean tests:
--- 36,42 ----
  CREATE FUNCTION raw(chkpass)
        RETURNS text
        AS 'MODULE_PATHNAME', 'chkpass_rout'
!       LANGUAGE C STRICT;
  
  --
  --    The various boolean tests:
***************
*** 45,56 ****
  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';
  
  --
  --    Now the operators.  Note how some of the parameters to some
--- 45,56 ----
  CREATE FUNCTION eq(chkpass, text)
        RETURNS bool
        AS 'MODULE_PATHNAME', 'chkpass_eq'
!       LANGUAGE C STRICT;
  
  CREATE FUNCTION ne(chkpass, text)
        RETURNS bool
        AS 'MODULE_PATHNAME', 'chkpass_ne'
!       LANGUAGE C STRICT;
  
  --
  --    Now the operators.  Note how some of the parameters to some
Index: contrib/isbn_issn/isbn_issn.sql.in
===================================================================
RCS file: /projects/cvsroot/pgsql/contrib/isbn_issn/isbn_issn.sql.in,v
retrieving revision 1.10
diff -c -r1.10 isbn_issn.sql.in
*** contrib/isbn_issn/isbn_issn.sql.in  29 Nov 2003 22:39:20 -0000      1.10
--- contrib/isbn_issn/isbn_issn.sql.in  29 Jan 2005 03:03:13 -0000
***************
*** 14,25 ****
  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,
--- 14,25 ----
  CREATE FUNCTION issn_in(cstring)
  RETURNS issn
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' STRICT;
  
  CREATE FUNCTION issn_out(issn)
  RETURNS cstring
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' STRICT;
  
  CREATE TYPE issn (
        INTERNALLENGTH = 16,
***************
*** 39,70 ****
  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_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_gt(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
--- 39,70 ----
  CREATE FUNCTION issn_lt(issn, issn)
  RETURNS bool
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' STRICT;
  
  CREATE FUNCTION issn_le(issn, issn)
  RETURNS bool
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' STRICT;
  
  CREATE FUNCTION issn_eq(issn, issn)
  RETURNS bool
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' STRICT;
  
  CREATE FUNCTION issn_ge(issn, issn)
  RETURNS bool
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' STRICT;
  
  CREATE FUNCTION issn_gt(issn, issn)
  RETURNS bool
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' STRICT;
  
  CREATE FUNCTION issn_ne(issn, issn)
  RETURNS bool
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' STRICT;
  
  --
  --    Now the operators.  Note how some of the parameters to some
***************
*** 120,126 ****
  CREATE FUNCTION issn_cmp(issn, issn)
  RETURNS integer
  AS '$libdir/isbn_issn'
! LANGUAGE c;
  
  -- Create default operator class for 'issn'    --
  -- Needed to create index or primary key       --
--- 120,126 ----
  CREATE FUNCTION issn_cmp(issn, issn)
  RETURNS integer
  AS '$libdir/isbn_issn'
! LANGUAGE c STRICT;
  
  -- Create default operator class for 'issn'    --
  -- Needed to create index or primary key       --
***************
*** 147,158 ****
  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,
--- 147,158 ----
  CREATE FUNCTION isbn_in(cstring)
  RETURNS isbn
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' STRICT;
  
  CREATE FUNCTION isbn_out(isbn)
  RETURNS cstring
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' STRICT;
  
  CREATE TYPE isbn (
        INTERNALLENGTH = 16,
***************
*** 171,202 ****
  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_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_gt(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
--- 171,202 ----
  CREATE FUNCTION isbn_lt(isbn, isbn)
  RETURNS bool
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' STRICT;
  
  CREATE FUNCTION isbn_le(isbn, isbn)
  RETURNS bool
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' STRICT;
  
  CREATE FUNCTION isbn_eq(isbn, isbn)
  RETURNS bool
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' STRICT;
  
  CREATE FUNCTION isbn_ge(isbn, isbn)
  RETURNS bool
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' STRICT;
  
  CREATE FUNCTION isbn_gt(isbn, isbn)
  RETURNS bool
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' STRICT;
  
  CREATE FUNCTION isbn_ne(isbn, isbn)
  RETURNS bool
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' STRICT;
  
  --
  --    Now the operators.  Note how some of the parameters to some
***************
*** 253,259 ****
  CREATE FUNCTION isbn_cmp(isbn, isbn)
  RETURNS integer
  AS '$libdir/isbn_issn'
! LANGUAGE c;
  
  -- Create default operator class for 'isbn'    --
  -- Needed to create index or primary key       --
--- 253,259 ----
  CREATE FUNCTION isbn_cmp(isbn, isbn)
  RETURNS integer
  AS '$libdir/isbn_issn'
! LANGUAGE c STRICT;
  
  -- Create default operator class for 'isbn'    --
  -- Needed to create index or primary key       --
Index: contrib/lo/lo.sql.in
===================================================================
RCS file: /projects/cvsroot/pgsql/contrib/lo/lo.sql.in,v
retrieving revision 1.11
diff -c -r1.11 lo.sql.in
*** contrib/lo/lo.sql.in        29 Nov 2003 22:39:22 -0000      1.11
--- contrib/lo/lo.sql.in        29 Jan 2005 03:03:13 -0000
***************
*** 15,27 ****
  CREATE FUNCTION lo_in(cstring)
  RETURNS lo
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' IMMUTABLE;
  
  -- used by the lo type, it returns the oid of the object
  CREATE FUNCTION lo_out(lo)
  RETURNS cstring
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' IMMUTABLE;
  
  -- finally the type itself
  CREATE TYPE lo (
--- 15,27 ----
  CREATE FUNCTION lo_in(cstring)
  RETURNS lo
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' IMMUTABLE STRICT;
  
  -- used by the lo type, it returns the oid of the object
  CREATE FUNCTION lo_out(lo)
  RETURNS cstring
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' IMMUTABLE STRICT;
  
  -- finally the type itself
  CREATE TYPE lo (
***************
*** 35,41 ****
  CREATE FUNCTION lo_oid(lo)
  RETURNS oid
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' IMMUTABLE;
  
  -- same function, named to allow it to be used as a type coercion, eg:
  --    CREATE TABLE a (image lo);
--- 35,41 ----
  CREATE FUNCTION lo_oid(lo)
  RETURNS oid
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' IMMUTABLE STRICT;
  
  -- same function, named to allow it to be used as a type coercion, eg:
  --    CREATE TABLE a (image lo);
***************
*** 44,50 ****
  CREATE FUNCTION oid(lo)
  RETURNS oid
  AS 'MODULE_PATHNAME', 'lo_oid'
! LANGUAGE 'C' IMMUTABLE;
  CREATE CAST (lo as oid) WITH FUNCTION oid(lo) AS IMPLICIT;
  
  -- this allows us to convert an oid to a managed lo object
--- 44,50 ----
  CREATE FUNCTION oid(lo)
  RETURNS oid
  AS 'MODULE_PATHNAME', 'lo_oid'
! LANGUAGE 'C' IMMUTABLE STRICT;
  CREATE CAST (lo as oid) WITH FUNCTION oid(lo) AS IMPLICIT;
  
  -- this allows us to convert an oid to a managed lo object
***************
*** 52,58 ****
  CREATE FUNCTION lo(oid)
  RETURNS lo
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' IMMUTABLE;
  CREATE CAST (oid as lo) WITH FUNCTION lo(oid) AS IMPLICIT;
  
  -- This is used in triggers
--- 52,58 ----
  CREATE FUNCTION lo(oid)
  RETURNS lo
  AS 'MODULE_PATHNAME'
! LANGUAGE 'C' IMMUTABLE STRICT;
  CREATE CAST (oid as lo) WITH FUNCTION lo(oid) AS IMPLICIT;
  
  -- This is used in triggers
---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
    (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])

Reply via email to