From 14568562e3cee4846431dc9c002ca0bfca99fc41 Mon Sep 17 00:00:00 2001 From: John Guo Date: Mon, 5 Feb 2024 10:29:43 +0800 Subject: [PATCH] fix issue #2552 (#3300) --- .../drivers/mysql/mysql_z_unit_issue_test.go | 92 +++++++++++++++++++ database/gdb/gdb_core_utility.go | 2 +- database/gdb/gdb_driver_wrapper_db.go | 1 + 3 files changed, 94 insertions(+), 1 deletion(-) diff --git a/contrib/drivers/mysql/mysql_z_unit_issue_test.go b/contrib/drivers/mysql/mysql_z_unit_issue_test.go index 1f2e0d5f4ee..ff4dd70d5bd 100644 --- a/contrib/drivers/mysql/mysql_z_unit_issue_test.go +++ b/contrib/drivers/mysql/mysql_z_unit_issue_test.go @@ -999,3 +999,95 @@ func Test_Issue3218(t *testing.T) { }) }) } + +// https://github.com/gogf/gf/issues/2552 +func Test_Issue2552_ClearTableFieldsAll(t *testing.T) { + table := createTable() + defer dropTable(table) + + showTableKey := `SHOW FULL COLUMNS FROM` + gtest.C(t, func(t *gtest.T) { + ctx := context.Background() + sqlArray, err := gdb.CatchSQL(ctx, func(ctx context.Context) error { + _, err := db.Model(table).Ctx(ctx).Insert(g.Map{ + "passport": guid.S(), + "password": guid.S(), + "nickname": guid.S(), + "create_time": gtime.NewFromStr(CreateTime).String(), + }) + return err + }) + t.AssertNil(err) + t.Assert(gstr.Contains(gstr.Join(sqlArray, "|"), showTableKey), true) + + ctx = context.Background() + sqlArray, err = gdb.CatchSQL(ctx, func(ctx context.Context) error { + one, err := db.Model(table).Ctx(ctx).One() + t.Assert(len(one), 5) + return err + }) + t.AssertNil(err) + t.Assert(gstr.Contains(gstr.Join(sqlArray, "|"), showTableKey), false) + + _, err = db.Exec(ctx, fmt.Sprintf("alter table %s drop column `nickname`", table)) + t.AssertNil(err) + + err = db.GetCore().ClearTableFieldsAll(ctx) + t.AssertNil(err) + + ctx = context.Background() + sqlArray, err = gdb.CatchSQL(ctx, func(ctx context.Context) error { + one, err := db.Model(table).Ctx(ctx).One() + t.Assert(len(one), 4) + return err + }) + t.AssertNil(err) + t.Assert(gstr.Contains(gstr.Join(sqlArray, "|"), showTableKey), true) + }) +} + +// https://github.com/gogf/gf/issues/2552 +func Test_Issue2552_ClearTableFields(t *testing.T) { + table := createTable() + defer dropTable(table) + + showTableKey := `SHOW FULL COLUMNS FROM` + gtest.C(t, func(t *gtest.T) { + ctx := context.Background() + sqlArray, err := gdb.CatchSQL(ctx, func(ctx context.Context) error { + _, err := db.Model(table).Ctx(ctx).Insert(g.Map{ + "passport": guid.S(), + "password": guid.S(), + "nickname": guid.S(), + "create_time": gtime.NewFromStr(CreateTime).String(), + }) + return err + }) + t.AssertNil(err) + t.Assert(gstr.Contains(gstr.Join(sqlArray, "|"), showTableKey), true) + + ctx = context.Background() + sqlArray, err = gdb.CatchSQL(ctx, func(ctx context.Context) error { + one, err := db.Model(table).Ctx(ctx).One() + t.Assert(len(one), 5) + return err + }) + t.AssertNil(err) + t.Assert(gstr.Contains(gstr.Join(sqlArray, "|"), showTableKey), false) + + _, err = db.Exec(ctx, fmt.Sprintf("alter table %s drop column `nickname`", table)) + t.AssertNil(err) + + err = db.GetCore().ClearTableFields(ctx, table) + t.AssertNil(err) + + ctx = context.Background() + sqlArray, err = gdb.CatchSQL(ctx, func(ctx context.Context) error { + one, err := db.Model(table).Ctx(ctx).One() + t.Assert(len(one), 4) + return err + }) + t.AssertNil(err) + t.Assert(gstr.Contains(gstr.Join(sqlArray, "|"), showTableKey), true) + }) +} diff --git a/database/gdb/gdb_core_utility.go b/database/gdb/gdb_core_utility.go index 918be61b805..1e24e0e613e 100644 --- a/database/gdb/gdb_core_utility.go +++ b/database/gdb/gdb_core_utility.go @@ -155,7 +155,7 @@ func (c *Core) ClearTableFields(ctx context.Context, table string, schema ...str func (c *Core) ClearTableFieldsAll(ctx context.Context) (err error) { var ( keys = tableFieldsMap.Keys() - cachePrefix = fmt.Sprintf(`%s@%s`, cachePrefixTableFields, c.db.GetGroup()) + cachePrefix = fmt.Sprintf(`%s%s`, cachePrefixTableFields, c.db.GetGroup()) removedKeys = make([]string, 0) ) for _, key := range keys { diff --git a/database/gdb/gdb_driver_wrapper_db.go b/database/gdb/gdb_driver_wrapper_db.go index 2a16e2530ff..70a4df1c5f9 100644 --- a/database/gdb/gdb_driver_wrapper_db.go +++ b/database/gdb/gdb_driver_wrapper_db.go @@ -68,6 +68,7 @@ func (d *DriverWrapperDB) TableFields( ) } var ( + // prefix:group@schema#table cacheKey = fmt.Sprintf( `%s%s@%s#%s`, cachePrefixTableFields,