msi: Treat an empty string and a NULL string as the same value.

This commit is contained in:
James Hawkins 2007-07-29 21:23:19 -07:00 committed by Alexandre Julliard
parent d03e2696cf
commit 5e81dbebb0
2 changed files with 20 additions and 1 deletions

View file

@ -1562,6 +1562,24 @@ static void test_where(void)
ok( r == ERROR_SUCCESS, "query failed: %d\n", r );
MsiCloseHandle( rec );
rec = MsiCreateRecord(1);
MsiRecordSetString(rec, 1, "");
query = "SELECT * FROM `Media` WHERE `DiskPrompt` = ?";
r = MsiDatabaseOpenView(hdb, query, &view);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = MsiViewExecute(view, rec);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
MsiCloseHandle(rec);
r = MsiViewFetch(view, &rec);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
MsiCloseHandle(rec);
MsiViewClose(view);
MsiCloseHandle(view);
MsiCloseHandle( hdb );
DeleteFile(msifile);
}

View file

@ -192,7 +192,8 @@ static UINT STRCMP_Evaluate( MSIWHEREVIEW *wv, UINT row, const struct expr *cond
l_str = STRING_evaluate( wv, row, cond->u.expr.left, record );
r_str = STRING_evaluate( wv, row, cond->u.expr.right, record );
if( l_str == r_str )
if( l_str == r_str ||
((!l_str || !*l_str) && (!r_str || !*r_str)) )
sr = 0;
else if( l_str && ! r_str )
sr = 1;