forked from mirror/go-sqlite3
parent
bd7fdb6033
commit
866c3293d9
|
@ -48,7 +48,7 @@ func (b *SQLiteBackup) Step(p int) (bool, error) {
|
||||||
if ret == C.SQLITE_DONE {
|
if ret == C.SQLITE_DONE {
|
||||||
return true, nil
|
return true, nil
|
||||||
} else if ret != 0 && ret != C.SQLITE_LOCKED && ret != C.SQLITE_BUSY {
|
} else if ret != 0 && ret != C.SQLITE_LOCKED && ret != C.SQLITE_BUSY {
|
||||||
return false, &Error{Code: ErrNo(ret)}
|
return false, Error{Code: ErrNo(ret)}
|
||||||
}
|
}
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,7 @@ func (b *SQLiteBackup) Close() error {
|
||||||
runtime.SetFinalizer(b, nil)
|
runtime.SetFinalizer(b, nil)
|
||||||
|
|
||||||
if ret != 0 {
|
if ret != 0 {
|
||||||
return &Error{Code: ErrNo(ret)}
|
return Error{Code: ErrNo(ret)}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
7
error.go
7
error.go
|
@ -58,7 +58,7 @@ var (
|
||||||
|
|
||||||
// Error return error message from errno.
|
// Error return error message from errno.
|
||||||
func (err ErrNo) Error() string {
|
func (err ErrNo) Error() string {
|
||||||
return (&Error{Code: err}).Error()
|
return Error{Code: err}.Error()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extend return extended errno.
|
// Extend return extended errno.
|
||||||
|
@ -68,11 +68,10 @@ func (err ErrNo) Extend(by int) ErrNoExtended {
|
||||||
|
|
||||||
// Error return error message that is extended code.
|
// Error return error message that is extended code.
|
||||||
func (err ErrNoExtended) Error() string {
|
func (err ErrNoExtended) Error() string {
|
||||||
return (&Error{Code: ErrNo(C.int(err) & ErrNoMask), ExtendedCode: err}).Error()
|
return Error{Code: ErrNo(C.int(err) & ErrNoMask), ExtendedCode: err}.Error()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Error return error message.
|
func (err Error) Error() string {
|
||||||
func (err *Error) Error() string {
|
|
||||||
if err.err != "" {
|
if err.err != "" {
|
||||||
return err.err
|
return err.err
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ func TestCorruptDbErrors(t *testing.T) {
|
||||||
_, err = db.Exec("drop table foo")
|
_, err = db.Exec("drop table foo")
|
||||||
}
|
}
|
||||||
|
|
||||||
sqliteErr := err.(*Error)
|
sqliteErr := err.(Error)
|
||||||
if sqliteErr.Code != ErrNotADB {
|
if sqliteErr.Code != ErrNotADB {
|
||||||
t.Error("wrong error code for corrupted DB")
|
t.Error("wrong error code for corrupted DB")
|
||||||
}
|
}
|
||||||
|
@ -110,7 +110,7 @@ func TestExtendedErrorCodes_ForeignKey(t *testing.T) {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Error("No error!")
|
t.Error("No error!")
|
||||||
} else {
|
} else {
|
||||||
sqliteErr := err.(*Error)
|
sqliteErr := err.(Error)
|
||||||
if sqliteErr.Code != ErrConstraint {
|
if sqliteErr.Code != ErrConstraint {
|
||||||
t.Errorf("Wrong basic error code: %d != %d",
|
t.Errorf("Wrong basic error code: %d != %d",
|
||||||
sqliteErr.Code, ErrConstraint)
|
sqliteErr.Code, ErrConstraint)
|
||||||
|
@ -166,7 +166,7 @@ func TestExtendedErrorCodes_NotNull(t *testing.T) {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Error("No error!")
|
t.Error("No error!")
|
||||||
} else {
|
} else {
|
||||||
sqliteErr := err.(*Error)
|
sqliteErr := err.(Error)
|
||||||
if sqliteErr.Code != ErrConstraint {
|
if sqliteErr.Code != ErrConstraint {
|
||||||
t.Errorf("Wrong basic error code: %d != %d",
|
t.Errorf("Wrong basic error code: %d != %d",
|
||||||
sqliteErr.Code, ErrConstraint)
|
sqliteErr.Code, ErrConstraint)
|
||||||
|
@ -222,7 +222,7 @@ func TestExtendedErrorCodes_Unique(t *testing.T) {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Error("No error!")
|
t.Error("No error!")
|
||||||
} else {
|
} else {
|
||||||
sqliteErr := err.(*Error)
|
sqliteErr := err.(Error)
|
||||||
if sqliteErr.Code != ErrConstraint {
|
if sqliteErr.Code != ErrConstraint {
|
||||||
t.Errorf("Wrong basic error code: %d != %d",
|
t.Errorf("Wrong basic error code: %d != %d",
|
||||||
sqliteErr.Code, ErrConstraint)
|
sqliteErr.Code, ErrConstraint)
|
||||||
|
|
12
sqlite3.go
12
sqlite3.go
|
@ -298,7 +298,7 @@ func (ai *aggInfo) Done(ctx *C.sqlite3_context) {
|
||||||
// Commit transaction.
|
// Commit transaction.
|
||||||
func (tx *SQLiteTx) Commit() error {
|
func (tx *SQLiteTx) Commit() error {
|
||||||
_, err := tx.c.exec(context.Background(), "COMMIT", nil)
|
_, err := tx.c.exec(context.Background(), "COMMIT", nil)
|
||||||
if err != nil && err.(*Error).Code == C.SQLITE_BUSY {
|
if err != nil && err.(Error).Code == C.SQLITE_BUSY {
|
||||||
// sqlite3 will leave the transaction open in this scenario.
|
// sqlite3 will leave the transaction open in this scenario.
|
||||||
// However, database/sql considers the transaction complete once we
|
// However, database/sql considers the transaction complete once we
|
||||||
// return from Commit() - we must clean up to honour its semantics.
|
// return from Commit() - we must clean up to honour its semantics.
|
||||||
|
@ -399,12 +399,12 @@ func (c *SQLiteConn) AutoCommit() bool {
|
||||||
return int(C.sqlite3_get_autocommit(c.db)) != 0
|
return int(C.sqlite3_get_autocommit(c.db)) != 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *SQLiteConn) lastError() *Error {
|
func (c *SQLiteConn) lastError() error {
|
||||||
rv := C.sqlite3_errcode(c.db)
|
rv := C.sqlite3_errcode(c.db)
|
||||||
if rv == C.SQLITE_OK {
|
if rv == C.SQLITE_OK {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return &Error{
|
return Error{
|
||||||
Code: ErrNo(rv),
|
Code: ErrNo(rv),
|
||||||
ExtendedCode: ErrNoExtended(C.sqlite3_extended_errcode(c.db)),
|
ExtendedCode: ErrNoExtended(C.sqlite3_extended_errcode(c.db)),
|
||||||
err: C.GoString(C.sqlite3_errmsg(c.db)),
|
err: C.GoString(C.sqlite3_errmsg(c.db)),
|
||||||
|
@ -519,7 +519,7 @@ func (c *SQLiteConn) begin(ctx context.Context) (driver.Tx, error) {
|
||||||
return &SQLiteTx{c}, nil
|
return &SQLiteTx{c}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func errorString(err *Error) string {
|
func errorString(err Error) string {
|
||||||
return C.GoString(C.sqlite3_errstr(C.int(err.Code)))
|
return C.GoString(C.sqlite3_errstr(C.int(err.Code)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -601,7 +601,7 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
|
||||||
C.SQLITE_OPEN_CREATE,
|
C.SQLITE_OPEN_CREATE,
|
||||||
nil)
|
nil)
|
||||||
if rv != 0 {
|
if rv != 0 {
|
||||||
return nil, &Error{Code: ErrNo(rv)}
|
return nil, Error{Code: ErrNo(rv)}
|
||||||
}
|
}
|
||||||
if db == nil {
|
if db == nil {
|
||||||
return nil, errors.New("sqlite succeeded without returning a database")
|
return nil, errors.New("sqlite succeeded without returning a database")
|
||||||
|
@ -609,7 +609,7 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
|
||||||
|
|
||||||
rv = C.sqlite3_busy_timeout(db, C.int(busyTimeout))
|
rv = C.sqlite3_busy_timeout(db, C.int(busyTimeout))
|
||||||
if rv != C.SQLITE_OK {
|
if rv != C.SQLITE_OK {
|
||||||
return nil, &Error{Code: ErrNo(rv)}
|
return nil, Error{Code: ErrNo(rv)}
|
||||||
}
|
}
|
||||||
|
|
||||||
conn := &SQLiteConn{db: db, loc: loc, txlock: txlock}
|
conn := &SQLiteConn{db: db, loc: loc, txlock: txlock}
|
||||||
|
|
Loading…
Reference in New Issue