in connection_go18.go [30:60]
func (c *conn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) {
if opts.ReadOnly {
return nil, errors.New("read-only transactions are not supported")
}
var isolation isoLevel
switch sql.IsolationLevel(opts.Isolation) {
case sql.LevelDefault:
isolation = isolationUseCurrent
case sql.LevelReadUncommitted:
isolation = isolationReadUncommitted
case sql.LevelReadCommitted:
isolation = isolationReadComitted
case sql.LevelWriteCommitted:
return nil, errors.New("LevelWriteCommitted isolation level is not supported")
case sql.LevelRepeatableRead:
isolation = isolationRepeatableRead
case sql.LevelSnapshot:
return nil, errors.New("LevelSnapshot isolation level is not supported")
case sql.LevelSerializable:
isolation = isolationSerializable
case sql.LevelLinearizable:
return nil, errors.New("LevelLinearizable isolation level is not supported")
default:
return nil, fmt.Errorf("unsupported transaction isolation level: %d", opts.Isolation)
}
return c.begin(ctx, isolation)
}