msi: Handle sorting an empty table.
authorJames Hawkins <jhawkins@codeweavers.com>
Wed, 2 Apr 2008 08:47:24 +0000 (03:47 -0500)
committerAlexandre Julliard <julliard@winehq.org>
Wed, 2 Apr 2008 10:31:01 +0000 (12:31 +0200)
dlls/msi/table.c
dlls/msi/tests/db.c

index a8f0f401a8dbfae8fffa4abc2abd8a0b1b966e52..572cad67fcf49001f4671507316565e7d4d18958 100644 (file)
@@ -2054,6 +2054,9 @@ static UINT TABLE_sort(struct tagMSIVIEW *view, column_info *columns)
     if (r != ERROR_SUCCESS)
         return r;
 
+    if (rows == 0)
+        return ERROR_SUCCESS;
+
     order = msi_alloc_zero(sizeof(MSIORDERINFO) + sizeof(UINT) * cols);
     if (!order)
         return ERROR_OUTOFMEMORY;
index ac15d24e3392623c11585adcaaafe9e545db5b6c..aee2e80fb35cc1be1a535188bce70d88fb09348d 100644 (file)
@@ -4777,6 +4777,10 @@ static void test_order(void)
     hdb = create_db();
     ok(hdb, "failed to create db\n");
 
+    query = "CREATE TABLE `Empty` ( `A` SHORT NOT NULL PRIMARY KEY `A`)";
+    r = run_query(hdb, 0, query);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
     query = "CREATE TABLE `Mesa` ( `A` SHORT NOT NULL, `B` SHORT, `C` SHORT PRIMARY KEY `A`)";
     r = run_query(hdb, 0, query);
     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
@@ -4962,6 +4966,18 @@ static void test_order(void)
     r = MsiViewFetch(hview, &hrec);
     ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r);
 
+    MsiViewClose(hview);
+    MsiCloseHandle(hview);
+
+    query = "SELECT * FROM `Empty` ORDER BY `A`";
+    r = MsiDatabaseOpenView(hdb, query, &hview);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+    r = MsiViewExecute(hview, 0);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+    r = MsiViewFetch(hview, &hrec);
+    ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r);
+
     MsiViewClose(hview);
     MsiCloseHandle(hview);
     MsiCloseHandle(hdb);