add SystemErrno to Error (#740)
* adding SystemErrno to Error, and fixing error logic when open fails * fix for old versions of libsqlite3 that do not have sqlite3_system_errno defined * fixing pre-processor logic
This commit is contained in:
@@ -240,5 +240,36 @@ func TestExtendedErrorCodes_Unique(t *testing.T) {
|
||||
extended, expected)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestError_SystemErrno(t *testing.T) {
|
||||
_, n, _ := Version()
|
||||
if n < 3012000 {
|
||||
t.Skip("sqlite3_system_errno requires sqlite3 >= 3.12.0")
|
||||
}
|
||||
|
||||
// open a non-existent database in read-only mode so we get an IO error.
|
||||
db, err := sql.Open("sqlite3", "file:nonexistent.db?mode=ro")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
err = db.Ping()
|
||||
if err == nil {
|
||||
t.Fatal("expected error pinging read-only non-existent database, but got nil")
|
||||
}
|
||||
|
||||
serr, ok := err.(Error)
|
||||
if !ok {
|
||||
t.Fatalf("expected error to be of type Error, but got %[1]T %[1]v", err)
|
||||
}
|
||||
|
||||
if serr.SystemErrno == 0 {
|
||||
t.Fatal("expected SystemErrno to be set")
|
||||
}
|
||||
|
||||
if !os.IsNotExist(serr.SystemErrno) {
|
||||
t.Errorf("expected SystemErrno to be a not exists error, but got %v", serr.SystemErrno)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user