From aa8eabd853b30d4d83dc3524bca0c492c7b26bcf Mon Sep 17 00:00:00 2001 From: John Guo Date: Tue, 30 May 2023 11:59:00 +0800 Subject: [PATCH] fix issue #2439 (#2673) --- contrib/drivers/mysql/mysql_issue_test.go | 34 ++++++++++++++++++++ contrib/drivers/mysql/testdata/issue2439.sql | 19 +++++++++++ database/gdb/gdb_model_join.go | 6 ++-- 3 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 contrib/drivers/mysql/testdata/issue2439.sql diff --git a/contrib/drivers/mysql/mysql_issue_test.go b/contrib/drivers/mysql/mysql_issue_test.go index a75f9fb6b..08b1779ad 100644 --- a/contrib/drivers/mysql/mysql_issue_test.go +++ b/contrib/drivers/mysql/mysql_issue_test.go @@ -726,3 +726,37 @@ func Test_Issue2561(t *testing.T) { t.Assert(one[`create_time`], ``) }) } + +// https://github.com/gogf/gf/issues/2439 +func Test_Issue2439(t *testing.T) { + gtest.C(t, func(t *gtest.T) { + array := gstr.SplitAndTrim(gtest.DataContent(`issue2439.sql`), ";") + for _, v := range array { + if _, err := db.Exec(ctx, v); err != nil { + gtest.Error(err) + } + } + defer dropTable("a") + defer dropTable("b") + defer dropTable("c") + + orm := db.Model("a") + orm = orm.InnerJoin( + "c", "a.id=c.id", + ) + orm = orm.InnerJoinOnField("b", "id") + whereFormat := fmt.Sprintf( + "(`%s`.`%s` LIKE ?) ", + "b", "name", + ) + orm = orm.WhereOrf( + whereFormat, + "%a%", + ) + r, err := orm.All() + t.AssertNil(err) + t.Assert(len(r), 1) + t.Assert(r[0]["id"], 2) + t.Assert(r[0]["name"], "a") + }) +} diff --git a/contrib/drivers/mysql/testdata/issue2439.sql b/contrib/drivers/mysql/testdata/issue2439.sql new file mode 100644 index 000000000..0949263cd --- /dev/null +++ b/contrib/drivers/mysql/testdata/issue2439.sql @@ -0,0 +1,19 @@ +CREATE TABLE `a` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (id) USING BTREE +) ENGINE = InnoDB; +INSERT INTO `a` (`id`) VALUES ('2'); + +CREATE TABLE `b` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL , + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB; +INSERT INTO `b` (`id`, `name`) VALUES ('2', 'a'); +INSERT INTO `b` (`id`, `name`) VALUES ('3', 'b'); + +CREATE TABLE `c` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB; +INSERT INTO `c` (`id`) VALUES ('2'); \ No newline at end of file diff --git a/database/gdb/gdb_model_join.go b/database/gdb/gdb_model_join.go index 237397b5f..34adba08e 100644 --- a/database/gdb/gdb_model_join.go +++ b/database/gdb/gdb_model_join.go @@ -67,7 +67,7 @@ func (m *Model) InnerJoin(table ...string) *Model { func (m *Model) LeftJoinOnField(table, field string) *Model { return m.doJoin("LEFT", table, fmt.Sprintf( `%s.%s=%s.%s`, - m.tables, + m.tablesInit, m.db.GetCore().QuoteWord(field), m.db.GetCore().QuoteWord(table), m.db.GetCore().QuoteWord(field), @@ -82,7 +82,7 @@ func (m *Model) LeftJoinOnField(table, field string) *Model { func (m *Model) RightJoinOnField(table, field string) *Model { return m.doJoin("RIGHT", table, fmt.Sprintf( `%s.%s=%s.%s`, - m.tables, + m.tablesInit, m.db.GetCore().QuoteWord(field), m.db.GetCore().QuoteWord(table), m.db.GetCore().QuoteWord(field), @@ -97,7 +97,7 @@ func (m *Model) RightJoinOnField(table, field string) *Model { func (m *Model) InnerJoinOnField(table, field string) *Model { return m.doJoin("INNER", table, fmt.Sprintf( `%s.%s=%s.%s`, - m.tables, + m.tablesInit, m.db.GetCore().QuoteWord(field), m.db.GetCore().QuoteWord(table), m.db.GetCore().QuoteWord(field),