From 808ff05591ad0fc0159714975f37bfaee2bf60bf Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Fri, 21 Feb 2020 11:28:26 +0800 Subject: [PATCH] Fix join table name quote bug --- session_find_test.go | 10 +++++++++- statement.go | 5 +++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/session_find_test.go b/session_find_test.go index 991fadf2..71116472 100644 --- a/session_find_test.go +++ b/session_find_test.go @@ -790,8 +790,12 @@ func TestFindJoin(t *testing.T) { DeviceId int64 } + type Order struct { + Id int64 + } + assert.NoError(t, prepareEngine()) - assertSync(t, new(SceneItem), new(DeviceUserPrivrels)) + assertSync(t, new(SceneItem), new(DeviceUserPrivrels), new(Order)) var scenes []SceneItem err := testEngine.Join("LEFT OUTER", "device_user_privrels", "device_user_privrels.device_id=scene_item.device_id"). @@ -802,6 +806,10 @@ func TestFindJoin(t *testing.T) { err = testEngine.Join("LEFT OUTER", new(DeviceUserPrivrels), "device_user_privrels.device_id=scene_item.device_id"). Where("scene_item.type=?", 3).Or("device_user_privrels.user_id=?", 339).Find(&scenes) assert.NoError(t, err) + + scenes = make([]SceneItem, 0) + err = testEngine.Join("INNER", "order", "`scene_item`.device_id=`order`.id").Find(&scenes) + assert.NoError(t, err) } func TestJoinFindLimit(t *testing.T) { diff --git a/statement.go b/statement.go index 87cab7cc..671a699e 100644 --- a/statement.go +++ b/statement.go @@ -765,6 +765,11 @@ func (statement *Statement) Join(joinOP string, tablename interface{}, condition statement.joinArgs = append(statement.joinArgs, subQueryArgs...) default: tbName := statement.Engine.TableName(tablename, true) + if !isSubQuery(tbName) { + var buf strings.Builder + statement.Engine.QuoteTo(&buf, tbName) + tbName = buf.String() + } fmt.Fprintf(&buf, "%s ON %v", tbName, condition) }