package sqlbuilder import ( "database/sql" "fmt" "git.hexq.cn/tiglog/mydb" ) // Engine represents a SQL database engine. type Engine interface { mydb.Session mydb.SQL } func lookupAdapter(adapterName string) (Adapter, error) { adapter := mydb.LookupAdapter(adapterName) if sqlAdapter, ok := adapter.(Adapter); ok { return sqlAdapter, nil } return nil, fmt.Errorf("%w %q", mydb.ErrMissingAdapter, adapterName) } func BindTx(adapterName string, tx *sql.Tx) (Tx, error) { adapter, err := lookupAdapter(adapterName) if err != nil { return nil, err } return adapter.NewTx(tx) } // Bind creates a binding between an adapter and a *sql.Tx or a *sql.mydb. func BindDB(adapterName string, sess *sql.DB) (mydb.Session, error) { adapter, err := lookupAdapter(adapterName) if err != nil { return nil, err } return adapter.New(sess) }