From 4ebe4233fcf21252ec0c20ade1e45dcd15fddd26 Mon Sep 17 00:00:00 2001 From: John Guo Date: Wed, 12 Oct 2022 20:30:47 +0800 Subject: [PATCH] fix issue of OmitEmptyWhere in Builder for package gdb (#2195) --- contrib/drivers/mysql/mysql_model_test.go | 23 +++++++++++++++++++++++ database/gdb/gdb_model_builder.go | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/contrib/drivers/mysql/mysql_model_test.go b/contrib/drivers/mysql/mysql_model_test.go index 170d960bf..d31634ba3 100644 --- a/contrib/drivers/mysql/mysql_model_test.go +++ b/contrib/drivers/mysql/mysql_model_test.go @@ -4665,3 +4665,26 @@ func TestResult_Structs1(t *testing.T) { t.Assert(array[1].Name, "smith") }) } + +func Test_Builder_OmitEmptyWhere(t *testing.T) { + table := createInitTable() + defer dropTable(table) + gtest.C(t, func(t *gtest.T) { + count, err := db.Model(table).Where("id", 1).Count() + t.AssertNil(err) + t.Assert(count, 1) + }) + gtest.C(t, func(t *gtest.T) { + count, err := db.Model(table).Where("id", 0).OmitEmptyWhere().Count() + t.AssertNil(err) + t.Assert(count, TableSize) + }) + gtest.C(t, func(t *gtest.T) { + builder := db.Model(table).OmitEmptyWhere().Builder() + count, err := db.Model(table).Where( + builder.Where("id", 0), + ).Count() + t.AssertNil(err) + t.Assert(count, TableSize) + }) +} diff --git a/database/gdb/gdb_model_builder.go b/database/gdb/gdb_model_builder.go index f9e299826..981dffb27 100644 --- a/database/gdb/gdb_model_builder.go +++ b/database/gdb/gdb_model_builder.go @@ -116,7 +116,7 @@ func (b *WhereBuilder) convertWhereBuilder(where interface{}, args []interface{} } if builder != nil { conditionWhere, conditionArgs := builder.Build() - if len(b.whereHolder) == 0 { + if conditionWhere != "" && len(b.whereHolder) == 0 { conditionWhere = "(" + conditionWhere + ")" } return conditionWhere, conditionArgs