From f50e9aadea7f62a0ceef046d876678d105b70531 Mon Sep 17 00:00:00 2001 From: Mike McCormack <mike@codeweavers.com> Date: Mon, 23 May 2005 11:49:49 +0000 Subject: [PATCH] Simplify parsing of select query. --- dlls/msi/sql.y | 57 +++++++++++++++++++------------------------------- 1 file changed, 21 insertions(+), 36 deletions(-) diff --git a/dlls/msi/sql.y b/dlls/msi/sql.y index fbe813ddf12..e4bd95b037c 100644 --- a/dlls/msi/sql.y +++ b/dlls/msi/sql.y @@ -52,9 +52,6 @@ static LPWSTR SQL_getstring( struct sql_str *str ); static INT SQL_getint( SQL_input *sql ); static int SQL_lex( void *SQL_lval, SQL_input *info); -static MSIVIEW *do_one_select( MSIDATABASE *db, MSIVIEW *in, - string_list *columns ); - static BOOL SQL_MarkPrimaryKeys( create_col_info *cols, string_list *keys); @@ -127,7 +124,7 @@ static struct expr * EXPR_wildcard(); %type <string> column table id %type <column_list> selcollist -%type <query> query from unorderedsel +%type <query> query from unorderedsel selectfrom %type <query> oneupdate onedelete oneselect onequery onecreate oneinsert %type <expr> expr val column_val const_val %type <column_type> column_type data_type data_type_l data_count @@ -340,34 +337,34 @@ oneselect: ; unorderedsel: - TK_SELECT selcollist from + TK_SELECT selectfrom + { + $$ = $2; + } + | TK_SELECT TK_DISTINCT selectfrom { SQL_input* sql = (SQL_input*) info; - if( !$3 ) + + $$ = NULL; + DISTINCT_CreateView( sql->db, &$$, $3 ); + if( !$$ ) YYABORT; - if( $2 ) - { - $$ = do_one_select( sql->db, $3, $2 ); - if( !$$ ) - YYABORT; - } - else - $$ = $3; } - | TK_SELECT TK_DISTINCT selcollist from + ; + +selectfrom: + selcollist from { SQL_input* sql = (SQL_input*) info; - MSIVIEW *view = $4; - if( !view ) + $$ = NULL; + if( $1 ) + SELECT_CreateView( sql->db, &$$, $2, $1 ); + else + $$ = $2; + + if( !$$ ) YYABORT; - if( $3 ) - { - view = do_one_select( sql->db, view, $3 ); - if( !view ) - YYABORT; - } - DISTINCT_CreateView( sql->db, & $$, view ); } ; @@ -677,18 +674,6 @@ int SQL_error(const char *str) return 0; } -static MSIVIEW *do_one_select( MSIDATABASE *db, MSIVIEW *in, - string_list *columns ) -{ - MSIVIEW *view = NULL; - - SELECT_CreateView( db, &view, in, columns ); - delete_string_list( columns ); - if( !view ) - ERR("Error creating select query\n"); - return view; -} - static struct expr * EXPR_wildcard() { struct expr *e = HeapAlloc( GetProcessHeap(), 0, sizeof *e ); -- GitLab