// Package sqladapter provides common logic for SQL adapters. package sqladapter import ( "database/sql" "database/sql/driver" "git.hexq.cn/tiglog/mydb" "git.hexq.cn/tiglog/mydb/internal/sqlbuilder" ) // IsKeyValue reports whether v is a valid value for a primary key that can be // used with Find(pKey). func IsKeyValue(v interface{}) bool { if v == nil { return true } switch v.(type) { case int64, int, uint, uint64, []int64, []int, []uint, []uint64, []byte, []string, []interface{}, driver.Valuer: return true } return false } type sqlAdapterWrapper struct { adapter AdapterSession } func (w *sqlAdapterWrapper) OpenDSN(dsn mydb.ConnectionURL) (mydb.Session, error) { sess := NewSession(dsn, w.adapter) if err := sess.Open(); err != nil { return nil, err } return sess, nil } func (w *sqlAdapterWrapper) NewTx(sqlTx *sql.Tx) (sqlbuilder.Tx, error) { tx, err := NewTx(w.adapter, sqlTx) if err != nil { return nil, err } return tx, nil } func (w *sqlAdapterWrapper) New(sqlDB *sql.DB) (mydb.Session, error) { sess := NewSession(nil, w.adapter) if err := sess.BindDB(sqlDB); err != nil { return nil, err } return sess, nil } // RegisterAdapter registers a new SQL adapter. func RegisterAdapter(name string, adapter AdapterSession) sqlbuilder.Adapter { z := &sqlAdapterWrapper{adapter} mydb.RegisterAdapter(name, sqlbuilder.NewCompatAdapter(z)) return z }