Skip to content

Commit

Permalink
v1.8.3
Browse files Browse the repository at this point in the history
  • Loading branch information
stfnmllr committed Feb 9, 2024
1 parent 825a1e6 commit 77ea18f
Show file tree
Hide file tree
Showing 9 changed files with 90 additions and 101 deletions.
3 changes: 3 additions & 0 deletions RELEASENOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ Release Notes

### Minor revisions

#### v1.8.3
- updated dependencies

#### v1.8.2
- fixed github actions & CodeQL toolchain issues

Expand Down
60 changes: 23 additions & 37 deletions driver/connection.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,33 +28,6 @@ import (
"golang.org/x/text/transform"
)

// Transaction isolation levels supported by hdb.
const (
LevelReadCommitted = "READ COMMITTED"
LevelRepeatableRead = "REPEATABLE READ"
LevelSerializable = "SERIALIZABLE"
)

// Access modes supported by hdb.
const (
modeReadOnly = "READ ONLY"
modeReadWrite = "READ WRITE"
)

// map sql isolation level to hdb isolation level.
var isolationLevel = map[driver.IsolationLevel]string{
driver.IsolationLevel(sql.LevelDefault): LevelReadCommitted,
driver.IsolationLevel(sql.LevelReadCommitted): LevelReadCommitted,
driver.IsolationLevel(sql.LevelRepeatableRead): LevelRepeatableRead,
driver.IsolationLevel(sql.LevelSerializable): LevelSerializable,
}

// map sql read only flag to hdb access mode.
var readOnly = map[bool]string{
true: modeReadOnly,
false: modeReadWrite,
}

// ErrUnsupportedIsolationLevel is the error raised if a transaction is started with a not supported isolation level.
var ErrUnsupportedIsolationLevel = errors.New("unsupported isolation level")

Expand All @@ -70,10 +43,13 @@ var ErrNestedQuery = errors.New("nested sql queries are not supported")

// queries.
const (
dummyQuery = "select 1 from dummy"
setIsolationLevel = "set transaction isolation level"
setAccessMode = "set transaction"
setDefaultSchema = "set schema"
dummyQuery = "select 1 from dummy"
setIsolationLevelReadCommitted = "set transaction isolation level read committed"
setIsolationLevelRepeatableRead = "set transaction isolation level repeatable read"
setIsolationLevelSerializable = "set transaction isolation level serializable"
setAccessModeReadOnly = "set transaction read only"
setAccessModeReadWrite = "set transaction read write"
setDefaultSchema = "set schema"
)

