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