Skip to content

Commit fa9a98d

Browse files
committed
Use prepared statements for binding queries
1 parent 99f3d18 commit fa9a98d

1 file changed

Lines changed: 25 additions & 10 deletions

File tree

src/database/Database.cpp

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -328,14 +328,24 @@ migrateLedgerHeadersToStoreState(Database& db)
328328
{
329329
// Migrate LCL header from ledgerheaders table to storestate
330330
std::string lclHash;
331-
auto& sess = db.getRawSession();
332-
sess << "SELECT state FROM storestate WHERE statename = "
333-
"'lastclosedledger'",
334-
soci::into(lclHash);
331+
auto& session = db.getSession();
332+
auto& raw = session.session();
333+
334+
// Open a scope because we need prep to be cleaned up before the body of the
335+
// `if`
336+
{
337+
auto prep = db.getPreparedStatement(
338+
"SELECT state FROM storestate WHERE statename = 'lastclosedledger'",
339+
session);
340+
auto& stmt = prep.statement();
341+
stmt.exchange(soci::into(lclHash));
342+
stmt.define_and_bind();
343+
stmt.execute(true);
344+
}
335345

336346
// When we're doing this migration for a new db, storestate will be empty.
337347
// So, only try to set lastclosedledgerheader when the data is found
338-
if (sess.got_data())
348+
if (raw.got_data())
339349
{
340350
if (lclHash.empty())
341351
{
@@ -349,13 +359,18 @@ migrateLedgerHeadersToStoreState(Database& db)
349359
throw std::runtime_error(
350360
"No ledger header found in DB for last closed ledger hash");
351361
}
352-
sess << "INSERT INTO storestate (statename, state) VALUES "
353-
"('lastclosedledgerheader', :v)",
354-
soci::use(headerData);
355-
sess << "DELETE FROM storestate WHERE statename = 'lastclosedledger'";
362+
auto prep =
363+
db.getPreparedStatement("INSERT INTO storestate (statename, state) "
364+
"VALUES ('lastclosedledgerheader', :v)",
365+
session);
366+
auto& stmt = prep.statement();
367+
stmt.exchange(soci::use(headerData));
368+
stmt.define_and_bind();
369+
stmt.execute(true);
370+
raw << "DELETE FROM storestate WHERE statename = 'lastclosedledger'";
356371
}
357372

358-
sess << "DROP TABLE ledgerheaders";
373+
raw << "DROP TABLE ledgerheaders";
359374
}
360375

361376
void

0 commit comments

Comments
 (0)