diff --git a/src/db.c b/src/db.c index cc4fb37..cd9c7be 100644 --- a/src/db.c +++ b/src/db.c @@ -98,16 +98,16 @@ safeincr ( debug_assert(argc == 1); sqlite3_value *val = argv[0]; - if (unlikely(SQLITE_INTEGER != sqlite3_value_type(val))) { - sqlite3_result_error(dbctx, "value is not an integer", -1); - return; + int64_t ival = 0; + if (SQLITE_INTEGER == sqlite3_value_type(val)) { + ival = sqlite3_value_int64(val); + if (unlikely(ival == INT64_MAX)) { + sqlite3_result_error(dbctx, "integer overflow", -1); + return; + } + ++ival; } - int64_t ival = sqlite3_value_int64(val); - if (unlikely(ival == INT64_MAX)) { - sqlite3_result_error(dbctx, "integer overflow", -1); - return; - } - sqlite3_result_int64(dbctx, ival + 1); + sqlite3_result_int64(dbctx, ival); } int diff --git a/src/db.h b/src/db.h index 629a292..e262bd4 100644 --- a/src/db.h +++ b/src/db.h @@ -155,8 +155,8 @@ db_query_i64_cb ( * SQLite converts the result to REAL upon integer overflow. * See: . * - * The `safeincr()` function fails if given a non-integer - * argument, or if the argument value equals to INT64_MAX. + * The `safeincr()` function returns 0 if given a non-integer + * argument, and fails if the argument value equals to INT64_MAX. */ int db_register_safeincr (