@@ -47,14 +47,23 @@ _sqlite3_bind_blob(sqlite3_stmt *stmt, int n, void *p, int np) {
47
47
#include <stdio.h>
48
48
#include <stdint.h>
49
49
50
- static long
51
- _sqlite3_last_insert_rowid(sqlite3* db) {
52
- return (long) sqlite3_last_insert_rowid(db);
50
+ static int
51
+ _sqlite3_exec(sqlite3* db, const char* pcmd, long* rowid, long* changes)
52
+ {
53
+ int rv = sqlite3_exec(db, pcmd, 0, 0, 0);
54
+ *rowid = (long) sqlite3_last_insert_rowid(db);
55
+ *changes = (long) sqlite3_changes(db);
56
+ return rv;
53
57
}
54
58
55
- static long
56
- _sqlite3_changes(sqlite3* db) {
57
- return (long) sqlite3_changes(db);
59
+ static int
60
+ _sqlite3_step(sqlite3_stmt* stmt, long* rowid, long* changes)
61
+ {
62
+ int rv = sqlite3_step(stmt);
63
+ sqlite3* db = sqlite3_db_handle(stmt);
64
+ *rowid = (long) sqlite3_last_insert_rowid(db);
65
+ *changes = (long) sqlite3_changes(db);
66
+ return rv;
58
67
}
59
68
60
69
*/
@@ -232,14 +241,13 @@ func (c *SQLiteConn) Query(query string, args []driver.Value) (driver.Rows, erro
232
241
func (c * SQLiteConn ) exec (cmd string ) (driver.Result , error ) {
233
242
pcmd := C .CString (cmd )
234
243
defer C .free (unsafe .Pointer (pcmd ))
235
- rv := C .sqlite3_exec (c .db , pcmd , nil , nil , nil )
244
+
245
+ var rowid , changes C.long
246
+ rv := C ._sqlite3_exec (c .db , pcmd , & rowid , & changes )
236
247
if rv != C .SQLITE_OK {
237
248
return nil , c .lastError ()
238
249
}
239
- return & SQLiteResult {
240
- int64 (C ._sqlite3_last_insert_rowid (c .db )),
241
- int64 (C ._sqlite3_changes (c .db )),
242
- }, nil
250
+ return & SQLiteResult {int64 (rowid ), int64 (changes )}, nil
243
251
}
244
252
245
253
// Begin transaction.
@@ -379,7 +387,7 @@ func (c *SQLiteConn) Prepare(query string) (driver.Stmt, error) {
379
387
return nil , c .lastError ()
380
388
}
381
389
var t string
382
- if tail != nil && C . strlen ( tail ) > 0 {
390
+ if tail != nil && * tail != '\000' {
383
391
t = strings .TrimSpace (C .GoString (tail ))
384
392
}
385
393
nv := int (C .sqlite3_bind_parameter_count (s ))
@@ -509,19 +517,15 @@ func (s *SQLiteStmt) Exec(args []driver.Value) (driver.Result, error) {
509
517
C .sqlite3_clear_bindings (s .s )
510
518
return nil , err
511
519
}
512
- rv := C .sqlite3_step (s .s )
520
+ var rowid , changes C.long
521
+ rv := C ._sqlite3_step (s .s , & rowid , & changes )
513
522
if rv != C .SQLITE_ROW && rv != C .SQLITE_OK && rv != C .SQLITE_DONE {
514
523
err := s .c .lastError ()
515
524
C .sqlite3_reset (s .s )
516
525
C .sqlite3_clear_bindings (s .s )
517
526
return nil , err
518
527
}
519
-
520
- res := & SQLiteResult {
521
- int64 (C ._sqlite3_last_insert_rowid (s .c .db )),
522
- int64 (C ._sqlite3_changes (s .c .db )),
523
- }
524
- return res , nil
528
+ return & SQLiteResult {int64 (rowid ), int64 (changes )}, nil
525
529
}
526
530
527
531
// Close the rows.
0 commit comments