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