From f74ba0cf5cfcb83ea8dd883cd5a56f074f1c3075 Mon Sep 17 00:00:00 2001 From: Bo-Yi Wu Date: Sun, 8 Apr 2018 21:10:02 +0800 Subject: [PATCH] chore(postgres): support add schema as prefix of table name --- engine.go | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/engine.go b/engine.go index 52ec1e3f..6a77746b 100644 --- a/engine.go +++ b/engine.go @@ -546,21 +546,31 @@ func (engine *Engine) tableName(beanOrTableName interface{}) (string, error) { return "", errors.New("bean should be a struct or struct's point") } +func (engine *Engine) tbSchemaName(v string) string { + if engine.dialect.DBType() == core.POSTGRES && + engine.dialect.URI().Schema != "" && + strings.Index(v, ".") == -1 { + return engine.dialect.URI().Schema + "." + v + } + return v +} + func (engine *Engine) tbName(v reflect.Value) string { if tb, ok := v.Interface().(TableName); ok { - return tb.TableName() + return engine.tbSchemaName(tb.TableName()) + } if v.Type().Kind() == reflect.Ptr { if tb, ok := reflect.Indirect(v).Interface().(TableName); ok { - return tb.TableName() + return engine.tbSchemaName(tb.TableName()) } } else if v.CanAddr() { if tb, ok := v.Addr().Interface().(TableName); ok { - return tb.TableName() + return engine.tbSchemaName(tb.TableName()) } } - return engine.TableMapper.Obj2Table(reflect.Indirect(v).Type().Name()) + return engine.tbSchemaName(engine.TableMapper.Obj2Table(reflect.Indirect(v).Type().Name())) } // Cascade use cascade or not