From bb71ccfd4c03e9ce8cd55c9e904a9191f7e14e05 Mon Sep 17 00:00:00 2001 From: Jack Ling <34231795+lingcoder@users.noreply.github.com> Date: Fri, 10 Apr 2026 09:05:17 +0800 Subject: [PATCH] fix(database/gdb): strip quote chars from schema in Model.TableFields (#4730) ## Summary When performing cross-database JOINs with soft-delete, the schema name parsed from `` `schema`.`table` `` format retains database-specific quote characters. These quoted schema names break `information_schema` WHERE clause queries in `TableFields` lookups. This PR strips quote characters from `usedSchema` in `Model.TableFields()`, matching the existing unquoting pattern used for `usedTable` via `guessPrimaryTableName`. ## Changes - `database/gdb/gdb_model_utility.go`: Add quote-stripping for `usedSchema` using `gstr.Trim` with database-specific quote chars from `GetChars()` ## Test Existing `Test_Issue2338` in MySQL (`contrib/drivers/mysql/mysql_z_unit_issue_test.go:685`) covers this case. The MariaDB version exists in PR #4724 branch (`contrib/drivers/mariadb/mariadb_z_unit_issue_test.go:688`), not yet merged. Once both PRs are merged, the MariaDB test will also validate this fix. closes #4725 Co-authored-by: John Guo --- database/gdb/gdb_model_utility.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/database/gdb/gdb_model_utility.go b/database/gdb/gdb_model_utility.go index 48e6e974e..54fea9972 100644 --- a/database/gdb/gdb_model_utility.go +++ b/database/gdb/gdb_model_utility.go @@ -37,6 +37,12 @@ func (m *Model) TableFields(tableStr string, schema ...string) (fields map[strin usedTable = m.db.GetCore().guessPrimaryTableName(tableStr) usedSchema = gutil.GetOrDefaultStr(m.schema, schema...) ) + // Strip quote characters from schema name, as it may come from cross-database + // table parsing (e.g., `schema`.`table`) and contain database-specific quote chars. + charL, charR := m.db.GetChars() + if usedSchema != "" && (charL != "" || charR != "") { + usedSchema = gstr.Trim(usedSchema, charL+charR) + } // Sharding feature. usedSchema, err = m.getActualSchema(ctx, usedSchema) if err != nil {