From d3e676bdc130ece714494dfad02edfe000d8e91c Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Fri, 10 Jul 2020 10:14:30 +0300 Subject: [PATCH] orm: use errcode comparisons, instead of strcmp(sqlite3_errmsg,msg) --- vlib/builtin/builtin_nix.c.v | 1 - vlib/builtin/cfns.c.v | 1 + vlib/sqlite/sqlite.v | 6 +++++- vlib/v/gen/sql.v | 12 +++++++----- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/vlib/builtin/builtin_nix.c.v b/vlib/builtin/builtin_nix.c.v index aeec477423..5baf964999 100644 --- a/vlib/builtin/builtin_nix.c.v +++ b/vlib/builtin/builtin_nix.c.v @@ -17,7 +17,6 @@ const ( stderr_value = 2 ) -fn C.puts(charptr) */ fn builtin_init() { diff --git a/vlib/builtin/cfns.c.v b/vlib/builtin/cfns.c.v index 993e5f212e..9ae953d7a6 100644 --- a/vlib/builtin/cfns.c.v +++ b/vlib/builtin/cfns.c.v @@ -43,6 +43,7 @@ fn C.chmod(byteptr, int) int fn C.printf(byteptr, ...byteptr) int +fn C.puts(byteptr) int fn C.fputs(byteptr) int diff --git a/vlib/sqlite/sqlite.v b/vlib/sqlite/sqlite.v index de9fc4082c..21299ae581 100644 --- a/vlib/sqlite/sqlite.v +++ b/vlib/sqlite/sqlite.v @@ -37,6 +37,7 @@ fn C.sqlite3_step() int fn C.sqlite3_prepare_v2() fn C.sqlite3_finalize() fn C.sqlite3_column_count(voidptr) int +fn C.sqlite3_errstr(int) charptr // Opens the connection with a database. pub fn connect(path string) ?DB { @@ -58,7 +59,10 @@ fn (db DB) init_stmt(query string) &C.sqlite3_stmt { // Only for V ORM fn get_int_from_stmt(stmt &C.sqlite3_stmt) int { - C.sqlite3_step(stmt) + x := C.sqlite3_step(stmt) + if x != C.SQLITE_OK && x != C.SQLITE_DONE { + C.puts( C.sqlite3_errstr(x) ) + } res := C.sqlite3_column_int(stmt, 0) C.sqlite3_finalize(stmt) return res diff --git a/vlib/v/gen/sql.v b/vlib/v/gen/sql.v index cf60dcd270..1c8568d0c0 100644 --- a/vlib/v/gen/sql.v +++ b/vlib/v/gen/sql.v @@ -88,10 +88,10 @@ fn (mut g Gen) sql_stmt(node ast.SqlStmt) { binds := g.sql_buf.str() g.sql_buf = strings.new_builder(100) g.writeln(binds) - g.writeln('sqlite3_step($g.sql_stmt_name);') - g.write('if (strcmp(sqlite3_errmsg(${db_name}.conn), "not an error") != 0)') - g.write('if (strcmp(sqlite3_errmsg(${db_name}.conn), "no more rows available") != 0) puts(sqlite3_errmsg(${db_name}.conn));') - g.writeln('sqlite3_finalize($g.sql_stmt_name);') + step_res := g.new_tmp_var() + g.writeln('\tint $step_res = sqlite3_step($g.sql_stmt_name);') + g.writeln('\tif( ($step_res != SQLITE_OK) && ($step_res != SQLITE_DONE)){ puts(sqlite3_errmsg(${db_name}.conn)); }') + g.writeln('\tsqlite3_finalize($g.sql_stmt_name);') } fn (mut g Gen) sql_select_expr(node ast.SqlExpr) { @@ -163,7 +163,9 @@ fn (mut g Gen) sql_select_expr(node ast.SqlExpr) { binds := g.sql_buf.str() g.sql_buf = strings.new_builder(100) g.writeln(binds) - g.writeln('if (strcmp(sqlite3_errmsg(${db_name}.conn), "not an error") != 0) puts(sqlite3_errmsg(${db_name}.conn)); ') + binding_res := g.new_tmp_var() + g.writeln('int $binding_res = sqlite3_extended_errcode(${db_name}.conn);') + g.writeln('if ($binding_res != SQLITE_OK) { puts(sqlite3_errmsg(${db_name}.conn)); }') // if node.is_count { g.writeln('$cur_line ${dbtype}__get_int_from_stmt($g.sql_stmt_name);')