Module: wine Branch: master Commit: a33cc3d859992aa783dcfca92e3fb31b054df1f5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a33cc3d859992aa783dcfca92e... Author: Rob Shearman <rob(a)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 );