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