Code

postrr.sql: Added PostRR_update() functions.
[postrr.git] / src / cdata.c
index 32e8e4d0b8dbad51c5ec428d95b70543faefeca6..7ee14e643b9d8081997073e4188b2fca79c58c00 100644 (file)
@@ -79,6 +79,7 @@ PG_FUNCTION_INFO_V1(cdata_typmodout);
 
 PG_FUNCTION_INFO_V1(cdata_to_cdata);
 PG_FUNCTION_INFO_V1(int32_to_cdata);
+PG_FUNCTION_INFO_V1(cdata_to_float8);
 
 PG_FUNCTION_INFO_V1(cdata_update);
 
@@ -188,8 +189,9 @@ cdata_out(PG_FUNCTION_ARGS)
 
        data = PG_GETARG_CDATA_P(0);
 
-       snprintf(cd_str, sizeof(cd_str), "%g (U:%i/%i)",
-                       data->value, data->undef_num, data->val_num);
+       snprintf(cd_str, sizeof(cd_str), "%g (%s U:%i/%i)",
+                       data->value, CF_TO_STR(data->cf),
+                       data->undef_num, data->val_num);
 
        result = pstrdup(cd_str);
        PG_RETURN_CSTRING(result);
@@ -331,6 +333,21 @@ int32_to_cdata(PG_FUNCTION_ARGS)
        PG_RETURN_CDATA_P(data);
 } /* int32_to_cdata */
 
+Datum
+cdata_to_float8(PG_FUNCTION_ARGS)
+{
+       cdata_t *data;
+
+       if (PG_NARGS() != 1)
+               ereport(ERROR, (
+                                       errmsg("cdata_to_float8() expects one argument"),
+                                       errhint("Usage: cdata_to_float8(cdata)")
+                               ));
+
+       data = PG_GETARG_CDATA_P(0);
+       PG_RETURN_FLOAT8(data->value);
+} /* cdata_to_float8 */
+
 Datum
 cdata_update(PG_FUNCTION_ARGS)
 {
@@ -346,6 +363,12 @@ 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 (! update)
+               PG_RETURN_CDATA_P(data);
+
        if ((data->cf != update->cf) && (update->val_num > 1))
                ereport(ERROR, (
                                        errcode(ERRCODE_INVALID_PARAMETER_VALUE),