msi: sql parsing

Joris Huizer jorishuizer at planet.nl
Sat Jun 10 18:34:06 CDT 2006


Hello,

As somebody asked me whether I could try to use MSN Beta 8, I decided to 
give it a try; The installer quits at some point, caused by an unhandled 
SQL command "ALTER TABLE `Registry` HOLD"
I decided to have a look at this, but I'm not familiar with msi, and my 
SQL knowledge isn't very big either; anyway, I added a few lines to the 
parser; now -- how could I find how to implement something for this?

Regards,

Joris
-------------- next part --------------
diff --git a/dlls/msi/sql.y b/dlls/msi/sql.y
index 86ebe30..f8c9f40 100644
--- a/dlls/msi/sql.y
+++ b/dlls/msi/sql.y
@@ -79,7 +79,7 @@ static struct expr * EXPR_wildcard( void
     int integer;
 }
 
-%token TK_ABORT TK_AFTER TK_AGG_FUNCTION TK_ALL TK_AND TK_AS TK_ASC
+%token TK_ABORT TK_AFTER TK_ALTER TK_AGG_FUNCTION TK_ALL TK_AND TK_AS TK_ASC
 %token TK_BEFORE TK_BEGIN TK_BETWEEN TK_BITAND TK_BITNOT TK_BITOR TK_BY
 %token TK_CASCADE TK_CASE TK_CHAR TK_CHECK TK_CLUSTER TK_COLLATE TK_COLUMN
 %token TK_COMMA TK_COMMENT TK_COMMIT TK_CONCAT TK_CONFLICT 
@@ -127,7 +127,7 @@ static struct expr * EXPR_wildcard( void
 %type <column_list> selcollist column column_and_type column_def table_def
 %type <column_list> column_assignment update_assign_list constlist
 %type <query> query from fromtable selectfrom unorderedsel
-%type <query> oneupdate onedelete oneselect onequery onecreate oneinsert
+%type <query> oneupdate onedelete oneselect onequery onecreate oneinsert onealter
 %type <expr> expr val column_val const_val
 %type <column_type> column_type data_type data_type_l data_count
 %type <integer> number
@@ -156,6 +156,7 @@ onequery:
   | oneinsert
   | oneupdate
   | onedelete
+  | onealter
     ;
 
 oneinsert:
@@ -235,6 +236,14 @@ onedelete:
         }
     ;
 
+onealter:
+    TK_ALTER TK_TABLE table TK_HOLD 
+        {
+          FIXME("Unimplemented: ALTER TABLE, HOLD\n");
+          $$ = NULL;
+        }
+    ;
+
 table_def:
     column_def TK_PRIMARY TK_KEY selcollist
         {
@@ -807,7 +816,7 @@ UINT MSI_ParseSQL( MSIDATABASE *db, LPCW
     sql.len = 0;
     sql.view = phview;
     sql.mem = mem;
-
+    
     r = SQL_parse(&sql);
 
     TRACE("Parse returned %d\n", r);
diff --git a/dlls/msi/tokenize.c b/dlls/msi/tokenize.c
index 05c3cda..9b628c0 100644
--- a/dlls/msi/tokenize.c
+++ b/dlls/msi/tokenize.c
@@ -45,6 +45,7 @@ struct Keyword {
 static const Keyword aKeywordTable[] = {
   { "ABORT", TK_ABORT },
   { "AFTER", TK_AFTER },
+  { "ALTER", TK_ALTER },
   { "ALL", TK_ALL },
   { "AND", TK_AND },
   { "AS", TK_AS },


More information about the wine-devel mailing list