You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dorm/vendor/github.com/golang-sql/sqlexp/namer.go

60 lines
1.3 KiB

// 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 (
"context"
"database/sql/driver"
"errors"
"reflect"
)
const (
DialectPostgres = "postgres"
DialectTSQL = "tsql"
DialectMySQL = "mysql"
DialectSQLite = "sqlite"
DialectOracle = "oracle"
)
// Namer returns the name of the database and the SQL dialect it
// uses.
type Namer interface {
// Name of the database management system.
//
// Examples:
// "posgresql-9.6"
// "sqlserver-10.54.32"
// "cockroachdb-1.0"
Name() string
// Dialect of SQL used in the database.
Dialect() string
}
// DriverNamer may be implemented on the driver.Driver interface.
// It may need to request information from the server to return
// the correct information.
type DriverNamer interface {
Namer(ctx context.Context) (Namer, error)
}
// NamerFromDriver returns the DriverNamer from the DB if
// it is implemented.
func NamerFromDriver(d driver.Driver, ctx context.Context) (Namer, error) {
if q, is := d.(DriverNamer); is {
return q.Namer(ctx)
}
dv := reflect.ValueOf(d)
d, found := internalDrivers[dv.Type().String()]
if found {
if q, is := d.(DriverNamer); is {
return q.Namer(ctx)
}
}
return nil, errors.New("namer not found")
}