diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2012-12-03 11:15:33 +0100 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2012-12-06 20:30:32 +0100 |
commit | bf8c5a031f7a791bd99d18aaa334bc6d2955b536 (patch) | |
tree | dc1d638534e92ae33648b9ed7f44bf553ac7e2f5 | |
parent | 93de41a911d54b018b4d6d52728de6661562f79a (diff) | |
download | msitools-bf8c5a031f7a791bd99d18aaa334bc6d2955b536.tar.gz msitools-bf8c5a031f7a791bd99d18aaa334bc6d2955b536.tar.xz msitools-bf8c5a031f7a791bd99d18aaa334bc6d2955b536.zip |
remove libmsi_query_modify
-rw-r--r-- | include/libmsi.h | 19 | ||||
-rw-r--r-- | libmsi/alter.c | 11 | ||||
-rw-r--r-- | libmsi/create.c | 11 | ||||
-rw-r--r-- | libmsi/delete.c | 11 | ||||
-rw-r--r-- | libmsi/distinct.c | 14 | ||||
-rw-r--r-- | libmsi/drop.c | 1 | ||||
-rw-r--r-- | libmsi/insert.c | 10 | ||||
-rw-r--r-- | libmsi/msipriv.h | 6 | ||||
-rw-r--r-- | libmsi/msiquery.c | 46 | ||||
-rw-r--r-- | libmsi/select.c | 74 | ||||
-rw-r--r-- | libmsi/storages.c | 89 | ||||
-rw-r--r-- | libmsi/streams.c | 89 | ||||
-rw-r--r-- | libmsi/table.c | 149 | ||||
-rw-r--r-- | libmsi/update.c | 11 | ||||
-rw-r--r-- | libmsi/where.c | 108 | ||||
-rw-r--r-- | tests/testdatabase.c | 1242 | ||||
-rw-r--r-- | tests/testdatabase.ok | 1041 |
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, ¤t ); - 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(¤t->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
|