Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

planner: remove the unnecessary column type from the system table mysql.bind_info #49841

Merged
merged 11 commits into from
Dec 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pkg/bindinfo/capture_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -388,7 +388,7 @@ func TestConcurrentCapture(t *testing.T) {
// Simulate an existing binding generated by concurrent CREATE BINDING, which has not been synchronized to current tidb-server yet.
// Actually, it is more common to be generated by concurrent baseline capture, I use Manual just for simpler test verification.
tk.MustExec("insert into mysql.bind_info values('select * from `test` . `t`', 'select * from `test` . `t`', '', 'enabled', '2000-01-01 09:00:00', '2000-01-01 09:00:00', '', '','" +
bindinfo.Manual + "', '', '', '')")
bindinfo.Manual + "', '', '')")
tk.MustQuery("select original_sql, source from mysql.bind_info where source != 'builtin'").Check(testkit.Rows(
"select * from `test` . `t` manual",
))
Expand Down
14 changes: 9 additions & 5 deletions pkg/bindinfo/global_handle.go
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ func (h *globalBindingHandle) Update(fullLoad bool) (err error) {
timeCondition = fmt.Sprintf("WHERE update_time>'%s'", lastUpdateTime.String())
}
selectStmt := fmt.Sprintf(`SELECT original_sql, bind_sql, default_db, status, create_time,
update_time, charset, collation, source, sql_digest, plan_digest, type FROM mysql.bind_info
update_time, charset, collation, source, sql_digest, plan_digest FROM mysql.bind_info
%s ORDER BY update_time, create_time`, timeCondition)

