ERROR: bad seg representation
DETAIL: syntax error at or near "e"
SELECT '1e700'::seg AS seg;
-ERROR: syntax error
-DETAIL: numeric value 1e700 unrepresentable
+ERROR: "1e700" is out of range for type real
--
-- testing the operators
--
#include <math.h>
+#include "fmgr.h"
+#include "utils/builtins.h"
#include "segdata.h"
#undef yylex /* failure to redefine yylex will result in calling the */
%%
-float seg_atof ( char *value ) {
- float result;
- char *buf = (char *) palloc(256);
+float
+seg_atof(char *value)
+{
+ Datum datum;
- errno = 0;
- sscanf(value, "%f", &result);
-
- if ( errno ) {
- snprintf(buf, 256, "numeric value %s unrepresentable", value);
- ereport(ERROR,
- (errcode(ERRCODE_SYNTAX_ERROR),
- errmsg("syntax error"),
- errdetail("%s", buf)));
- }
-
- return result;
+ datum = DirectFunctionCall1(float4in, CStringGetDatum(value));
+ return DatumGetFloat4(datum);
}