summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane2016-03-29 04:53:53 +0000
committerTom Lane2016-03-29 04:53:53 +0000
commit656ee8489053aafc85324b9ef7e91b645674ffb9 (patch)
treebeface55de6e59cafb1131133393b2edb42e7a4c /src
parent5d4171d1c70edfe3e9be1de9e66603af28e3afe1 (diff)
Fix portability issues in 86c43f4e22c0771fd0cc6bce2799802c894ee2ec.
INT64_MIN/MAX should be spelled PG_INT64_MIN/MAX, per well established convention in our sources. Less obviously, a symbol named DOUBLE causes problems on Windows builds, so rename that to DOUBLE_CONST; and rename INTEGER to INTEGER_CONST for consistency. Also, get rid of incorrect/obsolete hand-munging of yycolumn, and fix the grammar for float constants to handle expected cases such as ".1". First two items by Michael Paquier, second two by me.
Diffstat (limited to 'src')
-rw-r--r--src/bin/pgbench/exprparse.y10
-rw-r--r--src/bin/pgbench/exprscan.l9
-rw-r--r--src/bin/pgbench/pgbench.c2
3 files changed, 12 insertions, 9 deletions
diff --git a/src/bin/pgbench/exprparse.y b/src/bin/pgbench/exprparse.y
index 877244852dd..64c29dcfa7b 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> elist
%type <expr> expr
-%type <ival> INTEGER function
-%type <dval> DOUBLE
+%type <ival> INTEGER_CONST function
+%type <dval> DOUBLE_CONST
%type <str> 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 d8b706a99bc..20891a3b227 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 a2df4df20d9..4cd5513fc62 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;