msi: Make sure there's a value for each column when inserting data.

This commit is contained in:
Mike McCormack 2006-08-31 17:22:24 +09:00 committed by Alexandre Julliard
parent 533833b4e1
commit 5699936cf1
2 changed files with 13 additions and 6 deletions

View File

@ -234,6 +234,14 @@ static const MSIVIEWOPS insert_ops =
INSERT_find_matching_rows
};
static UINT count_column_info( column_info *ci )
{
UINT n = 0;
for ( ; ci; ci = ci->next )
n++;
return n;
}
UINT INSERT_CreateView( MSIDATABASE *db, MSIVIEW **view, LPWSTR table,
column_info *columns, column_info *values, BOOL temp )
{
@ -243,6 +251,10 @@ UINT INSERT_CreateView( MSIDATABASE *db, MSIVIEW **view, LPWSTR table,
TRACE("%p\n", iv );
/* there should be one value for each column */
if ( count_column_info( columns ) != count_column_info(values) )
return ERROR_BAD_QUERY_SYNTAX;
r = TABLE_CreateView( db, table, &tv );
if( r != ERROR_SUCCESS )
return r;
@ -254,7 +266,7 @@ UINT INSERT_CreateView( MSIDATABASE *db, MSIVIEW **view, LPWSTR table,
tv->ops->delete( tv );
return r;
}
iv = msi_alloc_zero( sizeof *iv );
if( !iv )
return ERROR_FUNCTION_FAILED;

View File

@ -162,17 +162,12 @@ static void test_msiinsert(void)
r = do_query(hdb, query, &hrec);
ok(r == ERROR_NO_MORE_ITEMS, "MsiViewFetch failed\n");
todo_wine {
/* now try a few bad INSERT xqueries */
query = "INSERT INTO `phone` ( `id`, `name`, `number` )"
"VALUES(?, ?)";
r = MsiDatabaseOpenView(hdb, query, &hview);
ok(r == ERROR_BAD_QUERY_SYNTAX, "MsiDatabaseOpenView failed\n");
if (r == ERROR_SUCCESS)
r = MsiCloseHandle(hview);
}
/* construct a record to insert */
hrec = MsiCreateRecord(4);
r = MsiRecordSetInteger(hrec, 1, 2);