mirror of https://github.com/dexidp/dex.git
12 changed files with 169 additions and 126 deletions
@ -0,0 +1,60 @@
|
||||
// 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() |
||||
} |
||||
@ -1,33 +0,0 @@
|
||||
package db |
||||
|
||||
import ( |
||||
"github.com/go-gorp/gorp" |
||||
|
||||
"github.com/coreos/dex/db/translate" |
||||
"github.com/coreos/dex/repo" |
||||
) |
||||
|
||||
func executor(dbMap *gorp.DbMap, tx repo.Transaction) gorp.SqlExecutor { |
||||
var exec gorp.SqlExecutor |
||||
if tx == nil { |
||||
exec = 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 = dbMap |
||||
} else { |
||||
exec = gorpTx |
||||
} |
||||
} |
||||
|
||||
if _, ok := dbMap.Dialect.(gorp.SqliteDialect); ok { |
||||
exec = translate.NewExecutor(exec, translate.PostgresToSQLite) |
||||
} |
||||
return exec |
||||
} |
||||
Loading…
Reference in new issue