mirror of
https://github.com/documize/community.git
synced 2025-07-20 21:59:42 +02:00
37 lines
806 B
Go
37 lines
806 B
Go
// Copyright 2017 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package sqlexp
|
|
|
|
import (
|
|
"database/sql/driver"
|
|
"errors"
|
|
"reflect"
|
|
)
|
|
|
|
type Savepointer interface {
|
|
Release(name string) string
|
|
Create(name string) string
|
|
Rollback(name string) string
|
|
}
|
|
|
|
type DriverSavepointer interface {
|
|
Savepointer() (Savepointer, error)
|
|
}
|
|
|
|
// SavepointFromDriver
|
|
func SavepointFromDriver(d driver.Driver) (Savepointer, error) {
|
|
if q, is := d.(DriverSavepointer); is {
|
|
return q.Savepointer()
|
|
}
|
|
dv := reflect.ValueOf(d)
|
|
|
|
d, found := internalDrivers[dv.Type().String()]
|
|
if found {
|
|
if q, is := d.(DriverSavepointer); is {
|
|
return q.Savepointer()
|
|
}
|
|
}
|
|
return nil, errors.New("savepointer interface not found")
|
|
}
|