mirror of
https://github.com/postgres/postgres.git
synced 2025-06-26 12:21:12 +03:00
Fix portability issues in 86c43f4e22
.
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.
This commit is contained in:
@ -47,11 +47,11 @@ static PgBenchExpr *make_func(yyscan_t yyscanner, int fnumber, PgBenchExprList *
|
|||||||
|
|
||||||
%type <elist> elist
|
%type <elist> elist
|
||||||
%type <expr> expr
|
%type <expr> expr
|
||||||
%type <ival> INTEGER function
|
%type <ival> INTEGER_CONST function
|
||||||
%type <dval> DOUBLE
|
%type <dval> DOUBLE_CONST
|
||||||
%type <str> VARIABLE FUNCTION
|
%type <str> VARIABLE FUNCTION
|
||||||
|
|
||||||
%token INTEGER DOUBLE VARIABLE FUNCTION
|
%token INTEGER_CONST DOUBLE_CONST VARIABLE FUNCTION
|
||||||
|
|
||||||
/* Precedence: lowest to highest */
|
/* Precedence: lowest to highest */
|
||||||
%left '+' '-'
|
%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); }
|
| 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); }
|
| INTEGER_CONST { $$ = make_integer_constant($1); }
|
||||||
| DOUBLE { $$ = make_double_constant($1); }
|
| DOUBLE_CONST { $$ = make_double_constant($1); }
|
||||||
| VARIABLE { $$ = make_variable($1); }
|
| VARIABLE { $$ = make_variable($1); }
|
||||||
| function '(' elist ')' { $$ = make_func(yyscanner, $1, $3); }
|
| function '(' elist ')' { $$ = make_func(yyscanner, $1, $3); }
|
||||||
;
|
;
|
||||||
|
@ -123,12 +123,15 @@ newline [\n]
|
|||||||
}
|
}
|
||||||
{digit}+ {
|
{digit}+ {
|
||||||
yylval->ival = strtoint64(yytext);
|
yylval->ival = strtoint64(yytext);
|
||||||
return INTEGER;
|
return INTEGER_CONST;
|
||||||
}
|
}
|
||||||
{digit}+(\.{digit}*)?([eE][-+]?{digit}+)? {
|
{digit}+(\.{digit}*)?([eE][-+]?{digit}+)? {
|
||||||
yycolumn += yyleng;
|
|
||||||
yylval->dval = atof(yytext);
|
yylval->dval = atof(yytext);
|
||||||
return DOUBLE;
|
return DOUBLE_CONST;
|
||||||
|
}
|
||||||
|
\.{digit}+([eE][-+]?{digit}+)? {
|
||||||
|
yylval->dval = atof(yytext);
|
||||||
|
return DOUBLE_CONST;
|
||||||
}
|
}
|
||||||
{alpha}{alnum}* {
|
{alpha}{alnum}* {
|
||||||
yylval->str = pg_strdup(yytext);
|
yylval->str = pg_strdup(yytext);
|
||||||
|
@ -1043,7 +1043,7 @@ coerceToInt(PgBenchValue *pval, int64 *ival)
|
|||||||
{
|
{
|
||||||
double dval = pval->u.dval;
|
double dval = pval->u.dval;
|
||||||
Assert(pval->type == PGBT_DOUBLE);
|
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);
|
fprintf(stderr, "double to int overflow for %f\n", dval);
|
||||||
return false;
|
return false;
|
||||||
|
Reference in New Issue
Block a user