Skip to content

Commit 7298095

Browse files
committed
bump zstd_vfs and improve debug tracing
1 parent 067f0df commit 7298095

3 files changed

Lines changed: 60 additions & 17 deletions

File tree

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ endif()
1818
FetchContent_Declare(
1919
sqlite_zstd_vfs
2020
GIT_REPOSITORY https://github.com/mlin/sqlite_zstd_vfs.git
21-
GIT_TAG 5b67de8
21+
GIT_TAG dadf93e
2222
)
2323
FetchContent_MakeAvailable(sqlite_zstd_vfs)
2424
include_directories(${sqlite_zstd_vfs_SOURCE_DIR}/src)

src/genomicsqlite.cc

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1132,16 +1132,41 @@ static int register_genomicsqlite_functions(sqlite3 *db, const char **pzErrMsg,
11321132
rc =
11331133
sqlite3_create_function_v2(db, fntab[i].fn, fntab[i].nArg, SQLITE_UTF8 | fntab[i].flags,
11341134
nullptr, fntab[i].fp, nullptr, nullptr, nullptr);
1135-
if (rc != SQLITE_OK)
1135+
if (rc != SQLITE_OK) {
1136+
if (pzErrMsg) {
1137+
*pzErrMsg =
1138+
sqlite3_mprintf("Genomics Extension failed to register %s", fntab[i].fn);
1139+
}
11361140
return rc;
1141+
}
11371142
}
11381143
rc = RegisterSQLiteVirtualTable<GenomicRangeIndexLevelsTVF>(db, "genomic_range_index_levels");
1139-
if (rc != SQLITE_OK)
1144+
if (rc != SQLITE_OK) {
1145+
if (pzErrMsg) {
1146+
*pzErrMsg =
1147+
sqlite3_mprintf("Genomics Extension failed to register genomic_range_index_levels");
1148+
}
11401149
return rc;
1150+
}
11411151
rc = RegisterSQLiteVirtualTable<GenomicRangeRowidsTVF>(db, "genomic_range_rowids");
1142-
if (rc != SQLITE_OK)
1152+
if (rc != SQLITE_OK) {
1153+
if (pzErrMsg) {
1154+
*pzErrMsg =
1155+
sqlite3_mprintf("Genomics Extension failed to register genomic_range_rowids");
1156+
}
1157+
return rc;
1158+
}
1159+
// genomicsqliteJson1Register() may return SQLITE_BUSY if JSON1 (possibly another version
1160+
// thereof) is already loaded, and the extension is being loaded by SELECT load_extension().
1161+
// That is tolerable.
1162+
rc = genomicsqliteJson1Register(db);
1163+
if (rc != SQLITE_OK && rc != SQLITE_BUSY) {
1164+
if (pzErrMsg) {
1165+
*pzErrMsg = sqlite3_mprintf("Genomics Extension failed to register JSON1");
1166+
}
11431167
return rc;
1144-
return genomicsqliteJson1Register(db);
1168+
}
1169+
return SQLITE_OK;
11451170
}
11461171

11471172
/*
@@ -1156,25 +1181,29 @@ extern "C" int sqlite3_genomicsqlite_init(sqlite3 *db, char **pzErrMsg,
11561181
const string MIN_SQLITE_VERSION = "3.31.0";
11571182
if (sqlite3_libversion_number() < MIN_SQLITE_VERSION_NUMBER) {
11581183
if (pzErrMsg) {
1159-
string version_msg = "SQLite library version " + string(sqlite3_libversion()) +
1160-
" is older than " + MIN_SQLITE_VERSION +
1161-
" which is required by Genomics Extension " GIT_REVISION;
1162-
*pzErrMsg = (char *)sqlite3_malloc(version_msg.size() + 1);
1163-
if (*pzErrMsg) {
1164-
strcpy(*pzErrMsg, version_msg.c_str());
1165-
}
1184+
*pzErrMsg = sqlite3_mprintf(
1185+
"SQLite library version %s is older than %s required by Genomics Extension %s",
1186+
sqlite3_libversion(), MIN_SQLITE_VERSION.c_str(), GIT_REVISION);
11661187
}
11671188
return SQLITE_ERROR;
11681189
}
11691190

11701191
int rc = (new ZstdVFS())->Register("zstd");
1171-
if (rc != SQLITE_OK)
1192+
if (rc != SQLITE_OK) {
1193+
if (pzErrMsg) {
1194+
*pzErrMsg = sqlite3_mprintf("Genomics Extension failed initializing zstd_vfs");
1195+
}
11721196
return rc;
1173-
rc = register_genomicsqlite_functions(db, nullptr, pApi);
1197+
}
1198+
rc = register_genomicsqlite_functions(db, (const char **)pzErrMsg, pApi);
11741199
if (rc != SQLITE_OK)
11751200
return rc;
11761201
rc = sqlite3_auto_extension((void (*)(void))register_genomicsqlite_functions);
1177-
if (rc != SQLITE_OK)
1202+
if (rc != SQLITE_OK) {
1203+
if (pzErrMsg) {
1204+
*pzErrMsg = sqlite3_mprintf("Genomics Extension failed sqlite3_auto_extension");
1205+
}
11781206
return rc;
1207+
}
11791208
return SQLITE_OK_LOAD_PERMANENTLY;
11801209
}

test/capi_smoke_test.c

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,22 @@ int main(int argc, char **argv) {
5353
}
5454
printf("%s\n", version);
5555

56-
fprintf(stderr, "create_genomic_range_index_sql()\n");
57-
char *sql = create_genomic_range_index_sql("test", "rid", "beg", "end", -1);
56+
fprintf(stderr, "put_genomic_reference_assembly_sql() @%d\n", sqlite3_total_changes(pDb));
57+
char *sql = put_genomic_reference_assembly_sql("GRCh38_no_alt_analysis_set", 0);
58+
if (!sql) {
59+
fprintf(stderr, "put_genomic_reference_assembly_sql -> null\n");
60+
return 1;
61+
}
62+
rc = sqlite3_exec(pDb, sql, 0, 0, &zErrMsg);
63+
if (rc != SQLITE_OK) {
64+
fprintf(stderr,
65+
"sqlite3_exec(\"put_genomic_reference_assembly_sql(GRCh38))\") -> %d // %s\n", rc,
66+
zErrMsg ? zErrMsg : sqlite3_errstr(rc));
67+
return 1;
68+
}
69+
70+
fprintf(stderr, "create_genomic_range_index_sql() @%d\n", sqlite3_total_changes(pDb));
71+
sql = create_genomic_range_index_sql("test", "rid", "beg", "end", -1);
5872
if (!sql) {
5973
fprintf(stderr, "create_genomic_range_index_sql -> null\n");
6074
return 1;

0 commit comments

Comments
 (0)