Implement GetTable method
This commit is contained in:
parent
b0c6124926
commit
2d8faf10b4
@ -4,7 +4,6 @@ import (
|
||||
"bytes"
|
||||
|
||||
"github.com/jinzhu/gorm"
|
||||
"github.com/jinzhu/gorm/builder"
|
||||
"github.com/jinzhu/gorm/dialects/common/utils"
|
||||
|
||||
// import sqlite3 driver
|
||||
@ -16,13 +15,12 @@ type Dialect struct {
|
||||
}
|
||||
|
||||
// Insert insert
|
||||
func (*Dialect) Insert(stmt *builder.Statement) error {
|
||||
func (*Dialect) Insert(tx *gorm.DB) error {
|
||||
var (
|
||||
args []interface{}
|
||||
defaultValueColumns []string
|
||||
errs = gorm.Errors{}
|
||||
assignmentsChan = utils.GetCreatingAssignments(stmt, &errs)
|
||||
tableNameChan = utils.GetTable(stmt, &errs)
|
||||
assignmentsChan = utils.GetCreatingAssignments(tx)
|
||||
tableNameChan = utils.GetTable(tx)
|
||||
)
|
||||
|
||||
s := bytes.NewBufferString("INSERT INTO ")
|
||||
@ -40,16 +38,16 @@ func (*Dialect) Insert(stmt *builder.Statement) error {
|
||||
}
|
||||
|
||||
// Query query
|
||||
func (*Dialect) Query(*builder.Statement) error {
|
||||
func (*Dialect) Query(tx *gorm.DB) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Update update
|
||||
func (*Dialect) Update(*builder.Statement) error {
|
||||
func (*Dialect) Update(tx *gorm.DB) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Delete delete
|
||||
func (*Dialect) Delete(*builder.Statement) error {
|
||||
func (*Dialect) Delete(tx *gorm.DB) error {
|
||||
return nil
|
||||
}
|
||||
|
8
model/errors.go
Normal file
8
model/errors.go
Normal file
@ -0,0 +1,8 @@
|
||||
package model
|
||||
|
||||
import "errors"
|
||||
|
||||
var (
|
||||
// ErrInvalidTable invalid table name
|
||||
ErrInvalidTable = errors.New("invalid table name")
|
||||
)
|
@ -2,56 +2,70 @@ package model
|
||||
|
||||
import (
|
||||
"github.com/jinzhu/gorm"
|
||||
"github.com/jinzhu/gorm/builder"
|
||||
"github.com/jinzhu/gorm/schema"
|
||||
"github.com/jinzhu/inflection"
|
||||
)
|
||||
|
||||
// DefaultTableNameHandler default table name handler
|
||||
var DefaultTableNameHandler = func(stmt *builder.Statement, tableName string) string {
|
||||
return tableName
|
||||
}
|
||||
// DefaultTableNameHandler = func(tx *gorm.DB, tableName string) string {
|
||||
// return tableName
|
||||
// }
|
||||
var DefaultTableNameHandler func(tx *gorm.DB, tableName string) string
|
||||
|
||||
// GetCreatingAssignments get creating assignments
|
||||
func GetCreatingAssignments(stmt *builder.Statement, errs *gorm.Errors) chan []schema.Field {
|
||||
func GetCreatingAssignments(tx *gorm.DB) chan []schema.Field {
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetTable get table name
|
||||
func GetTable(stmt *builder.Statement, errs *gorm.Errors) chan string {
|
||||
// GetTable get table name for current db operation
|
||||
func GetTable(tx *gorm.DB) chan string {
|
||||
tableChan := make(chan string)
|
||||
|
||||
go func() {
|
||||
if stmt.Table != nil {
|
||||
if table, ok := stmt.Table.(string); ok {
|
||||
tableChan <- DefaultTableNameHandler(stmt, table)
|
||||
} else if tableSchema := schema.Parse(stmt.Table); tableSchema != nil {
|
||||
if tableSchema.TableName != "" {
|
||||
tableChan <- DefaultTableNameHandler(stmt, tableSchema.TableName)
|
||||
var tableName string
|
||||
if name, ok := tx.Statement.Table.(string); ok {
|
||||
tableName = name
|
||||
} else {
|
||||
for _, v := range []interface{}{tx.Statement.Table, tx.Statement.Dest} {
|
||||
if t, ok := v.(tabler); ok {
|
||||
tableName = t.TableName()
|
||||
} else if t, ok := v.(dbTabler); ok {
|
||||
tableName = t.TableName(tx)
|
||||
} else if s := schema.Parse(tx.Statement.Table); s != nil {
|
||||
if s.TableName != "" {
|
||||
tableName = s.TableName
|
||||
} else {
|
||||
tableName = schema.ToDBName(s.ModelType.Name())
|
||||
if !tx.Config.SingularTable {
|
||||
tableName = inflection.Plural(tableName)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if tableName != "" {
|
||||
break
|
||||
}
|
||||
tableSchema.ModelType.Name
|
||||
}
|
||||
}
|
||||
|
||||
if tableName != "" {
|
||||
if DefaultTableNameHandler != nil {
|
||||
tableChan <- DefaultTableNameHandler(tx, tableName)
|
||||
} else {
|
||||
tableChan <- tableName
|
||||
}
|
||||
} else {
|
||||
tx.AddError(ErrInvalidTable)
|
||||
}
|
||||
}()
|
||||
|
||||
return tableChan
|
||||
}
|
||||
|
||||
// if scope.Value == nil {
|
||||
// return &modelStruct
|
||||
// }
|
||||
// TableName get model's table name
|
||||
// func (schema *Schema) TableName(stmt *builder.Statement) string {
|
||||
// if s.defaultTableName == "" && db != nil && s.ModelType != nil {
|
||||
// // Set default table name
|
||||
// if tabler, ok := reflect.New(s.ModelType).Interface().(tabler); ok {
|
||||
// s.defaultTableName = tabler.TableName()
|
||||
// } else {
|
||||
// tableName := ToDBName(s.ModelType.Name())
|
||||
// if db == nil || !db.parent.singularTable {
|
||||
// tableName = inflection.Plural(tableName)
|
||||
// }
|
||||
// s.defaultTableName = tableName
|
||||
// }
|
||||
// }
|
||||
// return DefaultTableNameHandler(db, s.defaultTableName)
|
||||
// }
|
||||
type tabler interface {
|
||||
TableName() string
|
||||
}
|
||||
|
||||
type dbTabler interface {
|
||||
TableName(*gorm.DB) string
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user