| 44 | } |
| 45 | |
| 46 | static int TraceSqlCallback(unsigned code, void* context, void* param1, void* param2) |
| 47 | { |
| 48 | auto* db = static_cast<SQLiteDatabase*>(context); |
| 49 | if (code == SQLITE_TRACE_STMT) { |
| 50 | auto* stmt = static_cast<sqlite3_stmt*>(param1); |
| 51 | // To be conservative and avoid leaking potentially secret information |
| 52 | // in the log file, only expand statements that query the database, not |
| 53 | // statements that update the database. |
| 54 | char* expanded{sqlite3_stmt_readonly(stmt) ? sqlite3_expanded_sql(stmt) : nullptr}; |
| 55 | LogTrace(BCLog::WALLETDB, "[%s] SQLite Statement: %s\n", db->Filename(), expanded ? expanded : sqlite3_sql(stmt)); |
| 56 | if (expanded) sqlite3_free(expanded); |
| 57 | } |
| 58 | return SQLITE_OK; |
| 59 | } |
| 60 | |
| 61 | static bool BindBlobToStatement(sqlite3_stmt* stmt, |
| 62 | int index, |