88 *
99 *
1010 * IDENTIFICATION
11- * $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.48 1999/05/03 19:09:42 momjian Exp $
11+ * $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.49 1999/05/12 07:12:51 thomas Exp $
1212 *
1313 *-------------------------------------------------------------------------
1414*/
3737#endif
3838#define YY_READ_BUF_SIZE MAX_PARSE_BUFFER
3939
40+ #ifdef YY_READ_BUF_SIZE
41+ #undef YY_READ_BUF_SIZE
42+ #endif
43+ #define YY_READ_BUF_SIZE MAX_PARSE_BUFFER
44+
4045extern char *parseString;
4146static char *parseCh;
4247
@@ -157,10 +162,11 @@ operator{op_and_self}+
157162xmstop -
158163
159164integer [\- ]? {digit }+
165+ decimal [\- ]? (({digit }* \. {digit }+ )| ({digit }+ \. {digit }* ))
166+ real [\- ]? ((({digit }* \. {digit }+ )| ({digit }+ \. {digit }* )| ({digit }+ ))([Ee ][-+ ]? {digit }+ ))
160167/*
161- real[\-]?{digit}+\.{digit}+([Ee][-+]?{digit}+)?
162- */
163168real[\-]?(((({digit}*\.{digit}+)|({digit}+\.{digit}*))([Ee][-+]?{digit}+)?)|({digit}+[Ee][-+]?{digit}+))
169+ */
164170
165171param \$ {integer }
166172
@@ -339,15 +345,35 @@ other.
339345if (*endptr !=' \0 ' || errno == ERANGE)
340346{
341347errno =0 ;
348+ #if 0
342349yylval.dval = strtod(((char *)yytext),&endptr);
343350if (*endptr != '\0' || errno == ERANGE)
344351elog(ERROR,"Bad integer input '%s'",yytext);
345352CheckFloat8Val(yylval.dval);
346353elog(NOTICE,"Integer input '%s' is out of range; promoted to float", yytext);
347354return FCONST;
355+ #endif
356+ yylval.str =pstrdup ((char *)yytext);
357+ return SCONST;
348358}
349359return ICONST;
350360}
361+ {decimal }/ {space }* -{number } {
362+ char * endptr;
363+
364+ BEGIN (xm);
365+ if (strlen ((char *)yytext) <=17 )
366+ {
367+ errno =0 ;
368+ yylval.dval =strtod (((char *)yytext),&endptr);
369+ if (*endptr !=' \0 ' || errno == ERANGE)
370+ elog (ERROR," Bad float8 input '%s'" ,yytext);
371+ CheckFloat8Val (yylval.dval );
372+ return FCONST;
373+ }
374+ yylval.str =pstrdup ((char *)yytext);
375+ return SCONST;
376+ }
351377{real }/ {space }* -{number } {
352378char * endptr;
353379
@@ -367,15 +393,34 @@ other.
367393if (*endptr !=' \0 ' || errno == ERANGE)
368394{
369395errno =0 ;
396+ #if 0
370397yylval.dval = strtod(((char *)yytext),&endptr);
371398if (*endptr != '\0' || errno == ERANGE)
372399elog(ERROR,"Bad integer input '%s'",yytext);
373400CheckFloat8Val(yylval.dval);
374401elog(NOTICE,"Integer input '%s' is out of range; promoted to float", yytext);
375402return FCONST;
403+ #endif
404+ yylval.str =pstrdup ((char *)yytext);
405+ return SCONST;
376406}
377407return ICONST;
378408}
409+ {decimal }{
410+ char * endptr;
411+
412+ if (strlen ((char *)yytext) <=17 )
413+ {
414+ errno =0 ;
415+ yylval.dval =strtod ((char *)yytext,&endptr);
416+ if (*endptr !=' \0 ' || errno == ERANGE)
417+ elog (ERROR," Bad float input '%s'" ,yytext);
418+ CheckFloat8Val (yylval.dval );
419+ return FCONST;
420+ }
421+ yylval.str =pstrdup ((char *)yytext);
422+ return SCONST;
423+ }
379424{real }{
380425char * endptr;
381426