mirror of https://github.com/dexidp/dex.git
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.
60 lines
1.7 KiB
60 lines
1.7 KiB
// Package db provides SQL implementations of dex's storage interfaces. |
|
package db |
|
|
|
import ( |
|
"github.com/go-gorp/gorp" |
|
|
|
"github.com/coreos/dex/db/translate" |
|
"github.com/coreos/dex/repo" |
|
) |
|
|
|
// db is the connection type passed to repos. |
|
// |
|
// TODO(ericchiang): Eventually just return this instead of gorp.DbMap during Conn. |
|
// All actions should go through this type instead of dbMap. |
|
type db struct { |
|
dbMap *gorp.DbMap |
|
} |
|
|
|
// executor returns a driver agnostic SQL executor. |
|
// |
|
// The expected flavor of all queries is the flavor used by github.com/lib/pq. All bind |
|
// parameters must be unique and in sequential order (e.g. $1, $2, ...). |
|
// |
|
// See github.com/coreos/dex/db/translate for details on the translation. |
|
// |
|
// If tx is nil, a non-transaction context is provided. |
|
func (conn *db) executor(tx repo.Transaction) gorp.SqlExecutor { |
|
var exec gorp.SqlExecutor |
|
if tx == nil { |
|
exec = conn.dbMap |
|
} else { |
|
gorpTx, ok := tx.(*gorp.Transaction) |
|
if !ok { |
|
panic("wrong kind of transaction passed to a DB repo") |
|
} |
|
|
|
// Check if the underlying value of the pointer is nil. |
|
// This is not caught by the initial comparison (tx == nil). |
|
if gorpTx == nil { |
|
exec = conn.dbMap |
|
} else { |
|
exec = gorpTx |
|
} |
|
} |
|
|
|
if _, ok := conn.dbMap.Dialect.(gorp.SqliteDialect); ok { |
|
exec = translate.NewTranslatingExecutor(exec, translate.PostgresToSQLite) |
|
} |
|
return exec |
|
} |
|
|
|
// quote escapes a table name for a driver specific SQL query. quote uses the |
|
// gorp's package underlying quote logic and should NOT be used on untrusted input. |
|
func (conn *db) quote(tableName string) string { |
|
return conn.dbMap.Dialect.QuotedTableForQuery("", tableName) |
|
} |
|
|
|
func (conn *db) begin() (repo.Transaction, error) { |
|
return conn.dbMap.Begin() |
|
}
|
|
|