[PATCH 10/13] msi: Don't add info to the _Columns table for non-persistent tables.

Robert Shearman rob at codeweavers.com
Mon Apr 23 02:25:17 CDT 2007


---
  dlls/msi/table.c    |   71 
+++++++++++++++++++++++++++------------------------
  dlls/msi/tests/db.c |    2 -
  2 files changed, 37 insertions(+), 36 deletions(-)
-------------- next part --------------
diff --git a/dlls/msi/table.c b/dlls/msi/table.c
index 75b4c34..5a42f5f 100644
--- a/dlls/msi/table.c
+++ b/dlls/msi/table.c
@@ -670,7 +670,7 @@ UINT msi_create_table( MSIDATABASE *db, 
     if( r )
         goto err;
 
-    r = tv->ops->insert_row( tv, rec, FALSE );
+    r = tv->ops->insert_row( tv, rec, !persistent );
     TRACE("insert_row returned %x\n", r);
     if( r )
         goto err;
@@ -680,51 +680,54 @@ UINT msi_create_table( MSIDATABASE *db, 
 
     msiobj_release( &rec->hdr );
 
-    /* add each column to the _Columns table */
-    r = TABLE_CreateView( db, szColumns, &tv );
-    if( r )
-        return r;
-
-    r = tv->ops->execute( tv, 0 );
-    TRACE("tv execute returned %x\n", r);
-    if( r )
-        goto err;
-
-    rec = MSI_CreateRecord( 4 );
-    if( !rec )
-        goto err;
-
-    r = MSI_RecordSetStringW( rec, 1, name );
-    if( r )
-        goto err;
-
-    /*
-     * need to set the table, column number, col name and type
-     * for each column we enter in the table
-     */
-    nField = 1;
-    for( col = col_info; col; col = col->next )
+    if( persistent )
     {
-        r = MSI_RecordSetInteger( rec, 2, nField );
+        /* add each column to the _Columns table */
+        r = TABLE_CreateView( db, szColumns, &tv );
         if( r )
-            goto err;
+            return r;
 
-        r = MSI_RecordSetStringW( rec, 3, col->column );
+        r = tv->ops->execute( tv, 0 );
+        TRACE("tv execute returned %x\n", r);
         if( r )
             goto err;
 
-        r = MSI_RecordSetInteger( rec, 4, col->type );
-        if( r )
+        rec = MSI_CreateRecord( 4 );
+        if( !rec )
             goto err;
 
-        r = tv->ops->insert_row( tv, rec, !persistent );
+        r = MSI_RecordSetStringW( rec, 1, name );
         if( r )
             goto err;
 
-        nField++;
+        /*
+         * need to set the table, column number, col name and type
+         * for each column we enter in the table
+         */
+        nField = 1;
+        for( col = col_info; col; col = col->next )
+        {
+            r = MSI_RecordSetInteger( rec, 2, nField );
+            if( r )
+                goto err;
+
+            r = MSI_RecordSetStringW( rec, 3, col->column );
+            if( r )
+                goto err;
+
+            r = MSI_RecordSetInteger( rec, 4, col->type );
+            if( r )
+                goto err;
+
+            r = tv->ops->insert_row( tv, rec, FALSE );
+            if( r )
+                goto err;
+
+            nField++;
+        }
+        if( !col )
+            r = ERROR_SUCCESS;
     }
-    if( !col )
-        r = ERROR_SUCCESS;
 
 err:
     if (rec)
diff --git a/dlls/msi/tests/db.c b/dlls/msi/tests/db.c
index dc5e42d..927ef56 100644
--- a/dlls/msi/tests/db.c
+++ b/dlls/msi/tests/db.c
@@ -2730,7 +2730,6 @@ static void test_temporary_table(void)
     ok( r == ERROR_SUCCESS, "temporary table exists in _Tables\n");
     MsiCloseHandle( rec );
 
-    todo_wine {
     /* query the column data */
     rec = 0;
     r = do_query(hdb, "select * from `_Columns` where `Table` = 'T' AND `Name` = 'B'", &rec);
@@ -2740,7 +2739,6 @@ static void test_temporary_table(void)
     r = do_query(hdb, "select * from `_Columns` where `Table` = 'T' AND `Name` = 'C'", &rec);
     ok( r == ERROR_NO_MORE_ITEMS, "temporary table exists in _Columns\n");
     if (rec) MsiCloseHandle( rec );
-    }
 
     MsiCloseHandle( hdb );
 


More information about the wine-patches mailing list