diff --git a/src/cdata.c b/src/cdata.c
index 32e8e4d0b8dbad51c5ec428d95b70543faefeca6..7ee14e643b9d8081997073e4188b2fca79c58c00 100644 (file)
--- a/src/cdata.c
+++ b/src/cdata.c
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);
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);
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)
{
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),