diff --git a/engine_table.go b/engine_table.go index 21365dde..001d72e7 100644 --- a/engine_table.go +++ b/engine_table.go @@ -26,11 +26,12 @@ func (engine *Engine) tbNameWithSchema(v string) string { } func isSubQuery(tbName string) bool { - if len(tbName) <= 6 { + const selStr = "select" + if len(tbName) <= len(selStr)+1 { return false } - return strings.EqualFold(tbName[:5], "select") || strings.EqualFold(tbName[:6], "(select") + return strings.EqualFold(tbName[:len(selStr)], selStr) || strings.EqualFold(tbName[:len(selStr)+1], "("+selStr) } // TableName returns table name with schema prefix if has diff --git a/session_query_test.go b/session_query_test.go index c77695f6..7e72357f 100644 --- a/session_query_test.go +++ b/session_query_test.go @@ -371,15 +371,16 @@ func TestJoinWithSubQuery(t *testing.T) { assert.NoError(t, err) assert.EqualValues(t, 1, cnt) + tbName := testEngine.Quote(testEngine.TableName("join_with_sub_query_depart", true)) var querys []JoinWithSubQuery1 - err = testEngine.Join("INNER", builder.Select("id").From(testEngine.Quote(testEngine.TableName("join_with_sub_query_depart", true))), + err = testEngine.Join("INNER", builder.Select("id").From(tbName), "join_with_sub_query_depart.id = join_with_sub_query1.depart_id").Find(&querys) assert.NoError(t, err) assert.EqualValues(t, 1, len(querys)) assert.EqualValues(t, q, querys[0]) querys = make([]JoinWithSubQuery1, 0, 1) - err = testEngine.Join("INNER", "(SELECT id FROM `join_with_sub_query_depart`) join_with_sub_query_depart", "join_with_sub_query_depart.id = join_with_sub_query1.depart_id"). + err = testEngine.Join("INNER", "(SELECT id FROM "+tbName+") join_with_sub_query_depart", "join_with_sub_query_depart.id = join_with_sub_query1.depart_id"). Find(&querys) assert.NoError(t, err) assert.EqualValues(t, 1, len(querys))