diff --git a/src/cdata.c b/src/cdata.c
index 03fefbc6c510f45556c76237472c1139895e7365..2630e733d35d10200e9938adc5082ff6bc200ea2 100644 (file)
--- a/src/cdata.c
+++ b/src/cdata.c
));
while ((*endptr != '\0') && isspace((int)*endptr))
+ ++endptr;
+
+ if (*endptr != '\0')
ereport(ERROR, (
errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
- errmsg("invalid input syntax for cdata: \"%s\"", orig)
+ errmsg("invalid input syntax for cdata: \"%s\"", orig),
+ errdetail("garbage found after number: \"%s\"", endptr)
));
if (typmod > 0)
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);
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),