From 266f592739b15e4c83ea05e7c7910b62b37ac6f6 Mon Sep 17 00:00:00 2001 From: John Guo Date: Mon, 21 Jun 2021 19:21:38 +0800 Subject: [PATCH] improve raw sql count statement for package gdb --- database/gdb/gdb_model_select.go | 5 +++++ database/gdb/gdb_z_mysql_model_test.go | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/database/gdb/gdb_model_select.go b/database/gdb/gdb_model_select.go index 2a9c02926..e71bd2321 100644 --- a/database/gdb/gdb_model_select.go +++ b/database/gdb/gdb_model_select.go @@ -515,6 +515,11 @@ func (m *Model) getFormattedSqlAndArgs(queryType int, limit1 bool) (sqlWithHolde // DISTINCT t.user_id uid countFields = fmt.Sprintf(`COUNT(%s%s)`, m.distinct, m.fields) } + // Raw SQL Model. + if m.rawSql != "" { + sqlWithHolder = fmt.Sprintf("SELECT %s FROM (%s) AS T", countFields, m.rawSql) + return sqlWithHolder, nil + } conditionWhere, conditionExtra, conditionArgs := m.formatCondition(false, true) sqlWithHolder = fmt.Sprintf("SELECT %s FROM %s%s", countFields, m.tables, conditionWhere+conditionExtra) if len(m.groupBy) > 0 { diff --git a/database/gdb/gdb_z_mysql_model_test.go b/database/gdb/gdb_z_mysql_model_test.go index 3dc675272..90e89a00a 100644 --- a/database/gdb/gdb_z_mysql_model_test.go +++ b/database/gdb/gdb_z_mysql_model_test.go @@ -3714,4 +3714,16 @@ func Test_Model_Raw(t *testing.T) { t.Assert(all[0]["id"], 7) t.Assert(all[1]["id"], 5) }) + + gtest.C(t, func(t *gtest.T) { + count, err := db. + Raw(fmt.Sprintf("select * from %s where id in (?)", table), g.Slice{1, 5, 7, 8, 9, 10}). + WhereLT("id", 8). + WhereIn("id", g.Slice{1, 2, 3, 4, 5, 6, 7}). + OrderDesc("id"). + Limit(2). + Count() + t.AssertNil(err) + t.Assert(count, 6) + }) }