MSI: simplify parsing of select query

Mike McCormack mike at codeweavers.com
Sun May 22 20:35:22 CDT 2005


ChangeLog:
* simplify parsing of select query
-------------- next part --------------
Binary files dlls/msi.old/msi.dll.so and dlls/msi/msi.dll.so differ
diff -urp dlls/msi.old/sql.y dlls/msi/sql.y
--- dlls/msi.old/sql.y	2005-05-23 10:28:31.000000000 +0900
+++ dlls/msi/sql.y	2005-05-23 10:28:54.000000000 +0900
@@ -52,9 +52,6 @@ static LPWSTR SQL_getstring( struct sql_
 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 );


More information about the wine-patches mailing list