mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 06:22:22 -04:00
proper implementation of executemany(); drop executescript()
This commit is contained in:
parent
14546c8a8b
commit
e14c5e4745
3 changed files with 34 additions and 11 deletions
|
@ -100,12 +100,11 @@ class DBProxy:
|
||||||
# Updates
|
# Updates
|
||||||
################
|
################
|
||||||
|
|
||||||
def executemany(self, sql: str, args: Iterable[Iterable[ValueForDB]]) -> None:
|
def executemany(self, sql: str, args: Iterable[Sequence[ValueForDB]]) -> None:
|
||||||
self.mod = True
|
self.mod = True
|
||||||
# fixme
|
assert ":" not in sql
|
||||||
for row in args:
|
if isinstance(args, list):
|
||||||
self.execute(sql, *row)
|
list_args = args
|
||||||
|
else:
|
||||||
def executescript(self, sql: str) -> None:
|
list_args = list(args)
|
||||||
self.mod = True
|
self._backend.db_execute_many(sql, list_args)
|
||||||
raise Exception("fixme")
|
|
||||||
|
|
|
@ -386,9 +386,12 @@ class RustBackend:
|
||||||
def restore_trash(self):
|
def restore_trash(self):
|
||||||
self._run_command(pb.BackendInput(restore_trash=pb.Empty()))
|
self._run_command(pb.BackendInput(restore_trash=pb.Empty()))
|
||||||
|
|
||||||
def db_query(self, sql: str, args: Iterable[ValueForDB]) -> List[DBRow]:
|
def db_query(self, sql: str, args: List[ValueForDB]) -> List[DBRow]:
|
||||||
return self._db_command(dict(kind="query", sql=sql, args=args))
|
return self._db_command(dict(kind="query", sql=sql, args=args))
|
||||||
|
|
||||||
|
def db_execute_many(self, sql: str, args: List[List[ValueForDB]]) -> List[DBRow]:
|
||||||
|
return self._db_command(dict(kind="executemany", sql=sql, args=args))
|
||||||
|
|
||||||
def db_begin(self) -> None:
|
def db_begin(self) -> None:
|
||||||
return self._db_command(dict(kind="begin"))
|
return self._db_command(dict(kind="begin"))
|
||||||
|
|
||||||
|
|
|
@ -9,10 +9,17 @@ use serde_derive::{Deserialize, Serialize};
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
#[serde(tag = "kind", rename_all = "lowercase")]
|
#[serde(tag = "kind", rename_all = "lowercase")]
|
||||||
pub(super) enum DBRequest {
|
pub(super) enum DBRequest {
|
||||||
Query { sql: String, args: Vec<SqlValue> },
|
Query {
|
||||||
|
sql: String,
|
||||||
|
args: Vec<SqlValue>,
|
||||||
|
},
|
||||||
Begin,
|
Begin,
|
||||||
Commit,
|
Commit,
|
||||||
Rollback,
|
Rollback,
|
||||||
|
ExecuteMany {
|
||||||
|
sql: String,
|
||||||
|
args: Vec<Vec<SqlValue>>,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
|
@ -74,13 +81,13 @@ pub(super) fn db_command_bytes(ctx: &StorageContext, input: &[u8]) -> Result<Str
|
||||||
ctx.rollback_trx()?;
|
ctx.rollback_trx()?;
|
||||||
DBResult::None
|
DBResult::None
|
||||||
}
|
}
|
||||||
|
DBRequest::ExecuteMany { sql, args } => db_execute_many(ctx, &sql, &args)?,
|
||||||
};
|
};
|
||||||
Ok(serde_json::to_string(&resp)?)
|
Ok(serde_json::to_string(&resp)?)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(super) fn db_query(ctx: &StorageContext, sql: &str, args: &[SqlValue]) -> Result<DBResult> {
|
pub(super) fn db_query(ctx: &StorageContext, sql: &str, args: &[SqlValue]) -> Result<DBResult> {
|
||||||
let mut stmt = ctx.db.prepare_cached(sql)?;
|
let mut stmt = ctx.db.prepare_cached(sql)?;
|
||||||
|
|
||||||
let columns = stmt.column_count();
|
let columns = stmt.column_count();
|
||||||
|
|
||||||
let res: std::result::Result<Vec<Vec<_>>, rusqlite::Error> = stmt
|
let res: std::result::Result<Vec<Vec<_>>, rusqlite::Error> = stmt
|
||||||
|
@ -96,3 +103,17 @@ pub(super) fn db_query(ctx: &StorageContext, sql: &str, args: &[SqlValue]) -> Re
|
||||||
|
|
||||||
Ok(DBResult::Rows(res?))
|
Ok(DBResult::Rows(res?))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(super) fn db_execute_many(
|
||||||
|
ctx: &StorageContext,
|
||||||
|
sql: &str,
|
||||||
|
args: &[Vec<SqlValue>],
|
||||||
|
) -> Result<DBResult> {
|
||||||
|
let mut stmt = ctx.db.prepare_cached(sql)?;
|
||||||
|
|
||||||
|
for params in args {
|
||||||
|
stmt.execute(params)?;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(DBResult::None)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue