Skip to content

Commit 68c8588

Browse files
perf(sqlite): use prepare_cached for database queries
Replaces conn.execute() and conn.prepare() with conn.prepare_cached() in the sqlite module. This leverages rusqlite's built-in LRU statement cache to avoid recompiling SQL statements on every loop iteration, resolving N+1 compilation overheads during bulk operations. Co-authored-by: Tcode-Motion <188012755+Tcode-Motion@users.noreply.github.com>
1 parent 514e6c0 commit 68c8588

1 file changed

Lines changed: 9 additions & 2 deletions

File tree

‎stdlib/src/sqlite.rs‎

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,14 @@ impl StdlibRegistry {
9393
CONNECTIONS.with(|m| {
9494
let mut map = m.borrow_mut();
9595
if let Some(conn) = map.get_mut(&id) {
96-
conn.execute(&sql, rusqlite::params_from_iter(params))
96+
let mut stmt = conn.prepare_cached(&sql).map_err(|e| {
97+
RuntimeError::new(
98+
RuntimeErrorKind::InvalidOperation(e.to_string()),
99+
None,
100+
None,
101+
)
102+
})?;
103+
stmt.execute(rusqlite::params_from_iter(params))
97104
.map_err(|e| {
98105
RuntimeError::new(
99106
RuntimeErrorKind::InvalidOperation(e.to_string()),
@@ -161,7 +168,7 @@ impl StdlibRegistry {
161168
let rows = CONNECTIONS.with(|m| {
162169
let mut map = m.borrow_mut();
163170
if let Some(conn) = map.get_mut(&id) {
164-
let mut stmt = conn.prepare(&sql).map_err(|e| {
171+
let mut stmt = conn.prepare_cached(&sql).map_err(|e| {
165172
RuntimeError::new(
166173
RuntimeErrorKind::InvalidOperation(e.to_string()),
167174
None,

0 commit comments

Comments
 (0)