Skip to content
This repository has been archived by the owner. It is now read-only.

Commit

Permalink
isolation level context
Browse files Browse the repository at this point in the history
  • Loading branch information
nakagami committed Dec 3, 2016
1 parent f0f4b41 commit 068b6d7
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 7 deletions.
19 changes: 18 additions & 1 deletion driver_go18.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package firebirdsql

import (
"database/sql"
"database/sql/driver"
"errors"

Expand All @@ -52,7 +53,23 @@ func (stmt *firebirdsqlStmt) QueryContext(ctx context.Context, namedargs []drive

func (fc *firebirdsqlConn) BeginContext(ctx context.Context) (driver.Tx, error) {
isolationLevel := ISOLATION_LEVEL_READ_COMMITED
readOnly := false
contextIsolationLevel, ok := driver.IsolationFromContext(ctx)
if ok {
switch (sql.IsolationLevel)(contextIsolationLevel) {
case sql.LevelDefault:
isolationLevel = ISOLATION_LEVEL_READ_COMMITED
case sql.LevelReadUncommitted:
isolationLevel = ISOLATION_LEVEL_READ_COMMITED_LEGACY
case sql.LevelReadCommitted:
isolationLevel = ISOLATION_LEVEL_READ_COMMITED
case sql.LevelRepeatableRead:
isolationLevel = ISOLATION_LEVEL_REPEATABLE_READ
case sql.LevelSerializable:
isolationLevel = ISOLATION_LEVEL_SERIALIZABLE
default:
}
}
readOnly := driver.ReadOnlyFromContext(ctx)
return fc.begin(isolationLevel, readOnly)
}

Expand Down
9 changes: 4 additions & 5 deletions utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -274,11 +274,10 @@ func parseDSN(dsn string) (addr string, dbName string, user string, passwd strin
values, ok = m["isolation_level"]
if ok {
var kv = map[string]int{
"READ_COMMITED_LEGACY": ISOLATION_LEVEL_READ_COMMITED_LEGACY,
"READ_COMMITED": ISOLATION_LEVEL_READ_COMMITED,
"REPEATABLE_READ": ISOLATION_LEVEL_REPEATABLE_READ,
"SERIALIZABLE": ISOLATION_LEVEL_SERIALIZABLE,
"READ_COMMITED_READ_ONLY": ISOLATION_LEVEL_READ_COMMITED_READ_ONLY,
"READ_COMMITED_LEGACY": ISOLATION_LEVEL_READ_COMMITED_LEGACY,
"READ_COMMITED": ISOLATION_LEVEL_READ_COMMITED,
"REPEATABLE_READ": ISOLATION_LEVEL_REPEATABLE_READ,
"SERIALIZABLE": ISOLATION_LEVEL_SERIALIZABLE,
}
isolationLevel, ok = kv[values[0]]
if !ok {
Expand Down
1 change: 0 additions & 1 deletion utils_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ func TestDSNParse(t *testing.T) {
{"user:password@localhost/dbname?isolation_level=READ_COMMITED", "localhost:3050", "dbname", "user", "password", "", "Srp", true, 1},
{"user:password@localhost/dbname?isolation_level=REPEATABLE_READ", "localhost:3050", "dbname", "user", "password", "", "Srp", true, 2},
{"user:password@localhost/dbname?isolation_level=SERIALIZABLE", "localhost:3050", "dbname", "user", "password", "", "Srp", true, 3},
{"user:password@localhost/dbname?isolation_level=READ_COMMITED_READ_ONLY", "localhost:3050", "dbname", "user", "password", "", "Srp", true, 4},
{"user:password@localhost:3000/c:/fbdata/database.fdb?role=role&wire_crypt=false", "localhost:3000", "c:/fbdata/database.fdb", "user", "password", "role", "Srp", false, 1},
}

Expand Down

0 comments on commit 068b6d7

Please sign in to comment.