fix db_sqlite.tryInsertID does raise exceptions in 1.6.0 #19743 (#19744)

This commit is contained in:
flywind 2022-04-25 02:20:18 +08:00 • committed by GitHub
commit b10f0e7bca
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -635,7 +635,7 @@ proc getValue*(db: DbConn, stmtName: SqlPrepared): string
proc tryInsertID*(db: DbConn, query: SqlQuery, proc tryInsertID*(db: DbConn, query: SqlQuery,
args: varargs[string, `$`]): int64 args: varargs[string, `$`]): int64
{.tags: [WriteDbEffect], raises: [DbError].} = {.tags: [WriteDbEffect], raises: [].} =
## Executes the query (typically "INSERT") and returns the ## Executes the query (typically "INSERT") and returns the
## generated ID for the row or -1 in case of an error. ## generated ID for the row or -1 in case of an error.
## ##
@ -650,16 +650,19 @@ proc tryInsertID*(db: DbConn, query: SqlQuery,
## 1, "item#1") == -1 ## 1, "item#1") == -1
## db.close() ## db.close()
assert(not db.isNil, "Database not connected.") assert(not db.isNil, "Database not connected.")
var q = dbFormat(query, args)
var stmt: sqlite3.PStmt
result = -1 result = -1
if prepare_v2(db, q, q.len.cint, stmt, nil) == SQLITE_OK: try:
if step(stmt) == SQLITE_DONE: var q = dbFormat(query, args)
result = last_insert_rowid(db) var stmt: sqlite3.PStmt
if finalize(stmt) != SQLITE_OK: if prepare_v2(db, q, q.len.cint, stmt, nil) == SQLITE_OK:
result = -1 if step(stmt) == SQLITE_DONE:
else: result = last_insert_rowid(db)
discard finalize(stmt) if finalize(stmt) != SQLITE_OK:
result = -1
else:
discard finalize(stmt)
except DbError:
discard
proc insertID*(db: DbConn, query: SqlQuery, proc insertID*(db: DbConn, query: SqlQuery,
args: varargs[string, `$`]): int64 {.tags: [WriteDbEffect].} = args: varargs[string, `$`]): int64 {.tags: [WriteDbEffect].} =
@ -692,7 +695,7 @@ proc insertID*(db: DbConn, query: SqlQuery,
proc tryInsert*(db: DbConn, query: SqlQuery, pkName: string, proc tryInsert*(db: DbConn, query: SqlQuery, pkName: string,
args: varargs[string, `$`]): int64 args: varargs[string, `$`]): int64
{.tags: [WriteDbEffect], raises: [DbError], since: (1, 3).} = {.tags: [WriteDbEffect], raises: [], since: (1, 3).} =
## same as tryInsertID ## same as tryInsertID
tryInsertID(db, query, args) tryInsertID(db, query, args)