MSI database _Streams table
Andrey Turkin
pancha at mail.nnov.ru
Tue Jun 13 21:30:18 CDT 2006
Some installers depends on _Streams built-in table (rows in this table
are namely database streams). _Streams consists of 2 columns:
1) Name char(62) NOT NULL - name of stream
2) Data binary - stream's data (suitable for fetch_stream)
This patch against 0.9.15 adds several checks for _Streams table
presence and attributes.
Changelog:
dlls/msi/tests/db.c: Add tests for _Streams table (column types and names)
-------------- next part --------------
--- wine-0.9.15/dlls/msi/tests/db.c 2006-06-08 19:06:38.000000000 +0400
+++ wine-0.9.15-p/dlls/msi/tests/db.c 2006-06-14 06:23:41.000000000 +0400
@@ -726,6 +726,73 @@
MsiCloseHandle( hdb );
}
+static void test_streamtable(void)
+{
+ MSIHANDLE hdb = 0, hview, rec;
+ UINT r;
+
+ hdb = create_db();
+ ok( hdb, "failed to create db\n");
+
+ /* TODO: add stream to database */
+
+ r = run_query( hdb,
+ "CREATE TABLE `Properties` "
+ "( `Property` CHAR(255), `Value` CHAR(1) PRIMARY KEY `Property`)" );
+ ok( r == ERROR_SUCCESS , "Failed to create table\n" );
+
+ /* check the column types */
+ rec = get_column_info( hdb, "select * from `_Streams`", MSICOLINFO_TYPES );
+ ok( rec, "failed to get column info record\n" );
+
+ ok( check_record( rec, 1, "s62"), "wrong record type\n");
+ ok( check_record( rec, 2, "V0"), "wrong record type\n");
+
+ MsiCloseHandle( rec );
+
+ /* now try the names */
+ rec = get_column_info( hdb, "select * from `_Streams`", MSICOLINFO_NAMES );
+ ok( rec, "failed to get column info record\n" );
+
+ ok( check_record( rec, 1, "Name"), "wrong record type\n");
+ ok( check_record( rec, 2, "Data"), "wrong record type\n");
+
+ MsiCloseHandle( rec );
+
+ r = MsiDatabaseOpenView(hdb, "select Name from `_Streams`", &hview );
+
+ ok( r == ERROR_SUCCESS, "cannot open select view: %d\n", r);
+ if (r == ERROR_SUCCESS)
+ {
+ r = MsiViewExecute(hview, 0);
+ ok(r == ERROR_SUCCESS, "cannot execute view: %d\n", r);
+ if( r == ERROR_SUCCESS )
+ {
+/* r = MsiViewFetch( hview, &rec );
+ ok(r == ERROR_SUCCESS, "cannot fetch first record: %d\n", r);
+ if (r == ERROR_SUCCESS)
+ {
+ char buffer[256];
+ DWORD size = sizeof buffer;
+ r = MsiRecordGetStringA(rec, 1, buffer, &size);
+ ok(r == ERROR_SUCCESS, "MsiRecordGetStringA failed: %d\n", r);
+ if (r == ERROR_SUCCESS)
+ {
+ ok(!strcmp(buffer, "StreamName"), "MsiRecordGetStringA returned %s\n", buffer);
+ }
+ MsiCloseHandle( rec );
+ }*/
+ /* TODO: check binary data in second column */
+ r = MsiViewFetch( hview, &rec );
+ ok(r == ERROR_INVALID_PARAMETER, "Strange error code for record: %d\n", r);
+ }
+
+ MsiViewClose(hview);
+ }
+
+ MsiCloseHandle( hdb );
+}
+
START_TEST(db)
{
test_msidatabase();
@@ -735,4 +802,5 @@
test_viewmodify();
test_viewgetcolumninfo();
test_getcolinfo();
+ todo_wine test_streamtable();
}
More information about the wine-patches
mailing list