mirror of
https://github.com/mdbtools/mdbtools.git
synced 2026-03-10 00:20:54 +08:00
sql: fix arbitrary path parentheses placement interfering with functions
This commit is contained in:
@@ -74,8 +74,8 @@ like { return LIKE; }
|
|||||||
limit { return LIMIT; }
|
limit { return LIMIT; }
|
||||||
top { return TOP; }
|
top { return TOP; }
|
||||||
percent { return PERCENT; }
|
percent { return PERCENT; }
|
||||||
count* { return COUNT; }
|
count\( { return COUNT; }
|
||||||
strptime* { return STRPTIME; }
|
strptime\( { return STRPTIME; }
|
||||||
[ \t\r] ;
|
[ \t\r] ;
|
||||||
|
|
||||||
\"[^"]*\"\" {
|
\"[^"]*\"\" {
|
||||||
@@ -114,7 +114,14 @@ strptime* { return STRPTIME; }
|
|||||||
(-?[0-9]+|(-?[0-9]*\.[0-9]+)(e[-+]?[0-9]+)?) {
|
(-?[0-9]+|(-?[0-9]*\.[0-9]+)(e[-+]?[0-9]+)?) {
|
||||||
yylval->name = g_strdup(yytext); return NUMBER;
|
yylval->name = g_strdup(yytext); return NUMBER;
|
||||||
}
|
}
|
||||||
~?(\/?[a-z0-9\.\-\_\!\~\'\%\xa0-\xff]+)+ {
|
~?(\/?[a-z0-9\.\-\_\!\~\'\(\)\%\xa0-\xff]+)+ {
|
||||||
|
if (yytext[0] == ')' && strlen(yytext) == 1) {
|
||||||
|
return CLOSING;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (yytext[0] == '(' && strlen(yytext) == 1) {
|
||||||
|
return OPENING;
|
||||||
|
}
|
||||||
yylval->name = g_strdup(yytext); return PATH;
|
yylval->name = g_strdup(yytext); return PATH;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ typedef struct sql_context
|
|||||||
|
|
||||||
%start stmt
|
%start stmt
|
||||||
|
|
||||||
%token <name> IDENT NAME PATH STRING NUMBER
|
%token <name> IDENT NAME PATH STRING NUMBER OPENING CLOSING
|
||||||
%token SELECT FROM WHERE CONNECT DISCONNECT TO LIST TABLES AND OR NOT LIMIT COUNT STRPTIME
|
%token SELECT FROM WHERE CONNECT DISCONNECT TO LIST TABLES AND OR NOT LIMIT COUNT STRPTIME
|
||||||
%token DESCRIBE TABLE TOP PERCENT
|
%token DESCRIBE TABLE TOP PERCENT
|
||||||
%token LTEQ GTEQ LIKE IS NUL
|
%token LTEQ GTEQ LIKE IS NUL
|
||||||
@@ -138,7 +138,7 @@ limit_clause:
|
|||||||
|
|
||||||
sarg_list:
|
sarg_list:
|
||||||
sarg
|
sarg
|
||||||
| '(' sarg_list ')'
|
| OPENING sarg_list CLOSING
|
||||||
| NOT sarg_list { mdb_sql_add_not(parser_ctx->mdb); }
|
| NOT sarg_list { mdb_sql_add_not(parser_ctx->mdb); }
|
||||||
| sarg_list OR sarg_list { mdb_sql_add_or(parser_ctx->mdb); }
|
| sarg_list OR sarg_list { mdb_sql_add_or(parser_ctx->mdb); }
|
||||||
| sarg_list AND sarg_list { mdb_sql_add_and(parser_ctx->mdb); }
|
| sarg_list AND sarg_list { mdb_sql_add_and(parser_ctx->mdb); }
|
||||||
@@ -201,10 +201,10 @@ nulloperator:
|
|||||||
;
|
;
|
||||||
|
|
||||||
constant:
|
constant:
|
||||||
STRPTIME '(' constant ',' constant ')' {
|
STRPTIME constant ',' constant CLOSING {
|
||||||
$$ = mdb_sql_strptime(parser_ctx->mdb, $3, $5);
|
$$ = mdb_sql_strptime(parser_ctx->mdb, $2, $4);
|
||||||
free($3);
|
free($2);
|
||||||
free($5);
|
free($4);
|
||||||
}
|
}
|
||||||
| NUMBER { $$ = $1; }
|
| NUMBER { $$ = $1; }
|
||||||
| STRING { $$ = $1; }
|
| STRING { $$ = $1; }
|
||||||
@@ -221,7 +221,7 @@ table:
|
|||||||
;
|
;
|
||||||
|
|
||||||
column_list:
|
column_list:
|
||||||
COUNT '(' '*' ')' { mdb_sql_sel_count(parser_ctx->mdb); }
|
COUNT '*' CLOSING { mdb_sql_sel_count(parser_ctx->mdb); }
|
||||||
| '*' { mdb_sql_all_columns(parser_ctx->mdb); }
|
| '*' { mdb_sql_all_columns(parser_ctx->mdb); }
|
||||||
| column
|
| column
|
||||||
| column ',' column_list
|
| column ',' column_list
|
||||||
|
|||||||
Reference in New Issue
Block a user