Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 19 additions & 9 deletions sqlite_hook.c
Original file line number Diff line number Diff line change
Expand Up @@ -324,17 +324,22 @@ int sqlite3_errcode(sqlite3* db) {
int sqlite3_prepare_v2(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail) {
initialize_hooks();
printf("[HOOK] Intercepted sqlite3_prepare_v2: %s\n", zSql);
char* translated_sql = translate_sql(zSql);
if (translated_sql) {
char* rs_translated = translate_sql(zSql);
char* translated_sql = NULL;
if (rs_translated) {
translated_sql = strdup(rs_translated);
free_translated_sql(rs_translated);
translated_sql = process_schema_aware_upsert(pg_conn, translated_sql);
translated_sql = process_internal_functions(translated_sql);
printf("[HOOK] Translated SQL: %s\n", translated_sql);
}
int rc = original_sqlite3_prepare_v2(db, zSql, nByte, ppStmt, pzTail);
if (rc == SQLITE_OK && translated_sql) {
add_mapping(*ppStmt, translated_sql);
free_translated_sql(translated_sql);
} else if (translated_sql) free_translated_sql(translated_sql);
free(translated_sql);
} else if (translated_sql) {
free(translated_sql);
}
return rc;
}

Expand Down Expand Up @@ -523,8 +528,11 @@ int sqlite3_finalize(sqlite3_stmt *pStmt) {
int sqlite3_exec(sqlite3* db, const char *sql, int (*callback)(void*,int,char**,char**), void *arg, char **errmsg) {
initialize_hooks();
printf("[HOOK] Intercepted sqlite3_exec: %s\n", sql);
char* translated_sql = translate_sql(sql);
if (translated_sql) {
char* rs_translated = translate_sql(sql);
char* translated_sql = NULL;
if (rs_translated) {
translated_sql = strdup(rs_translated);
free_translated_sql(rs_translated);
translated_sql = process_schema_aware_upsert(pg_conn, translated_sql);
translated_sql = process_internal_functions(translated_sql);
printf("[HOOK] Translated SQL: %s\n", translated_sql);
Expand All @@ -535,17 +543,19 @@ int sqlite3_exec(sqlite3* db, const char *sql, int (*callback)(void*,int,char**,
if (PQresultStatus(res) != PGRES_COMMAND_OK && PQresultStatus(res) != PGRES_TUPLES_OK) {
set_last_error(res);
fprintf(stderr, "[HOOK] Postgres execution failed: %s\n", PQerrorMessage(pg_conn));
if (errmsg) *errmsg = strdup(last_pg_error_msg);
if (errmsg) {
*errmsg = sqlite3_mprintf("%s", last_pg_error_msg);
}
PQclear(res);
free_translated_sql(translated_sql);
free(translated_sql);
return last_sqlite_error;
}
update_rowid_and_changes(pg_conn, res);
last_sqlite_error = SQLITE_OK;
PQclear(res);
}
}
free_translated_sql(translated_sql);
free(translated_sql);
}
return original_sqlite3_exec(db, sql, callback, arg, errmsg);
}
Binary file modified sqlite_hook.so
100644 → 100755
Binary file not shown.
Empty file modified test_sqlite
100644 → 100755
Empty file.
Empty file modified test_sqlite_wrapper.sh
100644 → 100755
Empty file.
Loading