From 48579958d5d5b4072fe235781966e2e0a1f2207e Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 2 Oct 2019 12:37:53 +0800 Subject: [PATCH] Fix sync2 with custom table name (#1445) * fix sync2 with custom table name * fix bug on postgres * fix bug on postgres --- session_schema.go | 11 ++++++++--- session_schema_test.go | 25 +++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/session_schema.go b/session_schema.go index 738c831a..7ca89f26 100644 --- a/session_schema.go +++ b/session_schema.go @@ -245,12 +245,17 @@ func (session *Session) Sync2(beans ...interface{}) error { if err != nil { return err } - tbName := engine.TableName(bean) - tbNameWithSchema := engine.TableName(tbName, true) + var tbName string + if len(session.statement.AltTableName) > 0 { + tbName = session.statement.AltTableName + } else { + tbName = engine.TableName(bean) + } + tbNameWithSchema := engine.tbNameWithSchema(tbName) var oriTable *core.Table for _, tb := range tables { - if strings.EqualFold(tb.Name, tbName) { + if strings.EqualFold(engine.tbNameWithSchema(tb.Name), engine.tbNameWithSchema(tbName)) { oriTable = tb break } diff --git a/session_schema_test.go b/session_schema_test.go index 5a0fca2e..0badc338 100644 --- a/session_schema_test.go +++ b/session_schema_test.go @@ -119,6 +119,31 @@ func TestSyncTable(t *testing.T) { assert.EqualValues(t, "sync_table1", tables[0].Name) } +func TestSyncTable2(t *testing.T) { + assert.NoError(t, prepareEngine()) + + assert.NoError(t, testEngine.Table("sync_tablex").Sync2(new(SyncTable1))) + + tables, err := testEngine.DBMetas() + assert.NoError(t, err) + assert.EqualValues(t, 1, len(tables)) + assert.EqualValues(t, "sync_tablex", tables[0].Name) + assert.EqualValues(t, 3, len(tables[0].Columns())) + + type SyncTable4 struct { + SyncTable1 `xorm:"extends"` + NewCol string + } + + assert.NoError(t, testEngine.Table("sync_tablex").Sync2(new(SyncTable4))) + tables, err = testEngine.DBMetas() + assert.NoError(t, err) + assert.EqualValues(t, 1, len(tables)) + assert.EqualValues(t, "sync_tablex", tables[0].Name) + assert.EqualValues(t, 4, len(tables[0].Columns())) + assert.EqualValues(t, colMapper.Obj2Table("NewCol"), tables[0].Columns()[3].Name) +} + func TestIsTableExist(t *testing.T) { assert.NoError(t, prepareEngine())