Add prefix support
This commit is contained in:
parent
b507cdf93d
commit
f57d7f2d9b
6
main.go
6
main.go
@ -414,6 +414,12 @@ func (s *DB) Table(name string) *DB {
|
||||
return clone
|
||||
}
|
||||
|
||||
func (s *DB) Prefix(name string) *DB {
|
||||
clone := s.clone()
|
||||
clone.search.Prefix(name)
|
||||
return clone
|
||||
}
|
||||
|
||||
// Debug start debug mode
|
||||
func (s *DB) Debug() *DB {
|
||||
return s.clone().LogMode(true)
|
||||
|
12
main_test.go
12
main_test.go
@ -247,7 +247,19 @@ func TestTableName(t *testing.T) {
|
||||
if DB.NewScope([]Cart{}).TableName() != "shopping_cart" {
|
||||
t.Errorf("[]Cart's singular table name should be shopping_cart")
|
||||
}
|
||||
|
||||
// Test prefix
|
||||
if DB.Prefix("my_prefix_").NewScope(Order{}).TableName() != "my_prefix_order" {
|
||||
t.Errorf("Order's table name should be my_prefix_order")
|
||||
}
|
||||
|
||||
DB.SingularTable(false)
|
||||
|
||||
// Test prefix
|
||||
if DB.Prefix("my_prefix_").NewScope(Order{}).TableName() != "my_prefix_orders" {
|
||||
t.Errorf("Order's table name should be my_prefix_orders")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestNullValues(t *testing.T) {
|
||||
|
18
scope.go
18
scope.go
@ -301,17 +301,29 @@ type dbTabler interface {
|
||||
// TableName return table name
|
||||
func (scope *Scope) TableName() string {
|
||||
if scope.Search != nil && len(scope.Search.tableName) > 0 {
|
||||
return scope.Search.tableName
|
||||
return scope.Search.prefix + scope.Search.tableName
|
||||
}
|
||||
|
||||
if tabler, ok := scope.Value.(tabler); ok {
|
||||
if scope.Search != nil {
|
||||
return scope.Search.prefix + tabler.TableName()
|
||||
}
|
||||
|
||||
return tabler.TableName()
|
||||
}
|
||||
|
||||
if tabler, ok := scope.Value.(dbTabler); ok {
|
||||
if scope.Search != nil {
|
||||
return scope.Search.prefix + tabler.TableName(scope.db)
|
||||
}
|
||||
|
||||
return tabler.TableName(scope.db)
|
||||
}
|
||||
|
||||
if scope.Search != nil {
|
||||
return scope.Search.prefix + scope.GetModelStruct().TableName(scope.db.Model(scope.Value))
|
||||
}
|
||||
|
||||
return scope.GetModelStruct().TableName(scope.db.Model(scope.Value))
|
||||
}
|
||||
|
||||
@ -319,9 +331,9 @@ func (scope *Scope) TableName() string {
|
||||
func (scope *Scope) QuotedTableName() (name string) {
|
||||
if scope.Search != nil && len(scope.Search.tableName) > 0 {
|
||||
if strings.Index(scope.Search.tableName, " ") != -1 {
|
||||
return scope.Search.tableName
|
||||
return scope.Search.prefix + scope.Search.tableName
|
||||
}
|
||||
return scope.Quote(scope.Search.tableName)
|
||||
return scope.Quote(scope.Search.prefix + scope.Search.tableName)
|
||||
}
|
||||
|
||||
return scope.Quote(scope.TableName())
|
||||
|
@ -19,6 +19,7 @@ type search struct {
|
||||
limit interface{}
|
||||
group string
|
||||
tableName string
|
||||
prefix string
|
||||
raw bool
|
||||
Unscoped bool
|
||||
countingQuery bool
|
||||
@ -132,6 +133,11 @@ func (s *search) Table(name string) *search {
|
||||
return s
|
||||
}
|
||||
|
||||
func (s *search) Prefix(name string) *search {
|
||||
s.prefix = name
|
||||
return s
|
||||
}
|
||||
|
||||
func (s *search) getInterfaceAsSQL(value interface{}) (str string) {
|
||||
switch value.(type) {
|
||||
case string, int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64:
|
||||
|
Loading…
x
Reference in New Issue
Block a user