Commit 5699936c authored by Mike McCormack's avatar Mike McCormack Committed by Alexandre Julliard

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

parent 533833b4
......@@ -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;
......
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment