diff --git a/core/src/ext-data.test.c b/core/src/ext-data.test.c index fa3ffab73..07277c4ae 100644 --- a/core/src/ext-data.test.c +++ b/core/src/ext-data.test.c @@ -12,6 +12,10 @@ int crsql_close(sqlite3 *db); crsql_ExtData *crsqlExtDataInit(sqlite3 *db, unsigned char *siteIdBuffer) { crsql_ExtData *pExtData = crsql_newExtData(db); + if (pExtData == 0) { + fprintf(stderr, "crsql_newExtData returned NULL: %s\n", sqlite3_errmsg(db)); + assert(0); + } int rc = crsql_initSiteIdExt(db, pExtData, siteIdBuffer); assert(rc == 0); return pExtData; diff --git a/core/src/tests.c b/core/src/tests.c index 679f003cf..2bceba194 100644 --- a/core/src/tests.c +++ b/core/src/tests.c @@ -9,16 +9,19 @@ SQLITE_EXTENSION_INIT3 int crsql_close(sqlite3 *db) { int rc = SQLITE_OK; rc += sqlite3_exec(db, "SELECT crsql_finalize()", 0, 0, 0); - // printf("finalize rc: %d\n", rc); - rc += sqlite3_close(db); - // printf("close rc: %d\n", rc); - - sqlite3_stmt *next = NULL; - next = sqlite3_next_stmt(db, NULL); - if (next != NULL) { - const char *sql = NULL; - sql = sqlite3_expanded_sql(next); - printf("unfinalized sql: %s\n", sql); + + int close_rc = sqlite3_close(db); + rc += close_rc; + + // sqlite3_next_stmt must not be called after sqlite3_close succeeds. + // If close failed (e.g. SQLITE_BUSY), the connection is still open and we + // can inspect the first outstanding statement for debugging. + if (close_rc != SQLITE_OK) { + sqlite3_stmt *next = sqlite3_next_stmt(db, NULL); + if (next != NULL) { + const char *sql = sqlite3_expanded_sql(next); + printf("unfinalized sql: %s\n", sql); + } } return rc;