in go/adbc/driver/flightsql/flightsql_adbc.go [732:828]
func (c *cnxn) SetOption(key, value string) error {
if strings.HasPrefix(key, OptionRPCCallHeaderPrefix) {
name := strings.TrimPrefix(key, OptionRPCCallHeaderPrefix)
if value == "" {
c.hdrs.Delete(name)
} else {
c.hdrs.Append(name, value)
}
return nil
}
switch key {
case OptionTimeoutFetch:
timeout, err := getTimeoutOptionValue(value)
if err != nil {
return adbc.Error{
Msg: fmt.Sprintf("invalid timeout option value %s = %s : %s",
OptionTimeoutFetch, value, err.Error()),
Code: adbc.StatusInvalidArgument,
}
}
c.timeouts.fetchTimeout = timeout
case OptionTimeoutQuery:
timeout, err := getTimeoutOptionValue(value)
if err != nil {
return adbc.Error{
Msg: fmt.Sprintf("invalid timeout option value %s = %s : %s",
OptionTimeoutFetch, value, err.Error()),
Code: adbc.StatusInvalidArgument,
}
}
c.timeouts.queryTimeout = timeout
case OptionTimeoutUpdate:
timeout, err := getTimeoutOptionValue(value)
if err != nil {
return adbc.Error{
Msg: fmt.Sprintf("invalid timeout option value %s = %s : %s",
OptionTimeoutFetch, value, err.Error()),
Code: adbc.StatusInvalidArgument,
}
}
c.timeouts.updateTimeout = timeout
case adbc.OptionKeyAutoCommit:
autocommit := true
switch value {
case adbc.OptionValueEnabled:
case adbc.OptionValueDisabled:
autocommit = false
default:
return adbc.Error{
Msg: "[Flight SQL] invalid value for option " + key + ": " + value,
Code: adbc.StatusInvalidArgument,
}
}
if autocommit && c.txn == nil {
// no-op don't even error if the server didn't support transactions
return nil
}
if !c.supportInfo.transactions {
return errNoTransactionSupport
}
ctx := metadata.NewOutgoingContext(context.Background(), c.hdrs)
var err error
if c.txn != nil {
if err = c.txn.Commit(ctx, c.timeouts); err != nil {
return adbc.Error{
Msg: "[Flight SQL] failed to update autocommit: " + err.Error(),
Code: adbc.StatusIO,
}
}
}
if autocommit {
c.txn = nil
return nil
}
if c.txn, err = c.cl.BeginTransaction(ctx, c.timeouts); err != nil {
return adbc.Error{
Msg: "[Flight SQL] failed to update autocommit: " + err.Error(),
Code: adbc.StatusIO,
}
}
return nil
default:
return adbc.Error{
Msg: "[Flight SQL] unknown connection option",
Code: adbc.StatusNotImplemented,
}
}
return nil
}