Rob Shearman : msi:
All columns being temporary means the table is non-persistent.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Apr 24 07:24:05 CDT 2007
Module: wine
Branch: master
Commit: 697d820eeedae307db5cc0ddbec60c6c68391812
URL: http://source.winehq.org/git/wine.git/?a=commit;h=697d820eeedae307db5cc0ddbec60c6c68391812
Author: Rob Shearman <rob at codeweavers.com>
Date: Mon Apr 23 08:26:44 2007 +0100
msi: All columns being temporary means the table is non-persistent.
The HOLD keyword just means that the non-persistent data in the table
should be kept around, not that the table is temporary.
---
dlls/msi/create.c | 11 ++++++++++-
dlls/msi/query.h | 3 ++-
dlls/msi/sql.y | 7 +++++--
dlls/msi/tests/db.c | 2 --
4 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/dlls/msi/create.c b/dlls/msi/create.c
index ef71684..965a4a6 100644
--- a/dlls/msi/create.c
+++ b/dlls/msi/create.c
@@ -146,10 +146,12 @@ static UINT check_columns( column_info *col_info )
}
UINT CREATE_CreateView( MSIDATABASE *db, MSIVIEW **view, LPWSTR table,
- column_info *col_info, BOOL temp )
+ column_info *col_info, BOOL hold )
{
MSICREATEVIEW *cv = NULL;
UINT r;
+ const column_info *col;
+ BOOL temp = TRUE;
TRACE("%p\n", cv );
@@ -161,6 +163,13 @@ UINT CREATE_CreateView( MSIDATABASE *db, MSIVIEW **view, LPWSTR table,
if( !cv )
return ERROR_FUNCTION_FAILED;
+ for( col = col_info; col; col = col->next )
+ if( !col->temporary )
+ {
+ temp = FALSE;
+ break;
+ }
+
/* fill the structure */
cv->view.ops = &create_ops;
msiobj_addref( &db->hdr );
diff --git a/dlls/msi/query.h b/dlls/msi/query.h
index a8a633f..69d511c 100644
--- a/dlls/msi/query.h
+++ b/dlls/msi/query.h
@@ -66,6 +66,7 @@ typedef struct _column_info
LPCWSTR table;
LPCWSTR column;
UINT type;
+ BOOL temporary;
struct expr *val;
struct _column_info *next;
} column_info;
@@ -108,7 +109,7 @@ UINT WHERE_CreateView( MSIDATABASE *db, MSIVIEW **view, MSIVIEW *table,
struct expr *cond );
UINT CREATE_CreateView( MSIDATABASE *db, MSIVIEW **view, LPWSTR table,
- column_info *col_info, BOOL temp );
+ column_info *col_info, BOOL hold );
UINT INSERT_CreateView( MSIDATABASE *db, MSIVIEW **view, LPWSTR table,
column_info *columns, column_info *values, BOOL temp );
diff --git a/dlls/msi/sql.y b/dlls/msi/sql.y
index 17cb957..9cbeb6f 100644
--- a/dlls/msi/sql.y
+++ b/dlls/msi/sql.y
@@ -40,6 +40,8 @@ static int sql_error(const char *str);
WINE_DEFAULT_DEBUG_CHANNEL(msi);
+#define MSITYPE_TEMPORARY 0x8000
+
typedef struct tag_SQL_input
{
MSIDATABASE *db;
@@ -278,7 +280,8 @@ column_and_type:
column column_type
{
$$ = $1;
- $$->type = $2 | MSITYPE_VALID;
+ $$->type = ($2 | MSITYPE_VALID) & ~MSITYPE_TEMPORARY;
+ $$->temporary = $2 & MSITYPE_TEMPORARY ? TRUE : FALSE;
}
;
@@ -293,7 +296,7 @@ column_type:
}
| data_type_l TK_TEMPORARY
{
- FIXME("temporary column\n");
+ $$ = $1 | MSITYPE_TEMPORARY;
}
;
diff --git a/dlls/msi/tests/db.c b/dlls/msi/tests/db.c
index 9ebcd02..073cf01 100644
--- a/dlls/msi/tests/db.c
+++ b/dlls/msi/tests/db.c
@@ -2664,10 +2664,8 @@ static void test_temporary_table(void)
r = run_query(hdb, 0, query);
ok(r == ERROR_SUCCESS, "failed to add table\n");
- todo_wine {
cond = MsiDatabaseIsTablePersistent(hdb, "P2");
ok( cond == MSICONDITION_TRUE, "wrong return condition\n");
- }
query = "CREATE TABLE `T` ( `B` SHORT NOT NULL TEMPORARY, `C` CHAR(255) TEMPORARY PRIMARY KEY `C`) HOLD";
r = run_query(hdb, 0, query);
More information about the wine-cvs
mailing list