Fix several bugs in the journal query function.

This commit is contained in:
Andreas Schneider 2008-04-29 11:41:16 +02:00
parent cc5c87068e
commit 27fb5d9128
2 changed files with 25 additions and 5 deletions

View file

@ -76,7 +76,7 @@ static int csync_journal_is_empty(CSYNC *ctx) {
int rc = 0; int rc = 0;
result = csync_journal_query(ctx, "SELECT COUNT(key) FROM metadata LIMIT 1 OFFSET 0;"); result = csync_journal_query(ctx, "SELECT COUNT(key) FROM metadata LIMIT 1 OFFSET 0;");
if (result && result->count == 0) { if (result == NULL) {
rc = 1; rc = 1;
} }
c_strlist_destroy(result); c_strlist_destroy(result);
@ -264,7 +264,6 @@ c_strlist_t *csync_journal_query(CSYNC *ctx, const char *statement) {
CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "Gave up waiting for lock to clear"); CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "Gave up waiting for lock to clear");
} }
CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "sqlite3_compile error: %s - on query %s", sqlite3_errmsg(ctx->journal.db), statement); CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "sqlite3_compile error: %s - on query %s", sqlite3_errmsg(ctx->journal.db), statement);
result = c_strlist_new(1);
break; break;
} else { } else {
busy_count = 0; busy_count = 0;
@ -289,8 +288,14 @@ c_strlist_t *csync_journal_query(CSYNC *ctx, const char *statement) {
CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "sqlite3_step: MISUSE!!"); CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "sqlite3_step: MISUSE!!");
} }
if (err == SQLITE_DONE || err == SQLITE_ERROR) { if (err == SQLITE_DONE) {
if (result == NULL) {
result = c_strlist_new(1); result = c_strlist_new(1);
}
break;
}
if (err == SQLITE_ERROR) {
break; break;
} }

View file

@ -62,7 +62,20 @@ START_TEST (check_csync_journal_query_statement)
c_strlist_destroy(result); c_strlist_destroy(result);
result = csync_journal_query(csync, "SELECT;"); result = csync_journal_query(csync, "SELECT;");
fail_unless(result != NULL, NULL); fail_unless(result == NULL, NULL);
c_strlist_destroy(result);
}
END_TEST
START_TEST (check_csync_journal_create_error)
{
c_strlist_t *result = NULL;
result = csync_journal_query(csync, "CREATE TABLE test(key INTEGER, text VARCHAR(10));");
fail_if(result == NULL, NULL);
c_strlist_destroy(result);
result = csync_journal_query(csync, "CREATE TABLE test(key INTEGER, text VARCHAR(10));");
fail_unless(result == NULL, NULL);
c_strlist_destroy(result); c_strlist_destroy(result);
} }
END_TEST END_TEST
@ -71,6 +84,7 @@ START_TEST (check_csync_journal_insert_statement)
{ {
c_strlist_t *result = NULL; c_strlist_t *result = NULL;
result = csync_journal_query(csync, "CREATE TABLE test(key INTEGER, text VARCHAR(10));"); result = csync_journal_query(csync, "CREATE TABLE test(key INTEGER, text VARCHAR(10));");
fail_if(result == NULL, NULL);
c_strlist_destroy(result); c_strlist_destroy(result);
fail_unless(csync_journal_insert(csync, "INSERT;") == 0, NULL); fail_unless(csync_journal_insert(csync, "INSERT;") == 0, NULL);
fail_unless(csync_journal_insert(csync, "INSERT") == 0, NULL); fail_unless(csync_journal_insert(csync, "INSERT") == 0, NULL);
@ -120,6 +134,7 @@ static Suite *csync_suite(void) {
create_case(s, "check_csync_journal_check", check_csync_journal_check); create_case(s, "check_csync_journal_check", check_csync_journal_check);
create_case_fixture(s, "check_csync_journal_load", check_csync_journal_load, setup, teardown); create_case_fixture(s, "check_csync_journal_load", check_csync_journal_load, setup, teardown);
create_case_fixture(s, "check_csync_journal_query_statement", check_csync_journal_query_statement, setup_init, teardown); create_case_fixture(s, "check_csync_journal_query_statement", check_csync_journal_query_statement, setup_init, teardown);
create_case_fixture(s, "check_csync_journal_create_error", check_csync_journal_create_error, setup_init, teardown);
create_case_fixture(s, "check_csync_journal_insert_statement", check_csync_journal_insert_statement, setup_init, teardown); create_case_fixture(s, "check_csync_journal_insert_statement", check_csync_journal_insert_statement, setup_init, teardown);
create_case_fixture(s, "check_csync_journal_query_create_and_insert_table", check_csync_journal_query_create_and_insert_table, setup_init, teardown); create_case_fixture(s, "check_csync_journal_query_create_and_insert_table", check_csync_journal_query_create_and_insert_table, setup_init, teardown);
create_case_fixture(s, "check_csync_journal_is_empty", check_csync_journal_is_empty, setup_init, teardown); create_case_fixture(s, "check_csync_journal_is_empty", check_csync_journal_is_empty, setup_init, teardown);