Mike McCormack : msi: Add some test cases for "SELECT ... WHERE condition".

Alexandre Julliard julliard at wine.codeweavers.com
Mon Jun 12 07:09:49 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: bbbcc2a1be3ed3e3a498f07cfbd707186114007a
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=bbbcc2a1be3ed3e3a498f07cfbd707186114007a

Author: Mike McCormack <mike at codeweavers.com>
Date:   Sun Jun 11 09:51:59 2006 +0900

msi: Add some test cases for "SELECT ... WHERE condition".

---

 dlls/msi/tests/db.c |   76 ++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 63 insertions(+), 13 deletions(-)

diff --git a/dlls/msi/tests/db.c b/dlls/msi/tests/db.c
index 2ae69a4..44eecb1 100644
--- a/dlls/msi/tests/db.c
+++ b/dlls/msi/tests/db.c
@@ -48,7 +48,29 @@ static void test_msidatabase(void)
     ok( res == TRUE, "Failed to delete database\n" );
 }
 
-static void test_msiinsert(void)
+static UINT do_query(MSIHANDLE hdb, const char *query, MSIHANDLE *phrec)
+{
+    MSIHANDLE hview = 0;
+    UINT r, ret;
+
+    /* open a select query */
+    r = MsiDatabaseOpenView(hdb, query, &hview);
+    if (r != ERROR_SUCCESS)
+        return r;
+    r = MsiViewExecute(hview, 0);
+    if (r != ERROR_SUCCESS)
+        return r;
+    ret = MsiViewFetch(hview, phrec);
+    r = MsiViewClose(hview);
+    if (r != ERROR_SUCCESS)
+        return r;
+    r = MsiCloseHandle(hview);
+    if (r != ERROR_SUCCESS)
+        return r;
+    return ret;
+}
+
+void test_msiinsert(void)
 {
     MSIHANDLE hdb = 0, hview = 0, hrec = 0;
     UINT r;
@@ -87,18 +109,21 @@ static void test_msiinsert(void)
     r = MsiCloseHandle(hview);
     ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n");
 
-    query = "SELECT * FROM `phone`";
-    r = MsiDatabaseOpenView(hdb, query, &hview);
-    ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n");
-    r = MsiViewExecute(hview, 0);
-    ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n");
-    r = MsiViewFetch(hview, &hrec);
+    query = "SELECT * FROM `phone` WHERE `id` = 1";
+    r = do_query(hdb, query, &hrec);
     ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n");
 
     /* check the record contains what we put in it */
     r = MsiRecordGetFieldCount(hrec);
     ok(r == 3, "record count wrong\n");
 
+    todo_wine {
+    r = MsiRecordIsNull(hrec, 0);
+    ok(r == FALSE, "field 0 not null\n");
+    r = MsiRecordGetInteger(hrec, 0);
+    ok(r == 0x138080, "field 0 contents wrong\n");
+    }
+
     r = MsiRecordGetInteger(hrec, 1);
     ok(r == 1, "field 1 contents wrong\n");
     sz = sizeof buf;
@@ -109,14 +134,39 @@ static void test_msiinsert(void)
     r = MsiRecordGetString(hrec, 3, buf, &sz);
     ok(r == ERROR_SUCCESS, "field 3 content fetch failed\n");
     ok(!strcmp(buf,"8675309"), "field 3 content incorrect\n");
-    
-    r = MsiViewClose(hview);
-    ok(r == ERROR_SUCCESS, "MsiViewClose failed\n");
-    r = MsiCloseHandle(hview);
+
+    r = MsiCloseHandle(hrec);
     ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n");
+
+    /* open a select query */
+    hrec = 100;
+    query = "SELECT * FROM `phone` WHERE `id` >= 10";
+    r = do_query(hdb, query, &hrec);
+    ok(r == ERROR_NO_MORE_ITEMS, "MsiViewFetch failed\n");
+    ok(hrec == 0, "hrec should be null\n");
+
     r = MsiCloseHandle(hrec);
     ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n");
 
+    query = "SELECT * FROM `phone` WHERE `id` < 0";
+    r = do_query(hdb, query, &hrec);
+    ok(r == ERROR_NO_MORE_ITEMS, "MsiViewFetch failed\n");
+
+    query = "SELECT * FROM `phone` WHERE `id` <= 0";
+    r = do_query(hdb, query, &hrec);
+    ok(r == ERROR_NO_MORE_ITEMS, "MsiViewFetch failed\n");
+
+    query = "SELECT * FROM `phone` WHERE `id` <> 1";
+    r = do_query(hdb, query, &hrec);
+    ok(r == ERROR_NO_MORE_ITEMS, "MsiViewFetch failed\n");
+
+    query = "SELECT * FROM `phone` WHERE `id` > 10";
+    r = do_query(hdb, query, &hrec);
+    ok(r == ERROR_NO_MORE_ITEMS, "MsiViewFetch failed\n");
+
+    r = MsiViewFetch(0, NULL);
+    ok(r == ERROR_INVALID_PARAMETER, "MsiViewFetch failed\n");
+
     r = MsiDatabaseCommit(hdb);
     ok(r == ERROR_SUCCESS, "MsiDatabaseCommit failed\n");
 
@@ -141,7 +191,7 @@ static void test_msidecomposedesc(void)
     hmod = GetModuleHandle("msi.dll");
     if (!hmod)
         return;
-    pMsiDecomposeDescriptorA = (fnMsiDecomposeDescriptorA) 
+    pMsiDecomposeDescriptorA = (fnMsiDecomposeDescriptorA)
         GetProcAddress(hmod, "MsiDecomposeDescriptorA");
     if (!pMsiDecomposeDescriptorA)
         return;
@@ -623,7 +673,7 @@ static UINT get_columns_table_type(MSIHA
             if (r == field)
                 type = MsiRecordGetInteger( rec, 4 );
             MsiCloseHandle( rec );
-        }            
+        }
 
         MsiViewClose(hview);
     }




More information about the wine-cvs mailing list