msi: Don't create a temporary table that is not held.
This commit is contained in:
parent
241933e13c
commit
ea28915133
|
@ -44,6 +44,7 @@ typedef struct tagMSICREATEVIEW
|
|||
MSIDATABASE *db;
|
||||
LPWSTR name;
|
||||
BOOL bIsTemp;
|
||||
BOOL hold;
|
||||
column_info *col_info;
|
||||
} MSICREATEVIEW;
|
||||
|
||||
|
@ -62,9 +63,12 @@ static UINT CREATE_execute( struct tagMSIVIEW *view, MSIRECORD *record )
|
|||
MSITABLE *table;
|
||||
BOOL persist = (cv->bIsTemp) ? MSICONDITION_FALSE : MSICONDITION_TRUE;
|
||||
|
||||
TRACE("%p Table %s (%s)\n", cv, debugstr_w(cv->name),
|
||||
TRACE("%p Table %s (%s)\n", cv, debugstr_w(cv->name),
|
||||
cv->bIsTemp?"temporary":"permanent");
|
||||
|
||||
if (cv->bIsTemp && !cv->hold)
|
||||
return ERROR_SUCCESS;
|
||||
|
||||
return msi_create_table( cv->db, cv->name, cv->col_info, persist, &table);
|
||||
}
|
||||
|
||||
|
@ -197,6 +201,7 @@ UINT CREATE_CreateView( MSIDATABASE *db, MSIVIEW **view, LPWSTR table,
|
|||
cv->name = table;
|
||||
cv->col_info = col_info;
|
||||
cv->bIsTemp = temp;
|
||||
cv->hold = hold;
|
||||
*view = (MSIVIEW*) cv;
|
||||
|
||||
return ERROR_SUCCESS;
|
||||
|
|
|
@ -66,14 +66,15 @@ static UINT create_temp_property_table(MSIPACKAGE *package)
|
|||
UINT rc;
|
||||
|
||||
static const WCHAR CreateSql[] = {
|
||||
'C','R','E','A','T','E',' ','T','A','B','L','E',' ','`','_','P','r','o',
|
||||
'p','e','r','t','y','`',' ','(',' ','`','_','P','r','o','p','e','r','t',
|
||||
'y','`',' ','C','H','A','R','(','5','6',')',' ','N','O','T',' ','N','U',
|
||||
'L','L',' ','T','E','M','P','O','R','A','R','Y',',',' ','`','V','a','l',
|
||||
'u','e','`',' ','C','H','A','R','(','9','8',')',' ','N','O','T',' ','N',
|
||||
'U','L','L',' ','T','E','M','P','O','R','A','R','Y',' ','P','R','I','M',
|
||||
'A','R','Y',' ','K','E','Y',' ','`','_','P','r','o','p','e','r','t','y',
|
||||
'`',')',0};
|
||||
'C','R','E','A','T','E',' ','T','A','B','L','E',' ',
|
||||
'`','_','P','r','o','p','e','r','t','y','`',' ','(',' ',
|
||||
'`','_','P','r','o','p','e','r','t','y','`',' ',
|
||||
'C','H','A','R','(','5','6',')',' ','N','O','T',' ','N','U','L','L',' ',
|
||||
'T','E','M','P','O','R','A','R','Y',',',' ',
|
||||
'`','V','a','l','u','e','`',' ','C','H','A','R','(','9','8',')',' ',
|
||||
'N','O','T',' ','N','U','L','L',' ','T','E','M','P','O','R','A','R','Y',
|
||||
' ','P','R','I','M','A','R','Y',' ','K','E','Y',' ',
|
||||
'`','_','P','r','o','p','e','r','t','y','`',')',' ','H','O','L','D',0};
|
||||
|
||||
rc = MSI_DatabaseOpenViewW(package->db, CreateSql, &view);
|
||||
if (rc != ERROR_SUCCESS)
|
||||
|
|
|
@ -3274,10 +3274,13 @@ static void test_temporary_table(void)
|
|||
r = run_query(hdb, 0, query);
|
||||
ok(r == ERROR_SUCCESS, "failed to add table\n");
|
||||
|
||||
todo_wine {
|
||||
query = "SELECT * FROM `T2`";
|
||||
r = MsiDatabaseOpenView(hdb, query, &view);
|
||||
ok(r == ERROR_BAD_QUERY_SYNTAX,
|
||||
"Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r);
|
||||
|
||||
cond = MsiDatabaseIsTablePersistent(hdb, "T2");
|
||||
ok( cond == MSICONDITION_NONE, "wrong return condition\n");
|
||||
}
|
||||
|
||||
query = "CREATE TABLE `T3` ( `B` SHORT NOT NULL TEMPORARY, `C` CHAR(255) PRIMARY KEY `C`)";
|
||||
r = run_query(hdb, 0, query);
|
||||
|
|
Loading…
Reference in New Issue