SQLite: Fix some string-sizing issues

This commit is contained in:
Tim Wojtulewicz 2025-05-13 14:31:47 -07:00
parent ac064bd6af
commit 1bff4c9537

View file

@ -55,8 +55,11 @@ OperationResult SQLite::DoOpen(OpenResultCallback* cb, RecordValPtr options) {
auto tuning_params = backend_options->GetField<TableVal>("tuning_params")->ToMap(); auto tuning_params = backend_options->GetField<TableVal>("tuning_params")->ToMap();
for ( const auto& [k, v] : tuning_params ) { for ( const auto& [k, v] : tuning_params ) {
auto ks = k->AsListVal()->Idx(0)->AsStringVal(); auto ks = k->AsListVal()->Idx(0)->AsStringVal();
auto ks_sv = ks->ToStdStringView();
auto vs = v->AsStringVal(); auto vs = v->AsStringVal();
std::string cmd = util::fmt("pragma %s = %s", ks->ToStdStringView().data(), vs->ToStdStringView().data()); auto vs_sv = vs->ToStdStringView();
std::string cmd = util::fmt("pragma %.*s = %.*s", static_cast<int>(ks_sv.size()), ks_sv.data(),
static_cast<int>(vs_sv.size()), vs_sv.data());
if ( int res = sqlite3_exec(db, cmd.c_str(), NULL, NULL, &errorMsg); res != SQLITE_OK ) { if ( int res = sqlite3_exec(db, cmd.c_str(), NULL, NULL, &errorMsg); res != SQLITE_OK ) {
std::string err = util::fmt("Error executing tuning pragma statement: %s", errorMsg); std::string err = util::fmt("Error executing tuning pragma statement: %s", errorMsg);
@ -92,7 +95,7 @@ OperationResult SQLite::DoOpen(OpenResultCallback* cb, RecordValPtr options) {
int i = 0; int i = 0;
for ( const auto& stmt : statements ) { for ( const auto& stmt : statements ) {
sqlite3_stmt* ps; sqlite3_stmt* ps;
if ( auto prep_res = CheckError(sqlite3_prepare_v2(db, stmt.c_str(), stmt.size(), &ps, NULL)); if ( auto prep_res = CheckError(sqlite3_prepare_v2(db, stmt.c_str(), static_cast<int>(stmt.size()), &ps, NULL));
prep_res.code != ReturnCode::SUCCESS ) { prep_res.code != ReturnCode::SUCCESS ) {
Close(nullptr); Close(nullptr);
return prep_res; return prep_res;