Code

CData: Declared CData_update() as not strict.
authorSebastian Harl <sh@tokkee.org>
Tue, 23 Oct 2012 10:49:11 +0000 (12:49 +0200)
committerSebastian Harl <sh@tokkee.org>
Tue, 23 Oct 2012 10:49:11 +0000 (12:49 +0200)
Any or all arguments may in fact be NULL. This happens, e.g., when updating
single CData columns one by one. In this case, use the other argument as
return value, i.e. leaving it unmodified.

src/cdata.c
src/postrr.sql.in

index 26f2656acbb5d544fd644ea1bc5e70d453238401..c4f934034fcad12153546f500a649a42b69e9526 100644 (file)
@@ -363,6 +363,9 @@ cdata_update(PG_FUNCTION_ARGS)
        data   = PG_GETARG_CDATA_P(0);
        update = PG_GETARG_CDATA_P(1);
 
+       if (! data)
+               PG_RETURN_CDATA_P(update);
+
        if ((data->cf != update->cf) && (update->val_num > 1))
                ereport(ERROR, (
                                        errcode(ERRCODE_INVALID_PARAMETER_VALUE),
index 68c47dfbba04114f964fdfeb007b5cb3f1851c54..01cd65f8a6be9b2c49339c629f6f0efcc72a6f4e 100644 (file)
@@ -292,7 +292,7 @@ CREATE CAST (cdata AS double precision)
 CREATE OR REPLACE FUNCTION CData_update(cdata, cdata)
        RETURNS cdata
        AS 'postrr-@POSTRR_MAJOR_VERSION@.@POSTRR_MINOR_VERSION@', 'cdata_update'
-       LANGUAGE 'C' IMMUTABLE STRICT;
+       LANGUAGE 'C' IMMUTABLE;
 
 COMMIT;