db.sqlite: fix exec_param_many bug (#21008)

This commit is contained in:
jacksonmowry 2024-03-13 12:39:15 +00:00 committed by GitHub
parent b276aaccf9
commit 8ec990eed8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 22 additions and 0 deletions

View File

@ -315,6 +315,9 @@ pub fn (db &DB) exec_param_many(query string, params []string) ![]Row {
for { for {
res = C.sqlite3_step(stmt) res = C.sqlite3_step(stmt)
if res != sqlite.sqlite_row { if res != sqlite.sqlite_row {
if rows.len == 0 && is_error(res) {
return db.error_message(res, query)
}
break break
} }
mut row := Row{} mut row := Row{}

View File

@ -95,3 +95,22 @@ fn test_alias_db() {
create_host(sqlite.connect(':memory:')!)! create_host(sqlite.connect(':memory:')!)!
assert true assert true
} }
fn test_exec_param_many() {
$if !linux {
return
}
mut db := sqlite.connect(':memory:') or { panic(err) }
assert db.is_open
db.exec('drop table if exists users')!
db.exec("create table users (id integer primary key, name text default '' unique);")!
db.exec("insert into users (name) values ('Sam')")!
db.exec_param_many('insert into users (id, name) values (?, ?)', [
'60',
'Sam',
]) or {
assert err.code() == 19 // constraint failure
return
}
assert false
}