var (
Expand Down Expand Up @@ -525,8 +501,15 @@ func (c *conn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, e
return nil, ErrNestedTransaction
}

level, ok := isolationLevel[opts.Isolation]
if !ok {
var isolationLevelQuery string
switch sql.IsolationLevel(opts.Isolation) {
case sql.LevelDefault, sql.LevelReadCommitted:
isolationLevelQuery = setIsolationLevelReadCommitted
case sql.LevelRepeatableRead:
isolationLevelQuery = setIsolationLevelRepeatableRead
case sql.LevelSerializable:
isolationLevelQuery = setIsolationLevelSerializable
default:
return nil, ErrUnsupportedIsolationLevel
}

Expand All @@ -537,13 +520,16 @@ func (c *conn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, e
go func() {
defer c.wg.Done()
// set isolation level
query := strings.Join([]string{setIsolationLevel, level}, " ")
if _, err = c.execDirect(ctx, query, !c.inTx); err != nil {
if _, err = c.execDirect(ctx, isolationLevelQuery, !c.inTx); err != nil {
goto done
}
// set access mode
query = strings.Join([]string{setAccessMode, readOnly[opts.ReadOnly]}, " ")
if _, err = c.execDirect(ctx, query, !c.inTx); err != nil {
if opts.ReadOnly {
_, err = c.execDirect(ctx, setAccessModeReadOnly, !c.inTx)
} else {
_, err = c.execDirect(ctx, setAccessModeReadWrite, !c.inTx)
}
if err != nil {
goto done
}
c.inTx = true
Expand Down
2 changes: 1 addition & 1 deletion driver/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
)

// DriverVersion is the version number of the hdb driver.
const DriverVersion = "1.8.2"
const DriverVersion = "1.8.3"

// DriverName is the driver name to use with sql.Open for hdb databases.
const DriverName = "hdb"
Expand Down
38 changes: 16 additions & 22 deletions driver/internal/protocol/headers.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,23 +69,20 @@ const (
coExecuteLocally commandOptions = 0x10
)

var commandOptionsText = map[commandOptions]string{
coSelfetchOff: "selfetchOff",
coScrollableCursorOn: "scrollabeCursorOn",
coNoResultsetCloseNeeded: "noResltsetCloseNeeded",
coHoldCursorOverCommtit: "holdCursorOverCommit",
coExecuteLocally: "executLocally",
}
var (
coList = []commandOptions{coNil, coSelfetchOff, coScrollableCursorOn, coNoResultsetCloseNeeded, coHoldCursorOverCommtit, coExecuteLocally}
coListText = []string{"", "selfetchOff", "scrollableCursorOn", "noResltsetCloseNeeded", "holdCursorOverCommit", "executLocally"}
)

func (k commandOptions) String() string {
t := make([]string, 0, len(commandOptionsText))
var s []string

for option, text := range commandOptionsText {
for i, option := range coList {
if (k & option) != 0 {
t = append(t, text)
s = append(s, coListText[i])
}
}
return fmt.Sprintf("%v", t)
return fmt.Sprintf("%v", s)
}

// segment header.
Expand Down Expand Up @@ -208,23 +205,20 @@ const (
paResultsetClosed PartAttributes = 0x10
)

var partAttributesText = map[PartAttributes]string{
paLastPacket: "lastPacket",
paNextPacket: "nextPacket",
paFirstPacket: "firstPacket",
paRowNotFound: "rowNotFound",
paResultsetClosed: "resultsetClosed",
}
var (
paList = []PartAttributes{paLastPacket, paNextPacket, paFirstPacket, paRowNotFound, paResultsetClosed}
paListText = []string{"lastPacket", "nextPacket", "firstPacket", "rowNotFound", "resultsetClosed"}
)

func (k PartAttributes) String() string {
t := make([]string, 0, len(partAttributesText))
var s []string

for attr, text := range partAttributesText {
for i, attr := range paList {
if (k & attr) != 0 {
t = append(t, text)
s = append(s, paListText[i])
}
}
return fmt.Sprintf("%v", t)
return fmt.Sprintf("%v", s)
}

// ResultsetClosed returns true if the result set is closed, false otherwise.
Expand Down
27 changes: 15 additions & 12 deletions driver/internal/protocol/lob.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,21 +23,24 @@ const (
loLastdata LobOptions = 0x04
)

var lobOptionsText = map[LobOptions]string{
loNullindicator: "null indicator",
loDataincluded: "data included",
loLastdata: "last data",
}
const (
loNullindicatorText = "null indicator"
loDataincludedText = "data included"
loLastdataText = "last data"
)

func (o LobOptions) String() string {
t := make([]string, 0, len(lobOptionsText))

for option, text := range lobOptionsText {
if (o & option) != 0 {
t = append(t, text)
}
var s []string
if o&loNullindicator != 0 {
s = append(s, loNullindicatorText)
}
if o&loDataincluded != 0 {
s = append(s, loDataincludedText)
}
if o&loLastdata != 0 {
s = append(s, loLastdataText)
}
return fmt.Sprintf("%v", t)
return fmt.Sprintf("%v", s)
}

// IsLastData return true if the last data package was read, false otherwise.
Expand Down
27 changes: 15 additions & 12 deletions driver/internal/protocol/parameter.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,21 +17,24 @@ const (
poDefault parameterOptions = 0x04
)

var parameterOptionsText = map[parameterOptions]string{
poMandatory: "mandatory",
poOptional: "optional",
poDefault: "default",
}
const (
poMandatoryText = "mandatory"
poOptionalText = "optional"
poDefaultText = "default"
)

func (k parameterOptions) String() string {
t := make([]string, 0, len(parameterOptionsText))

for option, text := range parameterOptionsText {
if (k & option) != 0 {
t = append(t, text)
}
var s []string
if k&poMandatory != 0 {
s = append(s, poMandatoryText)
}
return fmt.Sprintf("%v", t)
if k&poOptional != 0 {
s = append(s, poOptionalText)
}
if k&poDefault != 0 {
s = append(s, poDefaultText)
}
return fmt.Sprintf("%v", s)
}

// ParameterMode represents the parameter mode set.
Expand Down
22 changes: 11 additions & 11 deletions driver/internal/protocol/result.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,20 +15,20 @@ const (
coOptional columnOptions = 0x02
)

var columnOptionsText = map[columnOptions]string{
coMandatory: "mandatory",
coOptional: "optional",
}
const (
coMandatoryText = "mandatory"
coOptionalText = "optional"
)

func (k columnOptions) String() string {
t := make([]string, 0, len(columnOptionsText))

for option, text := range columnOptionsText {
if (k & option) != 0 {
t = append(t, text)
}
var s []string
if k&coMandatory != 0 {
s = append(s, coMandatoryText)
}
if k&coOptional != 0 {
s = append(s, coOptionalText)
}
return fmt.Sprintf("%v", t)
return fmt.Sprintf("%v", s)
}

// ResultsetID represents a resultset id.
Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ toolchain go1.22.0

require (
github.com/prometheus/client_golang v1.18.0
golang.org/x/crypto v0.18.0
golang.org/x/crypto v0.19.0
golang.org/x/text v0.14.0
)

Expand All @@ -16,6 +16,6 @@ require (
github.com/prometheus/client_model v0.5.0 // indirect
github.com/prometheus/common v0.46.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
golang.org/x/sys v0.16.0 // indirect
golang.org/x/sys v0.17.0 // indirect
google.golang.org/protobuf v1.32.0 // indirect
)
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ github.com/prometheus/common v0.46.0 h1:doXzt5ybi1HBKpsZOL0sSkaNHJJqkyfEWZGGqqSc
github.com/prometheus/common v0.46.0/go.mod h1:Tp0qkxpb9Jsg54QMe+EAmqXkSV7Evdy1BTn+g2pa/hQ=
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc=
golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo=
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I=
Expand Down

0 comments on commit 77ea18f

Please sign in to comment.