}
/* Convenience macro: set *have_error flag (if provided) or throw error */
-#define RETURN_ERROR(throw_error) \
+#define RETURN_ERROR(throw_error, have_error) \
do { \
if (have_error) { \
*have_error = true; \
double val;
char *endptr;
+ if (have_error)
+ *have_error = false;
+
/* skip leading whitespace */
while (*num != '\0' && isspace((unsigned char) *num))
num++;
RETURN_ERROR(ereport(ERROR,
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
errmsg("invalid input syntax for type %s: \"%s\"",
- type_name, orig_string))));
+ type_name, orig_string))),
+ have_error);
errno = 0;
val = strtod(num, &endptr);
errnumber[endptr - num] = '\0';
RETURN_ERROR(ereport(ERROR,
(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
- errmsg("\"%s\" is out of range for "
- "type double precision",
- errnumber))));
+ errmsg("\"%s\" is out of range for type double precision",
+ errnumber))),
+ have_error);
}
}
else
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
errmsg("invalid input syntax for type "
"%s: \"%s\"",
- type_name, orig_string))));
+ type_name, orig_string))),
+ have_error);
}
#ifdef HAVE_BUGGY_SOLARIS_STRTOD
else
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
errmsg("invalid input syntax for type "
"%s: \"%s\"",
- type_name, orig_string))));
+ type_name, orig_string))),
+ have_error);
return val;
}