new dialect interface
This commit is contained in:
parent
05943b9679
commit
aafdd49780
2
cache.go
2
cache.go
|
@ -20,7 +20,7 @@ const (
|
||||||
|
|
||||||
// CacheStore is a interface to store cache
|
// CacheStore is a interface to store cache
|
||||||
type CacheStore interface {
|
type CacheStore interface {
|
||||||
// key is primary key or composite primary key or unique key's value
|
// key is primary key or composite primary key
|
||||||
// value is struct's pointer
|
// value is struct's pointer
|
||||||
// key format : <tablename>-p-<pk1>-<pk2>...
|
// key format : <tablename>-p-<pk1>-<pk2>...
|
||||||
Put(key string, value interface{}) error
|
Put(key string, value interface{}) error
|
||||||
|
|
9
db.go
9
db.go
|
@ -8,11 +8,6 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
ErrNoMapPointer = errors.New("mp should be a map's pointer")
|
|
||||||
ErrNoStructPointer = errors.New("mp should be a map's pointer")
|
|
||||||
)
|
|
||||||
|
|
||||||
func MapToSlice(query string, mp interface{}) (string, []interface{}, error) {
|
func MapToSlice(query string, mp interface{}) (string, []interface{}, error) {
|
||||||
vv := reflect.ValueOf(mp)
|
vv := reflect.ValueOf(mp)
|
||||||
if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Map {
|
if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Map {
|
||||||
|
@ -252,7 +247,7 @@ type Rows struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// scan data to a struct's pointer according field index
|
// scan data to a struct's pointer according field index
|
||||||
func (rs *Rows) ScanStruct(dest ...interface{}) error {
|
func (rs *Rows) ScanStructByIndex(dest ...interface{}) error {
|
||||||
if len(dest) == 0 {
|
if len(dest) == 0 {
|
||||||
return errors.New("at least one struct")
|
return errors.New("at least one struct")
|
||||||
}
|
}
|
||||||
|
@ -319,7 +314,7 @@ func fieldByName(v reflect.Value, name string) reflect.Value {
|
||||||
}
|
}
|
||||||
|
|
||||||
// scan data to a struct's pointer according field name
|
// scan data to a struct's pointer according field name
|
||||||
func (rs *Rows) ScanStruct2(dest interface{}) error {
|
func (rs *Rows) ScanStructByName(dest interface{}) error {
|
||||||
vv := reflect.ValueOf(dest)
|
vv := reflect.ValueOf(dest)
|
||||||
if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Struct {
|
if vv.Kind() != reflect.Ptr || vv.Elem().Kind() != reflect.Struct {
|
||||||
return errors.New("dest should be a struct's pointer")
|
return errors.New("dest should be a struct's pointer")
|
||||||
|
|
36
dialect.go
36
dialect.go
|
@ -30,6 +30,9 @@ type Dialect interface {
|
||||||
DBType() DbType
|
DBType() DbType
|
||||||
SqlType(*Column) string
|
SqlType(*Column) string
|
||||||
|
|
||||||
|
DriverName() string
|
||||||
|
DataSourceName() string
|
||||||
|
|
||||||
QuoteStr() string
|
QuoteStr() string
|
||||||
AndStr() string
|
AndStr() string
|
||||||
OrStr() string
|
OrStr() string
|
||||||
|
@ -43,21 +46,28 @@ type Dialect interface {
|
||||||
IndexOnTable() bool
|
IndexOnTable() bool
|
||||||
ShowCreateNull() bool
|
ShowCreateNull() bool
|
||||||
|
|
||||||
DropTableSql(tableName string) string
|
|
||||||
IndexCheckSql(tableName, idxName string) (string, []interface{})
|
IndexCheckSql(tableName, idxName string) (string, []interface{})
|
||||||
TableCheckSql(tableName string) (string, []interface{})
|
TableCheckSql(tableName string) (string, []interface{})
|
||||||
ColumnCheckSql(tableName, colName string, isPK bool) (string, []interface{})
|
//ColumnCheckSql(tableName, colName string) (string, []interface{})
|
||||||
|
|
||||||
|
//IsTableExist(tableName string) (bool, error)
|
||||||
|
//IsIndexExist(tableName string, idx *Index) (bool, error)
|
||||||
|
IsColumnExist(tableName string, col *Column) (bool, error)
|
||||||
|
|
||||||
CreateTableSql(table *Table, tableName, storeEngine, charset string) string
|
CreateTableSql(table *Table, tableName, storeEngine, charset string) string
|
||||||
|
DropTableSql(tableName string) string
|
||||||
CreateIndexSql(tableName string, index *Index) string
|
CreateIndexSql(tableName string, index *Index) string
|
||||||
|
|
||||||
GetColumns(tableName string) ([]string, map[string]*Column, error)
|
GetColumns(tableName string) ([]string, map[string]*Column, error)
|
||||||
GetTables() ([]*Table, error)
|
GetTables() ([]*Table, error)
|
||||||
GetIndexes(tableName string) (map[string]*Index, error)
|
GetIndexes(tableName string) (map[string]*Index, error)
|
||||||
|
|
||||||
Filters() []Filter
|
// Get data from db cell to a struct's field
|
||||||
|
//GetData(col *Column, fieldValue *reflect.Value, cellData interface{}) error
|
||||||
|
// Set field data to db
|
||||||
|
//SetData(col *Column, fieldValue *refelct.Value) (interface{}, error)
|
||||||
|
|
||||||
DriverName() string
|
Filters() []Filter
|
||||||
DataSourceName() string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func OpenDialect(dialect Dialect) (*DB, error) {
|
func OpenDialect(dialect Dialect) (*DB, error) {
|
||||||
|
@ -126,6 +136,22 @@ func (db *Base) DropTableSql(tableName string) string {
|
||||||
return fmt.Sprintf("DROP TABLE IF EXISTS `%s`", tableName)
|
return fmt.Sprintf("DROP TABLE IF EXISTS `%s`", tableName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (db *Base) IsColumnExist(tableName string, col *Column) (bool, error) {
|
||||||
|
args := []interface{}{db.DbName, tableName, col.Name}
|
||||||
|
query := "SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = ? AND `TABLE_NAME` = ? AND `COLUMN_NAME` = ?"
|
||||||
|
|
||||||
|
rows, err := db.DB().Query(query, args...)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
|
||||||
|
if rows.Next() {
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
return false, ErrNotExist
|
||||||
|
}
|
||||||
|
|
||||||
func (db *Base) CreateIndexSql(tableName string, index *Index) string {
|
func (db *Base) CreateIndexSql(tableName string, index *Index) string {
|
||||||
quote := db.Quote
|
quote := db.Quote
|
||||||
var unique string
|
var unique string
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
package core
|
||||||
|
|
||||||
|
import "errors"
|
||||||
|
|
||||||
|
var (
|
||||||
|
ErrNoMapPointer = errors.New("mp should be a map's pointer")
|
||||||
|
ErrNoStructPointer = errors.New("mp should be a map's pointer")
|
||||||
|
ErrNotExist = errors.New("Not exist")
|
||||||
|
ErrIgnore = errors.New("Ignore")
|
||||||
|
)
|
Loading…
Reference in New Issue