mirror of https://github.com/mattn/go-sqlite3.git
Next() should wait while BUSY or LOCKED because return value is bool
This commit is contained in:
parent
308067797b
commit
5253daf856
26
sqlite3.go
26
sqlite3.go
|
@ -463,12 +463,14 @@ func (r *SQLiteResult) RowsAffected() (int64, error) {
|
||||||
func (s *SQLiteStmt) Exec(args []driver.Value) (driver.Result, error) {
|
func (s *SQLiteStmt) Exec(args []driver.Value) (driver.Result, error) {
|
||||||
if err := s.bind(args); err != nil {
|
if err := s.bind(args); err != nil {
|
||||||
C.sqlite3_reset(s.s)
|
C.sqlite3_reset(s.s)
|
||||||
|
C.sqlite3_clear_bindings(s.s)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
rv := C.sqlite3_step(s.s)
|
rv := C.sqlite3_step(s.s)
|
||||||
if rv != C.SQLITE_ROW && rv != C.SQLITE_OK && rv != C.SQLITE_DONE {
|
if rv != C.SQLITE_ROW && rv != C.SQLITE_OK && rv != C.SQLITE_DONE {
|
||||||
err := s.c.lastError()
|
err := s.c.lastError()
|
||||||
C.sqlite3_reset(s.s)
|
C.sqlite3_reset(s.s)
|
||||||
|
C.sqlite3_clear_bindings(s.s)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -507,16 +509,22 @@ func (rc *SQLiteRows) Columns() []string {
|
||||||
|
|
||||||
// Move cursor to next.
|
// Move cursor to next.
|
||||||
func (rc *SQLiteRows) Next(dest []driver.Value) error {
|
func (rc *SQLiteRows) Next(dest []driver.Value) error {
|
||||||
rv := C.sqlite3_step(rc.s.s)
|
for {
|
||||||
if rv == C.SQLITE_DONE {
|
rv := C.sqlite3_step(rc.s.s)
|
||||||
return io.EOF
|
if rv == C.SQLITE_DONE {
|
||||||
}
|
return io.EOF
|
||||||
if rv != C.SQLITE_ROW {
|
}
|
||||||
rv = C.sqlite3_reset(rc.s.s)
|
if rv == C.SQLITE_ROW {
|
||||||
if rv != C.SQLITE_OK {
|
break
|
||||||
return rc.s.c.lastError()
|
}
|
||||||
|
if rv != C.SQLITE_BUSY && rv != C.SQLITE_LOCKED {
|
||||||
|
err := rc.s.c.lastError()
|
||||||
|
C.sqlite3_reset(rc.s.s)
|
||||||
|
if rc.nc > 0 {
|
||||||
|
C.sqlite3_clear_bindings(rc.s.s)
|
||||||
|
}
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if rc.decltype == nil {
|
if rc.decltype == nil {
|
||||||
|
|
Loading…
Reference in New Issue