Rob Shearman : msi: Don' t add info to the _Columns table for non-persistent tables.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Apr 24 07:24:05 CDT 2007


Module: wine
Branch: master
Commit: a33cc3d859992aa783dcfca92e3fb31b054df1f5
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=a33cc3d859992aa783dcfca92e3fb31b054df1f5

Author: Rob Shearman <rob at codeweavers.com>
Date:   Mon Apr 23 08:25:17 2007 +0100

msi: Don't add info to the _Columns table for non-persistent tables.

---

 dlls/msi/table.c    |   71 ++++++++++++++++++++++++++------------------------
 dlls/msi/tests/db.c |    2 -
 2 files changed, 37 insertions(+), 36 deletions(-)

diff --git a/dlls/msi/table.c b/dlls/msi/table.c
index ddf0ee4..09abe1a 100644
--- a/dlls/msi/table.c
+++ b/dlls/msi/table.c
@@ -670,7 +670,7 @@ UINT msi_create_table( MSIDATABASE *db, LPCWSTR name, column_info *col_info,
     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, LPCWSTR name, column_info *col_info,
 
     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 53599ed..422bba3 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-cvs mailing list