return h.callWithSCtx(false, func(sctx sessionctx.Context) error {
Expand Down Expand Up @@ -302,7 +302,7 @@ func (h *globalBindingHandle) CreateGlobalBinding(sctx sessionctx.Context, recor
record.Bindings[i].UpdateTime = now

// Insert the BindRecord to the storage.
_, err = exec(sctx, `INSERT INTO mysql.bind_info VALUES (%?,%?, %?, %?, %?, %?, %?, %?, %?, %?, %?, %?)`,
_, err = exec(sctx, `INSERT INTO mysql.bind_info VALUES (%?,%?, %?, %?, %?, %?, %?, %?, %?, %?, %?)`,
record.OriginalSQL,
record.Bindings[i].BindSQL,
record.Db,
Expand All @@ -314,7 +314,6 @@ func (h *globalBindingHandle) CreateGlobalBinding(sctx sessionctx.Context, recor
record.Bindings[i].Source,
record.Bindings[i].SQLDigest,
record.Bindings[i].PlanDigest,
record.Bindings[i].Type,
)
if err != nil {
return err
Expand Down Expand Up @@ -592,6 +591,11 @@ func newBindRecord(sctx sessionctx.Context, row chunk.Row) (string, *BindRecord,
if status == Using {
status = Enabled
}
defaultDB := row.GetString(2)
bindingType := TypeNormal
if defaultDB == "" {
bindingType = TypeUniversal
}
binding := Binding{
BindSQL: row.GetString(1),
Status: status,
Expand All @@ -602,11 +606,11 @@ func newBindRecord(sctx sessionctx.Context, row chunk.Row) (string, *BindRecord,
Source: row.GetString(8),
SQLDigest: row.GetString(9),
PlanDigest: row.GetString(10),
Type: row.GetString(11),
Type: bindingType,
}
bindRecord := &BindRecord{
OriginalSQL: row.GetString(0),
Db: strings.ToLower(row.GetString(2)),
Db: strings.ToLower(defaultDB),
Bindings: []Binding{binding},
}
sqlDigest := parser.DigestNormalized(bindRecord.OriginalSQL)
Expand Down
10 changes: 5 additions & 5 deletions pkg/bindinfo/global_handle_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ func TestBindingLastUpdateTimeWithInvalidBind(t *testing.T) {
require.Equal(t, updateTime0, "0000-00-00 00:00:00")

tk.MustExec("insert into mysql.bind_info values('select * from `test` . `t`', 'select * from `test` . `t` use index(`idx`)', 'test', 'enabled', '2000-01-01 09:00:00', '2000-01-01 09:00:00', '', '','" +
bindinfo.Manual + "', '', '', '')")
bindinfo.Manual + "', '', '')")
tk.MustExec("use test")
tk.MustExec("drop table if exists t")
tk.MustExec("create table t(a int)")
Expand Down Expand Up @@ -267,9 +267,9 @@ func TestSetBindingStatusWithoutBindingInCache(t *testing.T) {

// Simulate creating bindings on other machines
tk.MustExec("insert into mysql.bind_info values('select * from `test` . `t` where `a` > ?', 'SELECT /*+ USE_INDEX(`t` `idx_a`)*/ * FROM `test`.`t` WHERE `a` > 10', 'test', 'deleted', '2000-01-01 09:00:00', '2000-01-01 09:00:00', '', '','" +
bindinfo.Manual + "', '', '', '')")
bindinfo.Manual + "', '', '')")
tk.MustExec("insert into mysql.bind_info values('select * from `test` . `t` where `a` > ?', 'SELECT /*+ USE_INDEX(`t` `idx_a`)*/ * FROM `test`.`t` WHERE `a` > 10', 'test', 'enabled', '2000-01-02 09:00:00', '2000-01-02 09:00:00', '', '','" +
bindinfo.Manual + "', '', '', '')")
bindinfo.Manual + "', '', '')")
dom.BindHandle().Clear()
tk.MustExec("set binding disabled for select * from t where a > 10")
tk.MustExec("admin reload bindings")
Expand All @@ -282,9 +282,9 @@ func TestSetBindingStatusWithoutBindingInCache(t *testing.T) {

// Simulate creating bindings on other machines
tk.MustExec("insert into mysql.bind_info values('select * from `test` . `t` where `a` > ?', 'SELECT * FROM `test`.`t` WHERE `a` > 10', 'test', 'deleted', '2000-01-01 09:00:00', '2000-01-01 09:00:00', '', '','" +
bindinfo.Manual + "', '', '', '')")
bindinfo.Manual + "', '', '')")
tk.MustExec("insert into mysql.bind_info values('select * from `test` . `t` where `a` > ?', 'SELECT * FROM `test`.`t` WHERE `a` > 10', 'test', 'disabled', '2000-01-02 09:00:00', '2000-01-02 09:00:00', '', '','" +
bindinfo.Manual + "', '', '', '')")
bindinfo.Manual + "', '', '')")
dom.BindHandle().Clear()
tk.MustExec("set binding enabled for select * from t where a > 10")
tk.MustExec("admin reload bindings")
Expand Down
12 changes: 6 additions & 6 deletions pkg/bindinfo/session_handle_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ func TestBaselineDBLowerCase(t *testing.T) {

// Simulate existing bindings with upper case default_db.
tk.MustExec("insert into mysql.bind_info values('select * from `spm` . `t`', 'select * from `spm` . `t`', 'SPM', 'enabled', '2000-01-01 09:00:00', '2000-01-01 09:00:00', '', '','" +
bindinfo.Manual + "', '', '', '')")
bindinfo.Manual + "', '', '')")
tk.MustQuery("select original_sql, default_db from mysql.bind_info where original_sql = 'select * from `spm` . `t`'").Check(testkit.Rows(
"select * from `spm` . `t` SPM",
))
Expand All @@ -230,7 +230,7 @@ func TestBaselineDBLowerCase(t *testing.T) {
internal.UtilCleanBindingEnv(tk, dom)
// Simulate existing bindings with upper case default_db.
tk.MustExec("insert into mysql.bind_info values('select * from `spm` . `t`', 'select * from `spm` . `t`', 'SPM', 'enabled', '2000-01-01 09:00:00', '2000-01-01 09:00:00', '', '','" +
bindinfo.Manual + "', '', '', '')")
bindinfo.Manual + "', '', '')")
tk.MustQuery("select original_sql, default_db from mysql.bind_info where original_sql = 'select * from `spm` . `t`'").Check(testkit.Rows(
"select * from `spm` . `t` SPM",
))
Expand Down Expand Up @@ -267,13 +267,13 @@ func TestShowGlobalBindings(t *testing.T) {
require.Len(t, rows, 0)
// Simulate existing bindings in the mysql.bind_info.
tk.MustExec("insert into mysql.bind_info values('select * from `spm` . `t`', 'select * from `spm` . `t` USE INDEX (`a`)', 'SPM', 'enabled', '2000-01-01 09:00:00', '2000-01-01 09:00:00', '', '','" +
bindinfo.Manual + "', '', '', '')")
bindinfo.Manual + "', '', '')")
tk.MustExec("insert into mysql.bind_info values('select * from `spm` . `t0`', 'select * from `spm` . `t0` USE INDEX (`a`)', 'SPM', 'enabled', '2000-01-02 09:00:00', '2000-01-02 09:00:00', '', '','" +
bindinfo.Manual + "', '', '', '')")
bindinfo.Manual + "', '', '')")
tk.MustExec("insert into mysql.bind_info values('select * from `spm` . `t`', 'select /*+ use_index(`t` `a`)*/ * from `spm` . `t`', 'SPM', 'enabled', '2000-01-03 09:00:00', '2000-01-03 09:00:00', '', '','" +
bindinfo.Manual + "', '', '', '')")
bindinfo.Manual + "', '', '')")
tk.MustExec("insert into mysql.bind_info values('select * from `spm` . `t0`', 'select /*+ use_index(`t0` `a`)*/ * from `spm` . `t0`', 'SPM', 'enabled', '2000-01-04 09:00:00', '2000-01-04 09:00:00', '', '','" +
bindinfo.Manual + "', '', '', '')")
bindinfo.Manual + "', '', '')")
tk.MustExec("admin reload bindings")
rows = tk.MustQuery("show global bindings").Rows()
require.Len(t, rows, 4)
Expand Down
12 changes: 6 additions & 6 deletions pkg/bindinfo/tests/bind_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -707,13 +707,13 @@ func TestBindSQLDigest(t *testing.T) {
sql := "create global binding for " + c.origin + " using " + c.hint
tk.MustExec(sql)
res := tk.MustQuery(`show global bindings`).Rows()
require.Equal(t, len(res[0]), 12)
require.Equal(t, len(res[0]), 11)

parser4binding := parser.New()
originNode, err := parser4binding.ParseOneStmt(c.origin, "utf8mb4", "utf8mb4_general_ci")
require.NoError(t, err)
_, sqlDigestWithDB := parser.NormalizeDigestForBinding(utilparser.RestoreWithDefaultDB(originNode, "test", c.origin))
require.Equal(t, res[0][10], sqlDigestWithDB.String())
require.Equal(t, res[0][9], sqlDigestWithDB.String())
}
}

Expand Down Expand Up @@ -801,8 +801,8 @@ func TestDropBindBySQLDigest(t *testing.T) {
res := tk.MustQuery(`show global bindings`).Rows()

require.Equal(t, len(res), 1)
require.Equal(t, len(res[0]), 12)
drop := fmt.Sprintf("drop global binding for sql digest '%s'", res[0][10])
require.Equal(t, len(res[0]), 11)
drop := fmt.Sprintf("drop global binding for sql digest '%s'", res[0][9])
tk.MustExec(drop)
require.NoError(t, h.GCGlobalBinding())
h.ReloadGlobalBindings()
Expand All @@ -817,8 +817,8 @@ func TestDropBindBySQLDigest(t *testing.T) {
res := tk.MustQuery(`show bindings`).Rows()

require.Equal(t, len(res), 1)
require.Equal(t, len(res[0]), 12)
drop := fmt.Sprintf("drop binding for sql digest '%s'", res[0][10])
require.Equal(t, len(res[0]), 11)
drop := fmt.Sprintf("drop binding for sql digest '%s'", res[0][9])
tk.MustExec(drop)
require.NoError(t, h.GCGlobalBinding())
tk.MustQuery("show bindings").Check(testkit.Rows())
Expand Down
38 changes: 19 additions & 19 deletions pkg/bindinfo/universal_binding_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ func showBinding(tk *testkit.TestKit, showStmt string) [][]interface{} {
result := make([][]interface{}, len(rows))
for i, r := range rows {
result[i] = append(result[i], r[:4]...)
result[i] = append(result[i], r[8:11]...)
result[i] = append(result[i], r[8:10]...)
}
return result
}
Expand All @@ -47,7 +47,7 @@ func removeAllBindings(tk *testkit.TestKit, global bool) {
if r[4] == "builtin" {
continue
}
tk.MustExec(fmt.Sprintf("drop %v binding for sql digest '%v'", scope, r[6]))
tk.MustExec(fmt.Sprintf("drop %v binding for sql digest '%v'", scope, r[5]))
}
tk.MustQuery(fmt.Sprintf("show %v bindings", scope)).Check(testkit.Rows()) // empty
}
Expand Down Expand Up @@ -101,29 +101,29 @@ func TestUniversalDuplicatedBinding(t *testing.T) {

tk.MustExec(`create global universal binding using select * from t`)
require.Equal(t, showBinding(tk, "show global bindings"),
[][]interface{}{{"select * from `t`", "SELECT * FROM `t`", "", "enabled", "manual", "u", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"}})
[][]interface{}{{"select * from `t`", "SELECT * FROM `t`", "", "enabled", "manual", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"}})

// if duplicated, the old one will be replaced
tk.MustExec(`create global universal binding using select /*+ use_index(t, a) */ * from t`)
require.Equal(t, showBinding(tk, "show global bindings"),
[][]interface{}{{"select * from `t`", "SELECT /*+ use_index(`t` `a`)*/ * FROM `t`", "", "enabled", "manual", "u", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"}})
[][]interface{}{{"select * from `t`", "SELECT /*+ use_index(`t` `a`)*/ * FROM `t`", "", "enabled", "manual", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"}})

// if duplicated, the old one will be replaced
tk.MustExec(`create global universal binding using select /*+ use_index(t, b) */ * from t`)
require.Equal(t, showBinding(tk, "show global bindings"),
[][]interface{}{{"select * from `t`", "SELECT /*+ use_index(`t` `b`)*/ * FROM `t`", "", "enabled", "manual", "u", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"}})
[][]interface{}{{"select * from `t`", "SELECT /*+ use_index(`t` `b`)*/ * FROM `t`", "", "enabled", "manual", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"}})

// normal bindings don't conflict with universal bindings
tk.MustExec(`create global binding using select /*+ use_index(t, b) */ * from t`)
require.Equal(t, showBinding(tk, "show global bindings"),
[][]interface{}{{"select * from `t`", "SELECT /*+ use_index(`t` `b`)*/ * FROM `t`", "", "enabled", "manual", "u", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"},
{"select * from `test` . `t`", "SELECT /*+ use_index(`t` `b`)*/ * FROM `test`.`t`", "test", "enabled", "manual", "", "8b193b00413fdb910d39073e0d494c96ebf24d1e30b131ecdd553883d0e29b42"}})
[][]interface{}{{"select * from `t`", "SELECT /*+ use_index(`t` `b`)*/ * FROM `t`", "", "enabled", "manual", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"},
{"select * from `test` . `t`", "SELECT /*+ use_index(`t` `b`)*/ * FROM `test`.`t`", "test", "enabled", "manual", "8b193b00413fdb910d39073e0d494c96ebf24d1e30b131ecdd553883d0e29b42"}})

// session bindings don't conflict with global bindings
tk.MustExec(`create session universal binding using select /*+ use_index(t, c) */ * from t`)
require.Equal(t, showBinding(tk, "show global bindings"),
[][]interface{}{{"select * from `t`", "SELECT /*+ use_index(`t` `b`)*/ * FROM `t`", "", "enabled", "manual", "u", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"},
{"select * from `test` . `t`", "SELECT /*+ use_index(`t` `b`)*/ * FROM `test`.`t`", "test", "enabled", "manual", "", "8b193b00413fdb910d39073e0d494c96ebf24d1e30b131ecdd553883d0e29b42"}})
[][]interface{}{{"select * from `t`", "SELECT /*+ use_index(`t` `b`)*/ * FROM `t`", "", "enabled", "manual", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"},
{"select * from `test` . `t`", "SELECT /*+ use_index(`t` `b`)*/ * FROM `test`.`t`", "test", "enabled", "manual", "8b193b00413fdb910d39073e0d494c96ebf24d1e30b131ecdd553883d0e29b42"}})
}

func TestUniversalBindingPriority(t *testing.T) {
Expand Down Expand Up @@ -171,24 +171,24 @@ func TestCreateUpdateUniversalBinding(t *testing.T) {
// drop/show/update binding for sql digest can work for global universal bindings
tk.MustExec(`create global universal binding using select * from t`)
require.Equal(t, showBinding(tk, "show global bindings"),
[][]interface{}{{"select * from `t`", "SELECT * FROM `t`", "", "enabled", "manual", "u", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"}})
[][]interface{}{{"select * from `t`", "SELECT * FROM `t`", "", "enabled", "manual", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"}})
require.Equal(t, showBinding(tk, "show global bindings"), [][]interface{}{
{"select * from `t`", "SELECT * FROM `t`", "", "enabled", "manual", "u", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"}})
{"select * from `t`", "SELECT * FROM `t`", "", "enabled", "manual", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"}})
tk.MustExec(`set binding disabled for sql digest 'e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7'`)
require.Equal(t, showBinding(tk, "show global bindings"), [][]interface{}{
{"select * from `t`", "SELECT * FROM `t`", "", "disabled", "manual", "u", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"}})
{"select * from `t`", "SELECT * FROM `t`", "", "disabled", "manual", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"}})
tk.MustExec(`set binding enabled for sql digest 'e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7'`)
require.Equal(t, showBinding(tk, "show global bindings"), [][]interface{}{
{"select * from `t`", "SELECT * FROM `t`", "", "enabled", "manual", "u", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"}})
{"select * from `t`", "SELECT * FROM `t`", "", "enabled", "manual", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"}})
tk.MustExec(`drop global binding for sql digest 'e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7'`)
require.Equal(t, showBinding(tk, "show global bindings"), [][]interface{}{})

// drop/show/update binding for sql digest can work for session universal bindings
tk.MustExec(`create session universal binding using select * from t`)
require.Equal(t, showBinding(tk, "show session bindings"),
[][]interface{}{{"select * from `t`", "SELECT * FROM `t`", "", "enabled", "manual", "u", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"}})
[][]interface{}{{"select * from `t`", "SELECT * FROM `t`", "", "enabled", "manual", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"}})
require.Equal(t, showBinding(tk, "show session bindings"), [][]interface{}{
{"select * from `t`", "SELECT * FROM `t`", "", "enabled", "manual", "u", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"}})
{"select * from `t`", "SELECT * FROM `t`", "", "enabled", "manual", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"}})
tk.MustExec(`drop session binding for sql digest 'e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7'`)
require.Equal(t, showBinding(tk, "show session bindings"), [][]interface{}{})
}
Expand Down Expand Up @@ -288,18 +288,18 @@ func TestUniversalBindingGC(t *testing.T) {

tk.MustExec(`create global universal binding using select /*+ use_index(t, b) */ * from t`)
require.Equal(t, showBinding(tk, "show global bindings"),
[][]interface{}{{"select * from `t`", "SELECT /*+ use_index(`t` `b`)*/ * FROM `t`", "", "enabled", "manual", "u", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"}})
[][]interface{}{{"select * from `t`", "SELECT /*+ use_index(`t` `b`)*/ * FROM `t`", "", "enabled", "manual", "e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7"}})
tk.MustExec(`drop global binding for sql digest 'e5796985ccafe2f71126ed6c0ac939ffa015a8c0744a24b7aee6d587103fd2f7'`)
require.Equal(t, showBinding(tk, "show global bindings"), [][]interface{}{}) // empty
tk.MustQuery(`select bind_sql, status, type from mysql.bind_info where source != 'builtin'`).Check(
testkit.Rows("SELECT /*+ use_index(`t` `b`)*/ * FROM `t` deleted u")) // status=deleted
tk.MustQuery(`select bind_sql, status from mysql.bind_info where source != 'builtin'`).Check(
testkit.Rows("SELECT /*+ use_index(`t` `b`)*/ * FROM `t` deleted")) // status=deleted

updateTime := time.Now().Add(-(15 * bindinfo.Lease))
updateTimeStr := types.NewTime(types.FromGoTime(updateTime), mysql.TypeTimestamp, 3).String()
tk.MustExec(fmt.Sprintf("update mysql.bind_info set update_time = '%v' where source != 'builtin'", updateTimeStr))
bindHandle := bindinfo.NewGlobalBindingHandle(&mockSessionPool{tk.Session()})
require.NoError(t, bindHandle.GCGlobalBinding())
tk.MustQuery(`select bind_sql, status, type from mysql.bind_info where source != 'builtin'`).Check(testkit.Rows()) // empty after GC
tk.MustQuery(`select bind_sql, status from mysql.bind_info where source != 'builtin'`).Check(testkit.Rows()) // empty after GC
}

func TestUniversalBindingHints(t *testing.T) {
Expand Down
1 change: 0 additions & 1 deletion pkg/executor/show.go
Original file line number Diff line number Diff line change
Expand Up @@ -389,7 +389,6 @@ func (e *ShowExec) fetchShowBind() error {
hint.Charset,
hint.Collation,
hint.Source,
hint.Type,
hint.SQLDigest,
hint.PlanDigest,
})
Expand Down
8 changes: 4 additions & 4 deletions pkg/executor/test/showtest/show_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1207,17 +1207,17 @@ func TestShowBindingDigestField(t *testing.T) {
tk.MustExec("create binding for select * from t1, t2 where t1.id = t2.id using select /*+ merge_join(t1, t2)*/ * from t1, t2 where t1.id = t2.id")
result := tk.MustQuery("show bindings;")
rows := result.Rows()[0]
require.Equal(t, len(rows), 12)
require.Equal(t, rows[10], "ac1ceb4eb5c01f7c03e29b7d0d6ab567e563f4c93164184cde218f20d07fd77c")
require.Equal(t, len(rows), 11)
require.Equal(t, rows[9], "ac1ceb4eb5c01f7c03e29b7d0d6ab567e563f4c93164184cde218f20d07fd77c")
tk.MustExec("drop binding for select * from t1, t2 where t1.id = t2.id")
result = tk.MustQuery("show bindings;")
require.Equal(t, len(result.Rows()), 0)

tk.MustExec("create global binding for select * from t1, t2 where t1.id = t2.id using select /*+ merge_join(t1, t2)*/ * from t1, t2 where t1.id = t2.id")
result = tk.MustQuery("show global bindings;")
rows = result.Rows()[0]
require.Equal(t, len(rows), 12)
require.Equal(t, rows[10], "ac1ceb4eb5c01f7c03e29b7d0d6ab567e563f4c93164184cde218f20d07fd77c")
require.Equal(t, len(rows), 11)
require.Equal(t, rows[9], "ac1ceb4eb5c01f7c03e29b7d0d6ab567e563f4c93164184cde218f20d07fd77c")
tk.MustExec("drop global binding for select * from t1, t2 where t1.id = t2.id")
result = tk.MustQuery("show global bindings;")
require.Equal(t, len(result.Rows()), 0)
Expand Down
Loading