summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/libmsi.h19
-rw-r--r--libmsi/alter.c11
-rw-r--r--libmsi/create.c11
-rw-r--r--libmsi/delete.c11
-rw-r--r--libmsi/distinct.c14
-rw-r--r--libmsi/drop.c1
-rw-r--r--libmsi/insert.c10
-rw-r--r--libmsi/msipriv.h6
-rw-r--r--libmsi/msiquery.c46
-rw-r--r--libmsi/select.c74
-rw-r--r--libmsi/storages.c89
-rw-r--r--libmsi/streams.c89
-rw-r--r--libmsi/table.c149
-rw-r--r--libmsi/update.c11
-rw-r--r--libmsi/where.c108
-rw-r--r--tests/testdatabase.c1242
-rw-r--r--tests/testdatabase.ok1041
17 files changed, 5 insertions, 2927 deletions
diff --git a/include/libmsi.h b/include/libmsi.h
index c46ce04..259e05a 100644
--- a/include/libmsi.h
+++ b/include/libmsi.h
@@ -74,23 +74,6 @@ typedef enum LibmsiColInfo
LIBMSI_COL_INFO_TYPES = 1
} LibmsiColInfo;
-typedef enum LibmsiModify
-{
- LIBMSI_MODIFY_SEEK = -1,
- LIBMSI_MODIFY_REFRESH = 0,
- LIBMSI_MODIFY_INSERT = 1,
- LIBMSI_MODIFY_UPDATE = 2,
- LIBMSI_MODIFY_ASSIGN = 3,
- LIBMSI_MODIFY_REPLACE = 4,
- LIBMSI_MODIFY_MERGE = 5,
- LIBMSI_MODIFY_DELETE = 6,
- LIBMSI_MODIFY_INSERT_TEMPORARY = 7,
- LIBMSI_MODIFY_VALIDATE = 8,
- LIBMSI_MODIFY_VALIDATE_NEW = 9,
- LIBMSI_MODIFY_VALIDATE_FIELD = 10,
- LIBMSI_MODIFY_VALIDATE_DELETE = 11
-} LibmsiModify;
-
#define LIBMSI_DB_OPEN_READONLY (const char *)0
#define LIBMSI_DB_OPEN_TRANSACT (const char *)1
#define LIBMSI_DB_OPEN_CREATE (const char *)2
@@ -218,8 +201,6 @@ LibmsiCondition libmsi_database_is_table_persistent(LibmsiDatabase *, const char
LibmsiResult libmsi_summary_info_persist(LibmsiSummaryInfo *);
LibmsiResult libmsi_summary_info_get_property_count(LibmsiSummaryInfo *,unsigned *);
-LibmsiResult libmsi_query_modify(LibmsiQuery *, LibmsiModify, LibmsiRecord *);
-
LibmsiResult libmsi_database_merge(LibmsiDatabase *, LibmsiDatabase *, const char *);
/* Non Unicode */
diff --git a/libmsi/alter.c b/libmsi/alter.c
index 3523036..0c25e35 100644
--- a/libmsi/alter.c
+++ b/libmsi/alter.c
@@ -197,16 +197,6 @@ static unsigned alter_view_get_column_info( LibmsiView *view, unsigned n, const
return LIBMSI_RESULT_FUNCTION_FAILED;
}
-static unsigned alter_view_modify( LibmsiView *view, LibmsiModify eModifyMode,
- LibmsiRecord *rec, unsigned row )
-{
- LibmsiAlterView *av = (LibmsiAlterView*)view;
-
- TRACE("%p %d %p\n", av, eModifyMode, rec );
-
- return LIBMSI_RESULT_FUNCTION_FAILED;
-}
-
static unsigned alter_view_delete( LibmsiView *view )
{
LibmsiAlterView *av = (LibmsiAlterView*)view;
@@ -239,7 +229,6 @@ static const LibmsiViewOps alter_ops =
alter_view_close,
alter_view_get_dimensions,
alter_view_get_column_info,
- alter_view_modify,
alter_view_delete,
alter_view_find_matching_rows,
NULL,
diff --git a/libmsi/create.c b/libmsi/create.c
index b3cacc0..c9b8ea4 100644
--- a/libmsi/create.c
+++ b/libmsi/create.c
@@ -98,16 +98,6 @@ static unsigned create_view_get_column_info( LibmsiView *view, unsigned n, const
return LIBMSI_RESULT_FUNCTION_FAILED;
}
-static unsigned create_view_modify( LibmsiView *view, LibmsiModify eModifyMode,
- LibmsiRecord *rec, unsigned row)
-{
- LibmsiCreateView *cv = (LibmsiCreateView*)view;
-
- TRACE("%p %d %p\n", cv, eModifyMode, rec );
-
- return LIBMSI_RESULT_FUNCTION_FAILED;
-}
-
static unsigned create_view_delete( LibmsiView *view )
{
LibmsiCreateView *cv = (LibmsiCreateView*)view;
@@ -132,7 +122,6 @@ static const LibmsiViewOps create_ops =
create_view_close,
create_view_get_dimensions,
create_view_get_column_info,
- create_view_modify,
create_view_delete,
NULL,
NULL,
diff --git a/libmsi/delete.c b/libmsi/delete.c
index 98dd8ae..df00bdc 100644
--- a/libmsi/delete.c
+++ b/libmsi/delete.c
@@ -138,16 +138,6 @@ static unsigned delete_view_get_column_info( LibmsiView *view, unsigned n, const
type, temporary, table_name);
}
-static unsigned delete_view_modify( LibmsiView *view, LibmsiModify eModifyMode,
- LibmsiRecord *rec, unsigned row )
-{
- LibmsiDeleteView *dv = (LibmsiDeleteView*)view;
-
- TRACE("%p %d %p\n", dv, eModifyMode, rec );
-
- return LIBMSI_RESULT_FUNCTION_FAILED;
-}
-
static unsigned delete_view_delete( LibmsiView *view )
{
LibmsiDeleteView *dv = (LibmsiDeleteView*)view;
@@ -183,7 +173,6 @@ static const LibmsiViewOps delete_ops =
delete_view_close,
delete_view_get_dimensions,
delete_view_get_column_info,
- delete_view_modify,
delete_view_delete,
delete_view_find_matching_rows,
NULL,
diff --git a/libmsi/distinct.c b/libmsi/distinct.c
index 47c4b17..c899fbe 100644
--- a/libmsi/distinct.c
+++ b/libmsi/distinct.c
@@ -216,19 +216,6 @@ static unsigned distinct_view_get_column_info( LibmsiView *view, unsigned n, con
type, temporary, table_name );
}
-static unsigned distinct_view_modify( LibmsiView *view, LibmsiModify eModifyMode,
- LibmsiRecord *rec, unsigned row )
-{
- LibmsiDistinctView *dv = (LibmsiDistinctView*)view;
-
- TRACE("%p %d %p\n", dv, eModifyMode, rec );
-
- if( !dv->table )
- return LIBMSI_RESULT_FUNCTION_FAILED;
-
- return dv->table->ops->modify( dv->table, eModifyMode, rec, row );
-}
-
static unsigned distinct_view_delete( LibmsiView *view )
{
LibmsiDistinctView *dv = (LibmsiDistinctView*)view;
@@ -278,7 +265,6 @@ static const LibmsiViewOps distinct_ops =
distinct_view_close,
distinct_view_get_dimensions,
distinct_view_get_column_info,
- distinct_view_modify,
distinct_view_delete,
distinct_view_find_matching_rows,
NULL,
diff --git a/libmsi/drop.c b/libmsi/drop.c
index c16821f..d1da239 100644
--- a/libmsi/drop.c
+++ b/libmsi/drop.c
@@ -102,7 +102,6 @@ static const LibmsiViewOps drop_ops =
drop_view_close,
drop_view_get_dimensions,
NULL,
- NULL,
drop_view_delete,
NULL,
NULL,
diff --git a/libmsi/insert.c b/libmsi/insert.c
index 6ce752f..bd2199a 100644
--- a/libmsi/insert.c
+++ b/libmsi/insert.c
@@ -293,15 +293,6 @@ static unsigned insert_view_get_column_info( LibmsiView *view, unsigned n, const
return sv->ops->get_column_info( sv, n, name, type, temporary, table_name );
}
-static unsigned insert_view_modify( LibmsiView *view, LibmsiModify eModifyMode, LibmsiRecord *rec, unsigned row)
-{
- LibmsiInsertView *iv = (LibmsiInsertView*)view;
-
- TRACE("%p %d %p\n", iv, eModifyMode, rec );
-
- return LIBMSI_RESULT_FUNCTION_FAILED;
-}
-
static unsigned insert_view_delete( LibmsiView *view )
{
LibmsiInsertView *iv = (LibmsiInsertView*)view;
@@ -339,7 +330,6 @@ static const LibmsiViewOps insert_ops =
insert_view_close,
insert_view_get_dimensions,
insert_view_get_column_info,
- insert_view_modify,
insert_view_delete,
insert_view_find_matching_rows,
NULL,
diff --git a/libmsi/msipriv.h b/libmsi/msipriv.h
index 8cfe28c..e1476b2 100644
--- a/libmsi/msipriv.h
+++ b/libmsi/msipriv.h
@@ -200,11 +200,6 @@ typedef struct LibmsiViewOps
bool *temporary, const WCHAR **table_name );
/*
- * modify - not yet implemented properly
- */
- unsigned (*modify)( LibmsiView *view, LibmsiModify eModifyMode, LibmsiRecord *record, unsigned row );
-
- /*
* delete - destroys the structure completely
*/
unsigned (*delete)( LibmsiView * );
@@ -368,7 +363,6 @@ extern unsigned _libmsi_database_get_primary_keys( LibmsiDatabase *, const WCHAR
extern unsigned _libmsi_query_execute( LibmsiQuery*, LibmsiRecord * );
extern unsigned _libmsi_query_fetch( LibmsiQuery*, LibmsiRecord ** );
extern unsigned _libmsi_query_get_column_info(LibmsiQuery *, LibmsiColInfo, LibmsiRecord **);
-extern unsigned _libmsi_query_modify( LibmsiQuery *, LibmsiModify, LibmsiRecord * );
extern unsigned _libmsi_view_find_column( LibmsiView *, const WCHAR *, const WCHAR *, unsigned *);
extern unsigned msi_view_get_row(LibmsiDatabase *, LibmsiView *, unsigned, LibmsiRecord **);
diff --git a/libmsi/msiquery.c b/libmsi/msiquery.c
index b5c3b76..f4016dc 100644
--- a/libmsi/msiquery.c
+++ b/libmsi/msiquery.c
@@ -516,52 +516,6 @@ LibmsiResult libmsi_query_get_column_info(LibmsiQuery *query, LibmsiColInfo info
return r;
}
-unsigned _libmsi_query_modify( LibmsiQuery *query, LibmsiModify mode, LibmsiRecord *rec )
-{
- LibmsiView *view = NULL;
- unsigned r;
-
- if ( !query || !rec )
- return LIBMSI_RESULT_INVALID_HANDLE;
-
- view = query->view;
- if ( !view || !view->ops->modify)
- return LIBMSI_RESULT_FUNCTION_FAILED;
-
- if ( mode == LIBMSI_MODIFY_UPDATE && _libmsi_record_get_int_ptr( rec, 0 ) != (intptr_t)query )
- return LIBMSI_RESULT_FUNCTION_FAILED;
-
- r = view->ops->modify( view, mode, rec, query->row );
- if (mode == LIBMSI_MODIFY_DELETE && r == LIBMSI_RESULT_SUCCESS)
- query->row--;
-
- return r;
-}
-
-LibmsiResult libmsi_query_modify( LibmsiQuery *query, LibmsiModify eModifyMode,
- LibmsiRecord *rec)
-{
- unsigned r = LIBMSI_RESULT_FUNCTION_FAILED;
-
- TRACE("%d %x %d\n", query, eModifyMode, rec);
-
- if( !query )
- return LIBMSI_RESULT_INVALID_HANDLE;
-
- msiobj_addref( &query->hdr);
-
- if (rec)
- msiobj_addref( &rec->hdr);
-
- r = _libmsi_query_modify( query, eModifyMode, rec );
-
- msiobj_release( &query->hdr );
- if( rec )
- msiobj_release( &rec->hdr );
-
- return r;
-}
-
LibmsiDBError libmsi_query_get_error( LibmsiQuery *query, char *buffer, unsigned *buflen )
{
const WCHAR *column;
diff --git a/libmsi/select.c b/libmsi/select.c
index e88d144..cf16413 100644
--- a/libmsi/select.c
+++ b/libmsi/select.c
@@ -240,79 +240,6 @@ static unsigned select_view_get_column_info( LibmsiView *view, unsigned n, const
type, temporary, table_name );
}
-static unsigned msi_select_update(LibmsiView *view, LibmsiRecord *rec, unsigned row)
-{
- LibmsiSelectView *sv = (LibmsiSelectView*)view;
- unsigned r, i, num_columns, col, type, val;
- const WCHAR *str;
- LibmsiRecord *mod;
-
- r = select_view_get_dimensions(view, NULL, &num_columns);
- if (r != LIBMSI_RESULT_SUCCESS)
- return r;
-
- r = sv->table->ops->get_row(sv->table, row - 1, &mod);
- if (r != LIBMSI_RESULT_SUCCESS)
- return r;
-
- for (i = 0; i < num_columns; i++)
- {
- col = sv->cols[i];
-
- r = select_view_get_column_info(view, i + 1, NULL, &type, NULL, NULL);
- if (r != LIBMSI_RESULT_SUCCESS)
- {
- ERR("Failed to get column information: %d\n", r);
- goto done;
- }
-
- if (MSITYPE_IS_BINARY(type))
- {
- ERR("Cannot modify binary data!\n");
- r = LIBMSI_RESULT_FUNCTION_FAILED;
- goto done;
- }
- else if (type & MSITYPE_STRING)
- {
- str = _libmsi_record_get_string_raw(rec, i + 1);
- r = _libmsi_record_set_stringW(mod, col, str);
- }
- else
- {
- val = libmsi_record_get_integer(rec, i + 1);
- r = libmsi_record_set_int(mod, col, val);
- }
-
- if (r != LIBMSI_RESULT_SUCCESS)
- {
- ERR("Failed to modify record: %d\n", r);
- goto done;
- }
- }
-
- r = sv->table->ops->modify(sv->table, LIBMSI_MODIFY_UPDATE, mod, row);
-
-done:
- msiobj_release(&mod->hdr);
- return r;
-}
-
-static unsigned select_view_modify( LibmsiView *view, LibmsiModify eModifyMode,
- LibmsiRecord *rec, unsigned row )
-{
- LibmsiSelectView *sv = (LibmsiSelectView*)view;
-
- TRACE("%p %d %p %d\n", sv, eModifyMode, rec, row );
-
- if( !sv->table )
- return LIBMSI_RESULT_FUNCTION_FAILED;
-
- if (eModifyMode == LIBMSI_MODIFY_UPDATE)
- return msi_select_update(view, rec, row);
-
- return sv->table->ops->modify( sv->table, eModifyMode, rec, row );
-}
-
static unsigned select_view_delete( LibmsiView *view )
{
LibmsiSelectView *sv = (LibmsiSelectView*)view;
@@ -359,7 +286,6 @@ static const LibmsiViewOps select_ops =
select_view_close,
select_view_get_dimensions,
select_view_get_column_info,
- select_view_modify,
select_view_delete,
select_view_find_matching_rows,
NULL,
diff --git a/libmsi/storages.c b/libmsi/storages.c
index 8673812..f91ae05 100644
--- a/libmsi/storages.c
+++ b/libmsi/storages.c
@@ -303,94 +303,6 @@ static unsigned storages_view_get_column_info( LibmsiView *view, unsigned n, con
return LIBMSI_RESULT_SUCCESS;
}
-static unsigned storages_find_row(LibmsiStorageView *sv, LibmsiRecord *rec, unsigned *row)
-{
- const WCHAR *str;
- unsigned r, i, id, data;
-
- str = _libmsi_record_get_string_raw(rec, 1);
- r = _libmsi_id_from_stringW(sv->db->strings, str, &id);
- if (r != LIBMSI_RESULT_SUCCESS)
- return r;
-
- for (i = 0; i < sv->num_rows; i++)
- {
- storages_view_fetch_int(&sv->view, i, 1, &data);
-
- if (data == id)
- {
- *row = i;
- return LIBMSI_RESULT_SUCCESS;
- }
- }
-
- return LIBMSI_RESULT_FUNCTION_FAILED;
-}
-
-static unsigned storages_modify_update(LibmsiView *view, LibmsiRecord *rec)
-{
- LibmsiStorageView *sv = (LibmsiStorageView *)view;
- unsigned r, row;
-
- r = storages_find_row(sv, rec, &row);
- if (r != LIBMSI_RESULT_SUCCESS)
- return LIBMSI_RESULT_FUNCTION_FAILED;
-
- return storages_view_set_row(view, row, rec, 0);
-}
-
-static unsigned storages_modify_assign(LibmsiView *view, LibmsiRecord *rec)
-{
- LibmsiStorageView *sv = (LibmsiStorageView *)view;
- unsigned r, row;
-
- r = storages_find_row(sv, rec, &row);
- if (r == LIBMSI_RESULT_SUCCESS)
- return storages_modify_update(view, rec);
-
- return storages_view_insert_row(view, rec, -1, false);
-}
-
-static unsigned storages_view_modify(LibmsiView *view, LibmsiModify eModifyMode, LibmsiRecord *rec, unsigned row)
-{
- unsigned r;
-
- TRACE("%p %d %p\n", view, eModifyMode, rec);
-
- switch (eModifyMode)
- {
- case LIBMSI_MODIFY_ASSIGN:
- r = storages_modify_assign(view, rec);
- break;
-
- case LIBMSI_MODIFY_INSERT:
- r = storages_view_insert_row(view, rec, -1, false);
- break;
-
- case LIBMSI_MODIFY_UPDATE:
- r = storages_modify_update(view, rec);
- break;
-
- case LIBMSI_MODIFY_VALIDATE_NEW:
- case LIBMSI_MODIFY_INSERT_TEMPORARY:
- case LIBMSI_MODIFY_REFRESH:
- case LIBMSI_MODIFY_REPLACE:
- case LIBMSI_MODIFY_MERGE:
- case LIBMSI_MODIFY_DELETE:
- case LIBMSI_MODIFY_VALIDATE:
- case LIBMSI_MODIFY_VALIDATE_FIELD:
- case LIBMSI_MODIFY_VALIDATE_DELETE:
- FIXME("%p %d %p - mode not implemented\n", view, eModifyMode, rec );
- r = LIBMSI_RESULT_CALL_NOT_IMPLEMENTED;
- break;
-
- default:
- r = LIBMSI_RESULT_INVALID_DATA;
- }
-
- return r;
-}
-
static unsigned storages_view_delete(LibmsiView *view)
{
LibmsiStorageView *sv = (LibmsiStorageView *)view;
@@ -453,7 +365,6 @@ static const LibmsiViewOps storages_ops =
storages_view_close,
storages_view_get_dimensions,
storages_view_get_column_info,
- storages_view_modify,
storages_view_delete,
storages_view_find_matching_rows,
NULL,
diff --git a/libmsi/streams.c b/libmsi/streams.c
index a8025f5..ea5d0ae 100644
--- a/libmsi/streams.c
+++ b/libmsi/streams.c
@@ -293,94 +293,6 @@ static unsigned streams_view_get_column_info( LibmsiView *view, unsigned n, cons
return LIBMSI_RESULT_SUCCESS;
}
-static unsigned streams_find_row(LibmsiStreamsView *sv, LibmsiRecord *rec, unsigned *row)
-{
- const WCHAR *str;
- unsigned r, i, id, data;
-
- str = _libmsi_record_get_string_raw(rec, 1);
- r = _libmsi_id_from_stringW(sv->db->strings, str, &id);
- if (r != LIBMSI_RESULT_SUCCESS)
- return r;
-
- for (i = 0; i < sv->num_rows; i++)
- {
- streams_view_fetch_int(&sv->view, i, 1, &data);
-
- if (data == id)
- {
- *row = i;
- return LIBMSI_RESULT_SUCCESS;
- }
- }
-
- return LIBMSI_RESULT_FUNCTION_FAILED;
-}
-
-static unsigned streams_modify_update(LibmsiView *view, LibmsiRecord *rec)
-{
- LibmsiStreamsView *sv = (LibmsiStreamsView *)view;
- unsigned r, row;
-
- r = streams_find_row(sv, rec, &row);
- if (r != LIBMSI_RESULT_SUCCESS)
- return LIBMSI_RESULT_FUNCTION_FAILED;
-
- return streams_view_set_row(view, row, rec, 0);
-}
-
-static unsigned streams_modify_assign(LibmsiView *view, LibmsiRecord *rec)
-{
- LibmsiStreamsView *sv = (LibmsiStreamsView *)view;
- unsigned r, row;
-
- r = streams_find_row(sv, rec, &row);
- if (r == LIBMSI_RESULT_SUCCESS)
- return streams_modify_update(view, rec);
-
- return streams_view_insert_row(view, rec, -1, false);
-}
-
-static unsigned streams_view_modify(LibmsiView *view, LibmsiModify eModifyMode, LibmsiRecord *rec, unsigned row)
-{
- unsigned r;
-
- TRACE("%p %d %p\n", view, eModifyMode, rec);
-
- switch (eModifyMode)
- {
- case LIBMSI_MODIFY_ASSIGN:
- r = streams_modify_assign(view, rec);
- break;
-
- case LIBMSI_MODIFY_INSERT:
- r = streams_view_insert_row(view, rec, -1, false);
- break;
-
- case LIBMSI_MODIFY_UPDATE:
- r = streams_modify_update(view, rec);
- break;
-
- case LIBMSI_MODIFY_VALIDATE_NEW:
- case LIBMSI_MODIFY_INSERT_TEMPORARY:
- case LIBMSI_MODIFY_REFRESH:
- case LIBMSI_MODIFY_REPLACE:
- case LIBMSI_MODIFY_MERGE:
- case LIBMSI_MODIFY_DELETE:
- case LIBMSI_MODIFY_VALIDATE:
- case LIBMSI_MODIFY_VALIDATE_FIELD:
- case LIBMSI_MODIFY_VALIDATE_DELETE:
- FIXME("%p %d %p - mode not implemented\n", view, eModifyMode, rec );
- r = LIBMSI_RESULT_CALL_NOT_IMPLEMENTED;
- break;
-
- default:
- r = LIBMSI_RESULT_INVALID_DATA;
- }
-
- return r;
-}
-
static unsigned streams_view_delete(LibmsiView *view)
{
LibmsiStreamsView *sv = (LibmsiStreamsView *)view;
@@ -446,7 +358,6 @@ static const LibmsiViewOps streams_ops =
streams_view_close,
streams_view_get_dimensions,
streams_view_get_column_info,
- streams_view_modify,
streams_view_delete,
streams_view_find_matching_rows,
NULL,
diff --git a/libmsi/table.c b/libmsi/table.c
index c9b6532..8e365b7 100644
--- a/libmsi/table.c
+++ b/libmsi/table.c
@@ -1730,154 +1730,6 @@ static unsigned table_view_delete_row( LibmsiView *view, unsigned row )
return LIBMSI_RESULT_SUCCESS;
}
-static unsigned msi_table_update(LibmsiView *view, LibmsiRecord *rec, unsigned row)
-{
- LibmsiTableView *tv = (LibmsiTableView *)view;
- unsigned r, new_row;
-
- /* FIXME: libmsi_query_fetch should set rec index 0 to some ID that
- * sets the fetched record apart from other records
- */
-
- if (!tv->table)
- return LIBMSI_RESULT_INVALID_PARAMETER;
-
- r = msi_table_find_row(tv, rec, &new_row, NULL);
- if (r != LIBMSI_RESULT_SUCCESS)
- {
- ERR("can't find row to modify\n");
- return LIBMSI_RESULT_FUNCTION_FAILED;
- }
-
- /* the row cannot be changed */
- if (row != new_row + 1)
- return LIBMSI_RESULT_FUNCTION_FAILED;
-
- return table_view_set_row(view, new_row, rec, (1 << tv->num_cols) - 1);
-}
-
-static unsigned msi_table_assign(LibmsiView *view, LibmsiRecord *rec)
-{
- LibmsiTableView *tv = (LibmsiTableView *)view;
- unsigned r, row;
-
- if (!tv->table)
- return LIBMSI_RESULT_INVALID_PARAMETER;
-
- r = msi_table_find_row(tv, rec, &row, NULL);
- if (r == LIBMSI_RESULT_SUCCESS)
- return table_view_set_row(view, row, rec, (1 << tv->num_cols) - 1);
- else
- return table_view_insert_row( view, rec, -1, false );
-}
-
-static unsigned modify_delete_row( LibmsiView *view, LibmsiRecord *rec )
-{
- LibmsiTableView *tv = (LibmsiTableView *)view;
- unsigned row, r;
-
- r = msi_table_find_row(tv, rec, &row, NULL);
- if (r != LIBMSI_RESULT_SUCCESS)
- return r;
-
- return table_view_delete_row(view, row);
-}
-
-static unsigned msi_refresh_record( LibmsiView *view, LibmsiRecord *rec, unsigned row )
-{
- LibmsiRecord *curr;
- unsigned r, i, count;
-
- r = table_view_get_row(view, row - 1, &curr);
- if (r != LIBMSI_RESULT_SUCCESS)
- return r;
-
- /* Close the original record */
- _libmsi_record_destroy(&rec->hdr);
-
- count = libmsi_record_get_field_count(rec);
- for (i = 0; i < count; i++)
- _libmsi_record_copy_field(curr, i + 1, rec, i + 1);
-
- msiobj_release(&curr->hdr);
- return LIBMSI_RESULT_SUCCESS;
-}
-
-static unsigned table_view_modify( LibmsiView *view, LibmsiModify eModifyMode,
- LibmsiRecord *rec, unsigned row)
-{
- LibmsiTableView *tv = (LibmsiTableView*)view;
- unsigned r, frow, column;
-
- TRACE("%p %d %p\n", view, eModifyMode, rec );
-
- switch (eModifyMode)
- {
- case LIBMSI_MODIFY_DELETE:
- r = modify_delete_row( view, rec );
- break;
- case LIBMSI_MODIFY_VALIDATE_NEW:
- r = table_validate_new( tv, rec, &column );
- if (r != LIBMSI_RESULT_SUCCESS)
- {
- tv->view.error = LIBMSI_DB_ERROR_DUPLICATEKEY;
- tv->view.error_column = tv->columns[column].colname;
- r = LIBMSI_RESULT_INVALID_DATA;
- }
- break;
-
- case LIBMSI_MODIFY_INSERT:
- r = table_validate_new( tv, rec, NULL );
- if (r != LIBMSI_RESULT_SUCCESS)
- break;
- r = table_view_insert_row( view, rec, -1, false );
- break;
-
- case LIBMSI_MODIFY_INSERT_TEMPORARY:
- r = table_validate_new( tv, rec, NULL );
- if (r != LIBMSI_RESULT_SUCCESS)
- break;
- r = table_view_insert_row( view, rec, -1, true );
- break;
-
- case LIBMSI_MODIFY_REFRESH:
- r = msi_refresh_record( view, rec, row );
- break;
-
- case LIBMSI_MODIFY_UPDATE:
- r = msi_table_update( view, rec, row );
- break;
-
- case LIBMSI_MODIFY_ASSIGN:
- r = msi_table_assign( view, rec );
- break;
-
- case LIBMSI_MODIFY_MERGE:
- /* check row that matches this record */
- r = msi_table_find_row( tv, rec, &frow, &column );
- if (r != LIBMSI_RESULT_SUCCESS)
- {
- r = table_validate_new( tv, rec, NULL );
- if (r == LIBMSI_RESULT_SUCCESS)
- r = table_view_insert_row( view, rec, -1, false );
- }
- break;
-
- case LIBMSI_MODIFY_REPLACE:
- case LIBMSI_MODIFY_VALIDATE:
- case LIBMSI_MODIFY_VALIDATE_FIELD:
- case LIBMSI_MODIFY_VALIDATE_DELETE:
- FIXME("%p %d %p - mode not implemented\n", view, eModifyMode, rec );
- r = LIBMSI_RESULT_CALL_NOT_IMPLEMENTED;
- break;
-
- default:
- r = LIBMSI_RESULT_INVALID_DATA;
- }
-
- return r;
-}
-
static unsigned table_view_delete( LibmsiView *view )
{
LibmsiTableView *tv = (LibmsiTableView*)view;
@@ -2157,7 +2009,6 @@ static const LibmsiViewOps table_ops =
table_view_close,
table_view_get_dimensions,
table_view_get_column_info,
- table_view_modify,
table_view_delete,
table_view_find_matching_rows,
table_view_add_ref,
diff --git a/libmsi/update.c b/libmsi/update.c
index accf3dd..5311f2d 100644
--- a/libmsi/update.c
+++ b/libmsi/update.c
@@ -167,16 +167,6 @@ static unsigned update_view_get_column_info( LibmsiView *view, unsigned n, const
return wv->ops->get_column_info( wv, n, name, type, temporary, table_name );
}
-static unsigned update_view_modify( LibmsiView *view, LibmsiModify eModifyMode,
- LibmsiRecord *rec, unsigned row )
-{
- LibmsiUpdateView *uv = (LibmsiUpdateView*)view;
-
- TRACE("%p %d %p\n", uv, eModifyMode, rec );
-
- return LIBMSI_RESULT_FUNCTION_FAILED;
-}
-
static unsigned update_view_delete( LibmsiView *view )
{
LibmsiUpdateView *uv = (LibmsiUpdateView*)view;
@@ -213,7 +203,6 @@ static const LibmsiViewOps update_ops =
update_view_close,
update_view_get_dimensions,
update_view_get_column_info,
- update_view_modify,
update_view_delete,
update_view_find_matching_rows,
NULL,
diff --git a/libmsi/where.c b/libmsi/where.c
index 094ec41..cbe06d7 100644
--- a/libmsi/where.c
+++ b/libmsi/where.c
@@ -876,113 +876,6 @@ static unsigned where_view_get_column_info( LibmsiView *view, unsigned n, const
type, temporary, table_name);
}
-static unsigned join_find_row( LibmsiWhereView *wv, LibmsiRecord *rec, unsigned *row )
-{
- const WCHAR *str;
- unsigned r, i, id, data;
-
- str = _libmsi_record_get_string_raw( rec, 1 );
- r = _libmsi_id_from_stringW( wv->db->strings, str, &id );
- if (r != LIBMSI_RESULT_SUCCESS)
- return r;
-
- for (i = 0; i < wv->row_count; i++)
- {
- where_view_fetch_int( &wv->view, i, 1, &data );
-
- if (data == id)
- {
- *row = i;
- return LIBMSI_RESULT_SUCCESS;
- }
- }
-
- return LIBMSI_RESULT_FUNCTION_FAILED;
-}
-
-static unsigned join_modify_update( LibmsiView *view, LibmsiRecord *rec )
-{
- LibmsiWhereView *wv = (LibmsiWhereView *)view;
- unsigned r, row, i, mask = 0;
- LibmsiRecord *current;
-
-
- r = join_find_row( wv, rec, &row );
- if (r != LIBMSI_RESULT_SUCCESS)
- return r;
-
- r = msi_view_get_row( wv->db, view, row, &current );
- if (r != LIBMSI_RESULT_SUCCESS)
- return r;
-
- assert(libmsi_record_get_field_count(rec) == libmsi_record_get_field_count(current));
-
- for (i = libmsi_record_get_field_count(rec); i > 0; i--)
- {
- if (!_libmsi_record_compare_fields(rec, current, i))
- mask |= 1 << (i - 1);
- }
- msiobj_release(&current->hdr);
-
- return where_view_set_row( view, row, rec, mask );
-}
-
-static unsigned where_view_modify( LibmsiView *view, LibmsiModify eModifyMode,
- LibmsiRecord *rec, unsigned row )
-{
- LibmsiWhereView *wv = (LibmsiWhereView*)view;
- JOINTABLE *table = wv->tables;
- unsigned r;
-
- TRACE("%p %d %p\n", wv, eModifyMode, rec);
-
- if (!table)
- return LIBMSI_RESULT_FUNCTION_FAILED;
-
- if (!table->next)
- {
- unsigned *rows;
-
- if (find_row(wv, row - 1, &rows) == LIBMSI_RESULT_SUCCESS)
- row = rows[0] + 1;
- else
- row = -1;
-
- return table->view->ops->modify(table->view, eModifyMode, rec, row);
- }
-
- switch (eModifyMode)
- {
- case LIBMSI_MODIFY_UPDATE:
- return join_modify_update( view, rec );
-
- case LIBMSI_MODIFY_ASSIGN:
- case LIBMSI_MODIFY_DELETE:
- case LIBMSI_MODIFY_INSERT:
- case LIBMSI_MODIFY_INSERT_TEMPORARY:
- case LIBMSI_MODIFY_MERGE:
- case LIBMSI_MODIFY_REPLACE:
- case LIBMSI_MODIFY_SEEK:
- case LIBMSI_MODIFY_VALIDATE:
- case LIBMSI_MODIFY_VALIDATE_DELETE:
- case LIBMSI_MODIFY_VALIDATE_FIELD:
- case LIBMSI_MODIFY_VALIDATE_NEW:
- r = LIBMSI_RESULT_FUNCTION_FAILED;
- break;
-
- case LIBMSI_MODIFY_REFRESH:
- r = LIBMSI_RESULT_CALL_NOT_IMPLEMENTED;
- break;
-
- default:
- WARN("%p %d %p %u - unknown mode\n", view, eModifyMode, rec, row );
- r = LIBMSI_RESULT_INVALID_PARAMETER;
- break;
- }
-
- return r;
-}
-
static unsigned where_view_delete( LibmsiView *view )
{
LibmsiWhereView *wv = (LibmsiWhereView*)view;
@@ -1105,7 +998,6 @@ static const LibmsiViewOps where_ops =
where_view_close,
where_view_get_dimensions,
where_view_get_column_info,
- where_view_modify,
where_view_delete,
where_view_find_matching_rows,
NULL,
diff --git a/tests/testdatabase.c b/tests/testdatabase.c
index 48685f8..0607b3d 100644
--- a/tests/testdatabase.c
+++ b/tests/testdatabase.c
@@ -692,358 +692,6 @@ static void test_msibadqueries(void)
ok(r == true, "file didn't exist after commit\n");
}
-static void test_querymodify(void)
-{
- LibmsiDatabase *hdb = 0;
- LibmsiQuery *hquery = 0;
- LibmsiRecord *hrec = 0;
- unsigned r;
- LibmsiDBError err;
- const char *sql;
- char buffer[0x100];
- unsigned sz;
-
- DeleteFile(msifile);
-
- /* just libmsi_database_open should not create a file */
- r = libmsi_database_open(msifile, LIBMSI_DB_OPEN_CREATE, &hdb);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open failed\n");
-
- sql = "CREATE TABLE `phone` ( "
- "`id` INT, `name` CHAR(32), `number` CHAR(32) "
- "PRIMARY KEY `id`)";
- r = run_query( hdb, 0, sql );
- ok(r == LIBMSI_RESULT_SUCCESS, "query failed\n");
-
- sql = "CREATE TABLE `_Validation` ( "
- "`Table` CHAR(32) NOT NULL, `Column` CHAR(32) NOT NULL, "
- "`Nullable` CHAR(4) NOT NULL, `MinValue` INT, `MaxValue` INT, "
- "`KeyTable` CHAR(255), `KeyColumn` SHORT, `Category` CHAR(32), "
- "`Set` CHAR(255), `Description` CHAR(255) PRIMARY KEY `Table`, `Column`)";
- r = run_query( hdb, 0, sql );
- ok(r == LIBMSI_RESULT_SUCCESS, "query failed\n");
-
- sql = "INSERT INTO `_Validation` ( `Table`, `Column`, `Nullable` ) "
- "VALUES('phone', 'id', 'N')";
- r = run_query( hdb, 0, sql );
- ok(r == LIBMSI_RESULT_SUCCESS, "query failed\n");
-
- /* check what the error function reports without doing anything */
- sz = 0;
- /* passing NULL as the 3rd param make function to crash on older platforms */
- err = libmsi_query_get_error( 0, NULL, &sz );
- ok(err == LIBMSI_DB_ERROR_INVALIDARG, "libmsi_query_get_error return\n");
-
- /* open a query */
- sql = "SELECT * FROM `phone`";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n");
-
- /* see what happens with a good hquery and bad args */
- err = libmsi_query_get_error( hquery, NULL, NULL );
- ok(err == LIBMSI_DB_ERROR_INVALIDARG || err == LIBMSI_DB_ERROR_NOERROR,
- "libmsi_query_get_error returns %u (expected -3)\n", err);
- err = libmsi_query_get_error( hquery, buffer, NULL );
- ok(err == LIBMSI_DB_ERROR_INVALIDARG, "libmsi_query_get_error return\n");
-
- /* see what happens with a zero length buffer */
- sz = 0;
- buffer[0] = 'x';
- err = libmsi_query_get_error( hquery, buffer, &sz );
- ok(err == LIBMSI_DB_ERROR_MOREDATA, "libmsi_query_get_error return\n");
- ok(buffer[0] == 'x', "buffer cleared\n");
- ok(sz == 0, "size not zero\n");
-
- /* ok this one is strange */
- sz = 0;
- err = libmsi_query_get_error( hquery, NULL, &sz );
- ok(err == LIBMSI_DB_ERROR_NOERROR, "libmsi_query_get_error return\n");
- ok(sz == 0, "size not zero\n");
-
- /* see if it really has an error */
- sz = sizeof buffer;
- buffer[0] = 'x';
- err = libmsi_query_get_error( hquery, buffer, &sz );
- ok(err == LIBMSI_DB_ERROR_NOERROR, "libmsi_query_get_error return\n");
- ok(buffer[0] == 0, "buffer not cleared\n");
- ok(sz == 0, "size not zero\n");
-
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n");
-
- /* try some invalid records */
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_INSERT, 0 );
- ok(r == LIBMSI_RESULT_INVALID_HANDLE, "libmsi_query_modify failed\n");
- r = libmsi_query_modify(hquery, -1, 0 );
- ok(r == LIBMSI_RESULT_INVALID_HANDLE, "libmsi_query_modify failed\n");
-
- /* try an small record */
- hrec = libmsi_record_create(1);
- r = libmsi_query_modify(hquery, -1, hrec );
- ok(r == LIBMSI_RESULT_INVALID_DATA, "libmsi_query_modify failed\n");
-
- sz = sizeof buffer;
- buffer[0] = 'x';
- err = libmsi_query_get_error( hquery, buffer, &sz );
- ok(err == LIBMSI_DB_ERROR_NOERROR, "libmsi_query_get_error return\n");
- ok(buffer[0] == 0, "buffer not cleared\n");
- ok(sz == 0, "size not zero\n");
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
-
- /* insert a valid record */
- hrec = libmsi_record_create(3);
-
- r = libmsi_record_set_int(hrec, 1, 1);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n");
- r = libmsi_record_set_string(hrec, 2, "bob");
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n");
- r = libmsi_record_set_string(hrec, 3, "7654321");
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n");
-
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n");
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_INSERT_TEMPORARY, hrec );
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_modify failed\n");
-
- /* validate it */
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n");
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_VALIDATE_NEW, hrec );
- ok(r == LIBMSI_RESULT_INVALID_DATA, "libmsi_query_modify failed %u\n", r);
-
- sz = sizeof buffer;
- buffer[0] = 'x';
- err = libmsi_query_get_error( hquery, buffer, &sz );
- ok(err == LIBMSI_DB_ERROR_DUPLICATEKEY, "libmsi_query_get_error returned %u\n", err);
- ok(!strcmp(buffer, "id"), "expected \"id\" c, got \"%s\"\n", buffer);
- ok(sz == 2, "size not 2\n");
-
- /* insert the same thing again */
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n");
-
- /* should fail ... */
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_INSERT_TEMPORARY, hrec );
- ok(r == LIBMSI_RESULT_FUNCTION_FAILED, "libmsi_query_modify failed\n");
-
- /* try to merge the same record */
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n");
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_MERGE, hrec );
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_modify failed\n");
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
-
- /* try merging a new record */
- hrec = libmsi_record_create(3);
-
- r = libmsi_record_set_int(hrec, 1, 10);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n");
- r = libmsi_record_set_string(hrec, 2, "pepe");
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n");
- r = libmsi_record_set_string(hrec, 3, "7654321");
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n");
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_MERGE, hrec );
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_modify failed\n");
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n");
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
-
- r = libmsi_query_close(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n");
- r = libmsi_unref(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n");
-
- sql = "SELECT * FROM `phone`";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n");
-
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n");
-
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n");
-
- r = libmsi_record_get_integer(hrec, 1);
- ok(r == 1, "Expected 1, got %d\n", r);
-
- sz = sizeof(buffer);
- r = libmsi_record_get_string(hrec, 2, buffer, &sz);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_record_get_string failed\n");
- ok(!strcmp(buffer, "bob"), "Expected bob, got %s\n", buffer);
-
- sz = sizeof(buffer);
- r = libmsi_record_get_string(hrec, 3, buffer, &sz);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_record_get_string failed\n");
- ok(!strcmp(buffer, "7654321"), "Expected 7654321, got %s\n", buffer);
-
- /* update the query, non-primary key */
- r = libmsi_record_set_string(hrec, 3, "3141592");
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_record_set_string failed\n");
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_modify failed\n");
-
- /* do it again */
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_modify failed: %d\n", r);
-
- /* update the query, primary key */
- r = libmsi_record_set_int(hrec, 1, 5);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_record_set_int failed\n");
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec);
- ok(r == LIBMSI_RESULT_FUNCTION_FAILED, "libmsi_query_modify failed\n");
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
-
- r = libmsi_query_close(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n");
- r = libmsi_unref(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n");
-
- sql = "SELECT * FROM `phone`";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n");
-
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n");
-
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n");
-
- r = libmsi_record_get_integer(hrec, 1);
- ok(r == 1, "Expected 1, got %d\n", r);
-
- sz = sizeof(buffer);
- r = libmsi_record_get_string(hrec, 2, buffer, &sz);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_record_get_string failed\n");
- ok(!strcmp(buffer, "bob"), "Expected bob, got %s\n", buffer);
-
- sz = sizeof(buffer);
- r = libmsi_record_get_string(hrec, 3, buffer, &sz);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_record_get_string failed\n");
- ok(!strcmp(buffer, "3141592"), "Expected 3141592, got %s\n", buffer);
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
-
- /* use a record that doesn't come from a query fetch */
- hrec = libmsi_record_create(3);
- ok(hrec != 0, "libmsi_record_create failed\n");
-
- r = libmsi_record_set_int(hrec, 1, 3);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n");
- r = libmsi_record_set_string(hrec, 2, "jane");
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n");
- r = libmsi_record_set_string(hrec, 3, "112358");
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n");
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec);
- ok(r == LIBMSI_RESULT_FUNCTION_FAILED, "Expected LIBMSI_RESULT_FUNCTION_FAILED, got %d\n", r);
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
-
- /* use a record that doesn't come from a query fetch, primary key matches */
- hrec = libmsi_record_create(3);
- ok(hrec != 0, "libmsi_record_create failed\n");
-
- r = libmsi_record_set_int(hrec, 1, 1);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n");
- r = libmsi_record_set_string(hrec, 2, "jane");
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n");
- r = libmsi_record_set_string(hrec, 3, "112358");
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n");
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec);
- ok(r == LIBMSI_RESULT_FUNCTION_FAILED, "libmsi_query_modify failed\n");
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
-
- hrec = libmsi_record_create(3);
-
- r = libmsi_record_set_int(hrec, 1, 2);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n");
- r = libmsi_record_set_string(hrec, 2, "nick");
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n");
- r = libmsi_record_set_string(hrec, 3, "141421");
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n");
-
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n");
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_INSERT_TEMPORARY, hrec );
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_modify failed\n");
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n");
- r = libmsi_query_close(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n");
- r = libmsi_unref(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n");
-
- sql = "SELECT * FROM `phone` WHERE `id` = 1";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n");
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n");
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n");
-
- /* change the id to match the second row */
- r = libmsi_record_set_int(hrec, 1, 2);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n");
- r = libmsi_record_set_string(hrec, 2, "jerry");
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n");
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec);
- ok(r == LIBMSI_RESULT_FUNCTION_FAILED, "libmsi_query_modify failed\n");
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
- r = libmsi_query_close(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n");
- r = libmsi_unref(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n");
-
- /* broader search */
- sql = "SELECT * FROM `phone` ORDER BY `id`";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n");
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n");
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n");
-
- /* change the id to match the second row */
- r = libmsi_record_set_int(hrec, 1, 2);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n");
- r = libmsi_record_set_string(hrec, 2, "jerry");
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n");
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec);
- ok(r == LIBMSI_RESULT_FUNCTION_FAILED, "libmsi_query_modify failed\n");
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
- r = libmsi_query_close(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n");
- r = libmsi_unref(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n");
-
- r = libmsi_unref( hdb );
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open close failed\n");
-}
-
static LibmsiDatabase *create_db(void)
{
LibmsiDatabase *hdb = 0;
@@ -3777,63 +3425,6 @@ static void test_join(void)
ok( r == LIBMSI_RESULT_BAD_QUERY_SYNTAX,
"Expected LIBMSI_RESULT_BAD_QUERY_SYNTAX, got %d\n", r );
- /* try updating a row in a join table */
- sql = "SELECT `Component`.`ComponentId`, `FeatureComponents`.`Feature_` "
- "FROM `Component`, `FeatureComponents` "
- "WHERE `Component`.`Component` = `FeatureComponents`.`Component_` "
- "ORDER BY `Feature_`";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok( r == LIBMSI_RESULT_SUCCESS, "failed to open query: %d\n", r );
-
- r = libmsi_query_execute(hquery, 0);
- ok( r == LIBMSI_RESULT_SUCCESS, "failed to execute query: %d\n", r );
-
- r = libmsi_query_fetch(hquery, &hrec);
- ok( r == LIBMSI_RESULT_SUCCESS, "failed to fetch query: %d\n", r );
-
- r = libmsi_record_set_string( hrec, 1, "epicranius" );
- ok( r == LIBMSI_RESULT_SUCCESS, "failed to set string: %d\n", r );
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec);
- ok( r == LIBMSI_RESULT_SUCCESS, "failed to update row: %d\n", r );
-
- /* try another valid operation for joins */
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_REFRESH, hrec);
- todo_wine ok( r == LIBMSI_RESULT_SUCCESS, "failed to refresh row: %d\n", r );
-
- /* try an invalid operation for joins */
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_DELETE, hrec);
- ok( r == LIBMSI_RESULT_FUNCTION_FAILED, "unexpected result: %d\n", r );
-
- r = libmsi_record_set_string( hrec, 2, "epicranius" );
- ok( r == LIBMSI_RESULT_SUCCESS, "failed to set string: %d\n", r );
-
- /* primary key cannot be updated */
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec);
- ok( r == LIBMSI_RESULT_FUNCTION_FAILED, "failed to update row: %d\n", r );
-
- libmsi_unref(hrec);
- libmsi_query_close(hquery);
- libmsi_unref(hquery);
-
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n");
-
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n");
-
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n");
-
- size = MAX_PATH;
- r = libmsi_record_get_string( hrec, 1, buf, &size );
- ok( r == LIBMSI_RESULT_SUCCESS, "failed to get record string: %d\n", r );
- ok( !strcmp( buf, "epicranius" ), "expected 'epicranius', got %s\n", buf );
-
- libmsi_unref(hrec);
- libmsi_query_close(hquery);
- libmsi_unref(hquery);
-
libmsi_unref(hdb);
DeleteFile(msifile);
}
@@ -5228,389 +4819,6 @@ static void test_select_markers(void)
DeleteFile(msifile);
}
-static void test_querymodify_update(void)
-{
- LibmsiDatabase *hdb = 0;
- LibmsiQuery *hquery = 0;
- LibmsiRecord *hrec = 0;
- unsigned i, test_max, offset, count;
- const char *sql;
- unsigned r;
-
- DeleteFile(msifile);
-
- r = libmsi_database_open(msifile, LIBMSI_DB_OPEN_CREATE, &hdb);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open failed\n");
-
- sql = "CREATE TABLE `table` (`A` INT, `B` INT PRIMARY KEY `A`)";
- r = run_query( hdb, 0, sql );
- ok(r == LIBMSI_RESULT_SUCCESS, "query failed\n");
-
- sql = "INSERT INTO `table` (`A`, `B`) VALUES (1, 2)";
- r = run_query( hdb, 0, sql );
- ok(r == LIBMSI_RESULT_SUCCESS, "query failed\n");
-
- sql = "INSERT INTO `table` (`A`, `B`) VALUES (3, 4)";
- r = run_query( hdb, 0, sql );
- ok(r == LIBMSI_RESULT_SUCCESS, "query failed\n");
-
- sql = "INSERT INTO `table` (`A`, `B`) VALUES (5, 6)";
- r = run_query( hdb, 0, sql );
- ok(r == LIBMSI_RESULT_SUCCESS, "query failed\n");
-
- sql = "SELECT `B` FROM `table`";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n");
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n");
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n");
-
- r = libmsi_record_set_int(hrec, 1, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n");
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_modify failed: %d\n", r);
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
-
- r = libmsi_query_close(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n");
- r = libmsi_unref(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n");
-
- sql = "SELECT * FROM `table`";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n");
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n");
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n");
-
- r = libmsi_record_get_integer(hrec, 1);
- ok(r == 1, "Expected 1, got %d\n", r);
- r = libmsi_record_get_integer(hrec, 2);
- ok(r == 0, "Expected 0, got %d\n", r);
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
-
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n");
-
- r = libmsi_record_get_integer(hrec, 1);
- ok(r == 3, "Expected 3, got %d\n", r);
- r = libmsi_record_get_integer(hrec, 2);
- ok(r == 4, "Expected 4, got %d\n", r);
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
-
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n");
-
- r = libmsi_record_get_integer(hrec, 1);
- ok(r == 5, "Expected 5, got %d\n", r);
- r = libmsi_record_get_integer(hrec, 2);
- ok(r == 6, "Expected 6, got %d\n", r);
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
-
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_NO_MORE_ITEMS, "Expected LIBMSI_RESULT_NO_MORE_ITEMS, got %d\n", r);
-
- r = libmsi_query_close(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n");
- r = libmsi_unref(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n");
-
- /* loop through all elements */
- sql = "SELECT `B` FROM `table`";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n");
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n");
-
- while (true)
- {
- r = libmsi_query_fetch(hquery, &hrec);
- if (r != LIBMSI_RESULT_SUCCESS)
- break;
-
- r = libmsi_record_set_int(hrec, 1, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n");
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_modify failed: %d\n", r);
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
- }
-
- r = libmsi_query_close(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n");
- r = libmsi_unref(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n");
-
- sql = "SELECT * FROM `table`";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n");
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n");
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n");
-
- r = libmsi_record_get_integer(hrec, 1);
- ok(r == 1, "Expected 1, got %d\n", r);
- r = libmsi_record_get_integer(hrec, 2);
- ok(r == 0, "Expected 0, got %d\n", r);
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
-
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n");
-
- r = libmsi_record_get_integer(hrec, 1);
- ok(r == 3, "Expected 3, got %d\n", r);
- r = libmsi_record_get_integer(hrec, 2);
- ok(r == 0, "Expected 0, got %d\n", r);
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
-
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n");
-
- r = libmsi_record_get_integer(hrec, 1);
- ok(r == 5, "Expected 5, got %d\n", r);
- r = libmsi_record_get_integer(hrec, 2);
- ok(r == 0, "Expected 0, got %d\n", r);
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
-
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_NO_MORE_ITEMS, "Expected LIBMSI_RESULT_NO_MORE_ITEMS, got %d\n", r);
-
- r = libmsi_query_close(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n");
- r = libmsi_unref(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n");
-
- sql = "CREATE TABLE `table2` (`A` INT, `B` INT PRIMARY KEY `A`)";
- r = run_query( hdb, 0, sql );
- ok(r == LIBMSI_RESULT_SUCCESS, "query failed\n");
-
- sql = "INSERT INTO `table2` (`A`, `B`) VALUES (?, ?)";
- r = libmsi_database_open_query( hdb, sql, &hquery );
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n");
-
- test_max = 100;
- offset = 1234;
- for(i = 0; i < test_max; i++)
- {
-
- hrec = libmsi_record_create( 2 );
- libmsi_record_set_int( hrec, 1, test_max - i );
- libmsi_record_set_int( hrec, 2, i );
-
- r = libmsi_query_execute( hquery, hrec );
- ok(r == LIBMSI_RESULT_SUCCESS, "Got %d\n", r);
-
- r = libmsi_unref( hrec );
- ok(r == LIBMSI_RESULT_SUCCESS, "Got %d\n", r);
- }
-
- r = libmsi_query_close( hquery );
- ok(r == LIBMSI_RESULT_SUCCESS, "Got %d\n", r);
- r = libmsi_unref( hquery );
- ok(r == LIBMSI_RESULT_SUCCESS, "Got %d\n", r);
-
- /* Update. */
- sql = "SELECT * FROM `table2` ORDER BY `B`";
- r = libmsi_database_open_query( hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n");
- r = libmsi_query_execute( hquery, 0 );
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n");
-
- count = 0;
- while (libmsi_query_fetch( hquery, &hrec ) == LIBMSI_RESULT_SUCCESS)
- {
- unsigned b = libmsi_record_get_integer( hrec, 2 );
-
- r = libmsi_record_set_int( hrec, 2, b + offset);
- ok(r == LIBMSI_RESULT_SUCCESS, "Got %d\n", r);
-
- r = libmsi_query_modify( hquery, LIBMSI_MODIFY_UPDATE, hrec );
- ok(r == LIBMSI_RESULT_SUCCESS, "Got %d\n", r);
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
- count++;
- }
- ok(count == test_max, "Got count %d\n", count);
-
- r = libmsi_query_close(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n");
- r = libmsi_unref(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n");
-
- /* Recheck. */
- sql = "SELECT * FROM `table2` ORDER BY `B`";
- r = libmsi_database_open_query( hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n");
- r = libmsi_query_execute( hquery, 0 );
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n");
-
- count = 0;
- while (libmsi_query_fetch( hquery, &hrec ) == LIBMSI_RESULT_SUCCESS)
- {
- unsigned a = libmsi_record_get_integer( hrec, 1 );
- unsigned b = libmsi_record_get_integer( hrec, 2 );
- ok( ( test_max - a + offset) == b, "Got (%d, %d), expected (%d, %d)\n",
- a, b, test_max - a + offset, b);
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
- count++;
- }
- ok(count == test_max, "Got count %d\n", count);
-
- r = libmsi_query_close(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n");
- r = libmsi_unref(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n");
-
- r = libmsi_unref( hdb );
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open close failed\n");
-}
-
-static void test_querymodify_assign(void)
-{
- LibmsiDatabase *hdb = 0;
- LibmsiQuery *hquery = 0;
- LibmsiRecord *hrec = 0;
- const char *sql;
- unsigned r;
-
- /* setup database */
- DeleteFile(msifile);
-
- r = libmsi_database_open(msifile, LIBMSI_DB_OPEN_CREATE, &hdb);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open failed\n");
-
- sql = "CREATE TABLE `table` (`A` INT, `B` INT PRIMARY KEY `A`)";
- r = run_query( hdb, 0, sql );
- ok(r == LIBMSI_RESULT_SUCCESS, "query failed\n");
-
- /* assign to query, new primary key */
- sql = "SELECT * FROM `table`";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n");
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n");
-
- hrec = libmsi_record_create(2);
- ok(hrec != 0, "libmsi_record_create failed\n");
-
- r = libmsi_record_set_int(hrec, 1, 1);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n");
- r = libmsi_record_set_int(hrec, 2, 2);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n");
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_ASSIGN, hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_modify failed: %d\n", r);
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
-
- r = libmsi_query_close(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n");
- r = libmsi_unref(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n");
-
- sql = "SELECT * FROM `table`";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n");
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n");
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n");
-
- r = libmsi_record_get_integer(hrec, 1);
- ok(r == 1, "Expected 1, got %d\n", r);
- r = libmsi_record_get_integer(hrec, 2);
- ok(r == 2, "Expected 2, got %d\n", r);
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
-
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_NO_MORE_ITEMS, "Expected LIBMSI_RESULT_NO_MORE_ITEMS, got %d\n", r);
-
- r = libmsi_query_close(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n");
- r = libmsi_unref(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n");
-
- /* assign to query, primary key matches */
- sql = "SELECT * FROM `table`";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n");
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n");
-
- hrec = libmsi_record_create(2);
- ok(hrec != 0, "libmsi_record_create failed\n");
-
- r = libmsi_record_set_int(hrec, 1, 1);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n");
- r = libmsi_record_set_int(hrec, 2, 4);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n");
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_ASSIGN, hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_modify failed: %d\n", r);
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
-
- r = libmsi_query_close(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n");
- r = libmsi_unref(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n");
-
- sql = "SELECT * FROM `table`";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n");
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n");
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n");
-
- r = libmsi_record_get_integer(hrec, 1);
- ok(r == 1, "Expected 1, got %d\n", r);
- r = libmsi_record_get_integer(hrec, 2);
- ok(r == 4, "Expected 4, got %d\n", r);
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n");
-
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_NO_MORE_ITEMS, "Expected LIBMSI_RESULT_NO_MORE_ITEMS, got %d\n", r);
-
- r = libmsi_query_close(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n");
- r = libmsi_unref(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n");
-
- /* close database */
- r = libmsi_unref( hdb );
- ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open close failed\n");
-}
-
static const WCHAR data10[] = { /* MOO */
0x8001, 0x000b,
};
@@ -5684,36 +4892,16 @@ static void test_stringtable(void)
r = run_query(hdb, 0, sql);
ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- /* open a query */
- sql = "SELECT * FROM `MOO`";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- hrec = libmsi_record_create(2);
-
- r = libmsi_record_set_int(hrec, 1, 3);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_record_set_string(hrec, 2, "three");
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- /* insert a nonpersistent row */
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_INSERT_TEMPORARY, hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_query_close(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_unref(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
/* insert persistent row */
sql = "INSERT INTO `MOO` (`A`, `B`) VALUES (4, 'four')";
r = run_query(hdb, 0, sql);
ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
+ /* delete persistent row */
+ sql = "DELETE FROM `MOO` WHERE `A` = 4";
+ r = run_query(hdb, 0, sql);
+ ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
+
/* insert persistent row */
sql = "INSERT INTO `AAR` (`C`, `D`) VALUES (5, 'five')";
r = run_query(hdb, 0, sql);
@@ -5880,106 +5068,6 @@ static void test_stringtable(void)
DeleteFileA(msifile);
}
-static void test_querymodify_delete(void)
-{
- LibmsiDatabase *hdb = 0;
- LibmsiQuery *hquery = 0;
- LibmsiRecord *hrec = 0;
- unsigned r;
- const char *sql;
- char buffer[0x100];
- unsigned sz;
-
- DeleteFile(msifile);
-
- /* just libmsi_database_open should not create a file */
- r = libmsi_database_open(msifile, LIBMSI_DB_OPEN_CREATE, &hdb);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- sql = "CREATE TABLE `phone` ( "
- "`id` INT, `name` CHAR(32), `number` CHAR(32) "
- "PRIMARY KEY `id`)";
- r = run_query(hdb, 0, sql);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- sql = "INSERT INTO `phone` ( `id`, `name`, `number` )"
- "VALUES('1', 'Alan', '5030581')";
- r = run_query(hdb, 0, sql);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- sql = "INSERT INTO `phone` ( `id`, `name`, `number` )"
- "VALUES('2', 'Barry', '928440')";
- r = run_query(hdb, 0, sql);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- sql = "INSERT INTO `phone` ( `id`, `name`, `number` )"
- "VALUES('3', 'Cindy', '2937550')";
- r = run_query(hdb, 0, sql);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- sql = "SELECT * FROM `phone` WHERE `id` <= 2";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- /* delete 1 */
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_DELETE, hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- /* delete 2 */
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_DELETE, hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_query_close(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_unref(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- sql = "SELECT * FROM `phone`";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- r = libmsi_record_get_integer(hrec, 1);
- ok(r == 3, "Expected 3, got %d\n", r);
-
- sz = sizeof(buffer);
- r = libmsi_record_get_string(hrec, 2, buffer, &sz);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- ok(!strcmp(buffer, "Cindy"), "Expected Cindy, got %s\n", buffer);
-
- sz = sizeof(buffer);
- r = libmsi_record_get_string(hrec, 3, buffer, &sz);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- ok(!strcmp(buffer, "2937550"), "Expected 2937550, got %s\n", buffer);
-
- r = libmsi_unref(hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_NO_MORE_ITEMS, "Expected LIBMSI_RESULT_NO_MORE_ITEMS, got %d\n", r);
-
- r = libmsi_query_close(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_unref(hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_unref(hdb);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-}
-
static const WCHAR _Tables[] = {0x4840, 0x3f7f, 0x4164, 0x422f, 0x4836, 0};
static const WCHAR _StringData[] = {0x4840, 0x3f3f, 0x4577, 0x446c, 0x3b6a, 0x45e4, 0x4824, 0};
static const WCHAR _StringPool[] = {0x4840, 0x3f3f, 0x4577, 0x446c, 0x3e6a, 0x44b2, 0x482f, 0};
@@ -6345,124 +5433,6 @@ static void test_order(void)
libmsi_unref(hdb);
}
-static void test_querymodify_delete_temporary(void)
-{
- LibmsiDatabase *hdb;
- LibmsiQuery *hquery;
- LibmsiRecord *hrec;
- const char *sql;
- unsigned r;
-
- DeleteFile(msifile);
-
- r = libmsi_database_open(msifile, LIBMSI_DB_OPEN_CREATE, &hdb);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- sql = "CREATE TABLE `Table` ( `A` SHORT PRIMARY KEY `A` )";
- r = run_query(hdb, 0, sql);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- sql = "SELECT * FROM `Table`";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- hrec = libmsi_record_create(1);
- libmsi_record_set_int(hrec, 1, 1);
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_INSERT, hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- libmsi_unref(hrec);
-
- hrec = libmsi_record_create(1);
- libmsi_record_set_int(hrec, 1, 2);
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_INSERT_TEMPORARY, hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- libmsi_unref(hrec);
-
- hrec = libmsi_record_create(1);
- libmsi_record_set_int(hrec, 1, 3);
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_INSERT, hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- libmsi_unref(hrec);
-
- hrec = libmsi_record_create(1);
- libmsi_record_set_int(hrec, 1, 4);
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_INSERT_TEMPORARY, hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- libmsi_unref(hrec);
- libmsi_query_close(hquery);
- libmsi_unref(hquery);
-
- sql = "SELECT * FROM `Table` WHERE `A` = 2";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_DELETE, hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- libmsi_unref(hrec);
- libmsi_query_close(hquery);
- libmsi_unref(hquery);
-
- sql = "SELECT * FROM `Table` WHERE `A` = 3";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_DELETE, hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- libmsi_unref(hrec);
- libmsi_query_close(hquery);
- libmsi_unref(hquery);
-
- sql = "SELECT * FROM `Table` ORDER BY `A`";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- r = libmsi_record_get_integer(hrec, 1);
- ok(r == 1, "Expected 1, got %d\n", r);
-
- libmsi_unref(hrec);
-
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- r = libmsi_record_get_integer(hrec, 1);
- ok(r == 4, "Expected 4, got %d\n", r);
-
- libmsi_unref(hrec);
-
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_NO_MORE_ITEMS, "Expected LIBMSI_RESULT_NO_MORE_ITEMS, got %d\n", r);
-
- libmsi_query_close(hquery);
- libmsi_unref(hquery);
- libmsi_unref(hdb);
- DeleteFileA(msifile);
-}
-
static void test_deleterow(void)
{
LibmsiDatabase *hdb;
@@ -7119,201 +6089,6 @@ static void test_forcecodepage(void)
DeleteFileA("forcecodepage.idt");
}
-static void test_querymodify_refresh(void)
-{
- LibmsiDatabase *hdb;
- LibmsiQuery *hquery;
- LibmsiRecord *hrec;
- const char *sql;
- char buffer[MAX_PATH];
- unsigned r;
- unsigned size;
-
- DeleteFile(msifile);
-
- r = libmsi_database_open(msifile, LIBMSI_DB_OPEN_CREATE, &hdb);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- sql = "CREATE TABLE `Table` ( `A` CHAR(72) NOT NULL, `B` INT PRIMARY KEY `A` )";
- r = run_query(hdb, 0, sql);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- sql = "INSERT INTO `Table` ( `A`, `B` ) VALUES ( 'hi', 1 )";
- r = run_query(hdb, 0, sql);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- sql = "SELECT * FROM `Table`";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- sql = "UPDATE `Table` SET `B` = 2 WHERE `A` = 'hi'";
- r = run_query(hdb, 0, sql);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_REFRESH, hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- size = MAX_PATH;
- r = libmsi_record_get_string(hrec, 1, buffer, &size);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- ok(!strcmp(buffer, "hi"), "Expected \"hi\", got \"%s\"\n", buffer);
- ok(size == 2, "Expected 2, got %d\n", size);
-
- r = libmsi_record_get_integer(hrec, 2);
- ok(r == 2, "Expected 2, got %d\n", r);
-
- libmsi_unref(hrec);
- libmsi_query_close(hquery);
- libmsi_unref(hquery);
-
- sql = "INSERT INTO `Table` ( `A`, `B` ) VALUES ( 'hello', 3 )";
- r = run_query(hdb, 0, sql);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- sql = "SELECT * FROM `Table` WHERE `B` = 3";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- sql = "UPDATE `Table` SET `B` = 2 WHERE `A` = 'hello'";
- r = run_query(hdb, 0, sql);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- sql = "INSERT INTO `Table` ( `A`, `B` ) VALUES ( 'hithere', 3 )";
- r = run_query(hdb, 0, sql);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_REFRESH, hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- size = MAX_PATH;
- r = libmsi_record_get_string(hrec, 1, buffer, &size);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- ok(!strcmp(buffer, "hello"), "Expected \"hello\", got \"%s\"\n", buffer);
- ok(size == 5, "Expected 5, got %d\n", size);
-
- r = libmsi_record_get_integer(hrec, 2);
- ok(r == 2, "Expected 2, got %d\n", r);
-
- libmsi_unref(hrec);
- libmsi_query_close(hquery);
- libmsi_unref(hquery);
- libmsi_unref(hdb);
- DeleteFileA(msifile);
-}
-
-static void test_where_querymodify(void)
-{
- LibmsiDatabase *hdb;
- LibmsiQuery *hquery;
- LibmsiRecord *hrec;
- const char *sql;
- unsigned r;
-
- DeleteFile(msifile);
-
- r = libmsi_database_open(msifile, LIBMSI_DB_OPEN_CREATE, &hdb);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- sql = "CREATE TABLE `Table` ( `A` INT, `B` INT PRIMARY KEY `A` )";
- r = run_query(hdb, 0, sql);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- sql = "INSERT INTO `Table` ( `A`, `B` ) VALUES ( 1, 2 )";
- r = run_query(hdb, 0, sql);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- sql = "INSERT INTO `Table` ( `A`, `B` ) VALUES ( 3, 4 )";
- r = run_query(hdb, 0, sql);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- sql = "INSERT INTO `Table` ( `A`, `B` ) VALUES ( 5, 6 )";
- r = run_query(hdb, 0, sql);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- /* `B` = 3 doesn't match, but the query shouldn't be executed */
- sql = "SELECT * FROM `Table` WHERE `B` = 3";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- hrec = libmsi_record_create(2);
- libmsi_record_set_int(hrec, 1, 7);
- libmsi_record_set_int(hrec, 2, 8);
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_INSERT_TEMPORARY, hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- libmsi_unref(hrec);
- libmsi_query_close(hquery);
- libmsi_unref(hquery);
-
- sql = "SELECT * FROM `Table` WHERE `A` = 7";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- r = libmsi_record_get_integer(hrec, 1);
- ok(r == 7, "Expected 7, got %d\n", r);
-
- r = libmsi_record_get_integer(hrec, 2);
- ok(r == 8, "Expected 8, got %d\n", r);
-
- libmsi_record_set_int(hrec, 2, 9);
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- libmsi_unref(hrec);
- libmsi_query_close(hquery);
- libmsi_unref(hquery);
-
- sql = "SELECT * FROM `Table` WHERE `A` = 7";
- r = libmsi_database_open_query(hdb, sql, &hquery);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
- r = libmsi_query_execute(hquery, 0);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- r = libmsi_query_fetch(hquery, &hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- r = libmsi_record_get_integer(hrec, 1);
- ok(r == 7, "Expected 7, got %d\n", r);
-
- r = libmsi_record_get_integer(hrec, 2);
- ok(r == 9, "Expected 9, got %d\n", r);
-
- sql = "UPDATE `Table` SET `B` = 10 WHERE `A` = 7";
- r = run_query(hdb, 0, sql);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- r = libmsi_query_modify(hquery, LIBMSI_MODIFY_REFRESH, hrec);
- ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
-
- r = libmsi_record_get_integer(hrec, 1);
- ok(r == 7, "Expected 7, got %d\n", r);
-
- r = libmsi_record_get_integer(hrec, 2);
- ok(r == 10, "Expected 10, got %d\n", r);
-
- libmsi_unref(hrec);
- libmsi_query_close(hquery);
- libmsi_unref(hquery);
- libmsi_unref(hdb);
-}
-
static bool create_storage(const char *name)
{
WCHAR nameW[MAX_PATH];
@@ -9459,7 +8234,6 @@ void main()
test_msidatabase();
test_msiinsert();
test_msibadqueries();
- test_querymodify();
test_querygetcolumninfo();
test_getcolinfo();
test_msiexport();
@@ -9482,20 +8256,14 @@ void main()
test_tables_order();
test_rows_order();
test_select_markers();
- test_querymodify_update();
- test_querymodify_assign();
test_stringtable();
- test_querymodify_delete();
test_defaultdatabase();
test_order();
- test_querymodify_delete_temporary();
test_deleterow();
test_quotes();
test_carriagereturn();
test_noquotes();
test_forcecodepage();
- test_querymodify_refresh();
- test_where_querymodify();
test_storages_table();
test_droptable();
#if 0
diff --git a/tests/testdatabase.ok b/tests/testdatabase.ok
index 7095481..8190d0a 100644
--- a/tests/testdatabase.ok
+++ b/tests/testdatabase.ok
@@ -141,117 +141,6 @@ ok: r == LIBMSI_RESULT_SUCCESS
ok: r == LIBMSI_RESULT_SUCCESS
ok: r == LIBMSI_RESULT_SUCCESS
ok: r == true
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: err == LIBMSI_DB_ERROR_INVALIDARG
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: err == LIBMSI_DB_ERROR_INVALIDARG || err == LIBMSI_DB_ERROR_NOERROR
-ok: err == LIBMSI_DB_ERROR_INVALIDARG
-ok: err == LIBMSI_DB_ERROR_MOREDATA
-ok: buffer[0] == 'x'
-ok: sz == 0
-ok: err == LIBMSI_DB_ERROR_NOERROR
-ok: sz == 0
-ok: err == LIBMSI_DB_ERROR_NOERROR
-ok: buffer[0] == 0
-ok: sz == 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_INVALID_HANDLE
-ok: r == LIBMSI_RESULT_INVALID_HANDLE
-ok: r == LIBMSI_RESULT_INVALID_DATA
-ok: err == LIBMSI_DB_ERROR_NOERROR
-ok: buffer[0] == 0
-ok: sz == 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_INVALID_DATA
-ok: err == LIBMSI_DB_ERROR_DUPLICATEKEY
-ok: !strcmp(buffer, "id")
-ok: sz == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "bob")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "7654321")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "bob")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "3141592")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: hrec != 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: hrec != 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
ok: res == LIBMSI_RESULT_SUCCESS
ok: res == LIBMSI_RESULT_SUCCESS
ok: hdb
@@ -860,19 +749,6 @@ ok: r == LIBMSI_RESULT_SUCCESS
ok: r == LIBMSI_RESULT_SUCCESS
ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
ok: r == LIBMSI_RESULT_BAD_QUERY_SYNTAX
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp( buf, "epicranius" )
ok: cond == LIBMSI_CONDITION_ERROR
ok: res == LIBMSI_RESULT_SUCCESS
ok: res == LIBMSI_RESULT_SUCCESS
@@ -1230,827 +1106,6 @@ ok: r == LIBMSI_RESULT_SUCCESS
ok: r == LIBMSI_RESULT_SUCCESS
ok: r == LIBMSI_RESULT_SUCCESS
ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 1
-ok: r == 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 3
-ok: r == 4
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 5
-ok: r == 6
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 1
-ok: r == 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 3
-ok: r == 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 5
-ok: r == 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == test_max
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: ( test_max - a + offset) == b
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: count == test_max
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: hrec != 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 1
-ok: r == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: hrec != 0
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 1
-ok: r == 4
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
ok: r == 2
ok: r == 1
ok: r == LIBMSI_RESULT_SUCCESS
@@ -2104,34 +1159,6 @@ ok: hr == S_OK
ok: hr == S_OK
ok: r == LIBMSI_RESULT_SUCCESS
ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 3
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "Cindy")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "2937550")
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
ok: hr == S_OK
ok: stg != NULL
ok: hr == S_OK
@@ -2233,29 +1260,6 @@ ok: r == LIBMSI_RESULT_SUCCESS
ok: r == LIBMSI_RESULT_SUCCESS
ok: r == LIBMSI_RESULT_SUCCESS
ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 1
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 4
-ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
ok: !strcmp(buf, "two")
ok: r == LIBMSI_RESULT_NO_MORE_ITEMS
ok: r == LIBMSI_RESULT_SUCCESS
@@ -2388,51 +1392,6 @@ ok: fd != -1
ok: r == LIBMSI_RESULT_SUCCESS
ok: !strcmp(buffer, "\r\n\r\n850\t_ForceCodepage\r\n")
ok: r == LIBMSI_RESULT_FUNCTION_FAILED
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "hi")
-ok: size == 2
-ok: r == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: !strcmp(buffer, "hello")
-ok: size == 5
-ok: r == 2
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 7
-ok: r == 8
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 7
-ok: r == 9
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == LIBMSI_RESULT_SUCCESS
-ok: r == 7
-ok: r == 10
ok: res == LIBMSI_RESULT_SUCCESS
ok: res == LIBMSI_RESULT_SUCCESS
ok: hdb