diff --git a/src/bin/pgbench/exprparse.y b/src/bin/pgbench/exprparse.y index 877244852d..64c29dcfa7 100644 --- a/src/bin/pgbench/exprparse.y +++ b/src/bin/pgbench/exprparse.y @@ -47,11 +47,11 @@ static PgBenchExpr *make_func(yyscan_t yyscanner, int fnumber, PgBenchExprList * %type elist %type expr -%type INTEGER function -%type DOUBLE +%type INTEGER_CONST function +%type DOUBLE_CONST %type VARIABLE FUNCTION -%token INTEGER DOUBLE VARIABLE FUNCTION +%token INTEGER_CONST DOUBLE_CONST VARIABLE FUNCTION /* Precedence: lowest to highest */ %left '+' '-' @@ -76,8 +76,8 @@ expr: '(' expr ')' { $$ = $2; } | expr '*' expr { $$ = make_op(yyscanner, "*", $1, $3); } | expr '/' expr { $$ = make_op(yyscanner, "/", $1, $3); } | expr '%' expr { $$ = make_op(yyscanner, "%", $1, $3); } - | INTEGER { $$ = make_integer_constant($1); } - | DOUBLE { $$ = make_double_constant($1); } + | INTEGER_CONST { $$ = make_integer_constant($1); } + | DOUBLE_CONST { $$ = make_double_constant($1); } | VARIABLE { $$ = make_variable($1); } | function '(' elist ')' { $$ = make_func(yyscanner, $1, $3); } ; diff --git a/src/bin/pgbench/exprscan.l b/src/bin/pgbench/exprscan.l index d8b706a99b..20891a3b22 100644 --- a/src/bin/pgbench/exprscan.l +++ b/src/bin/pgbench/exprscan.l @@ -123,12 +123,15 @@ newline [\n] } {digit}+ { yylval->ival = strtoint64(yytext); - return INTEGER; + return INTEGER_CONST; } {digit}+(\.{digit}*)?([eE][-+]?{digit}+)? { - yycolumn += yyleng; yylval->dval = atof(yytext); - return DOUBLE; + return DOUBLE_CONST; + } +\.{digit}+([eE][-+]?{digit}+)? { + yylval->dval = atof(yytext); + return DOUBLE_CONST; } {alpha}{alnum}* { yylval->str = pg_strdup(yytext); diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c index a2df4df20d..4cd5513fc6 100644 --- a/src/bin/pgbench/pgbench.c +++ b/src/bin/pgbench/pgbench.c @@ -1043,7 +1043,7 @@ coerceToInt(PgBenchValue *pval, int64 *ival) { double dval = pval->u.dval; Assert(pval->type == PGBT_DOUBLE); - if (dval < INT64_MIN || INT64_MAX < dval) + if (dval < PG_INT64_MIN || PG_INT64_MAX < dval) { fprintf(stderr, "double to int overflow for %f\n", dval); return false;