From feef2a8971de524b87e3d0442bf81d0d06c724c8 Mon Sep 17 00:00:00 2001 From: time-and-fate <25057648+time-and-fate@users.noreply.github.com> Date: Mon, 9 Jan 2023 17:42:19 +0800 Subject: [PATCH 1/2] fix --- planner/core/integration_test.go | 8 ++++++++ planner/core/logical_plan_builder.go | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/planner/core/integration_test.go b/planner/core/integration_test.go index 459d113d97f2c..0eb7bea667b9a 100644 --- a/planner/core/integration_test.go +++ b/planner/core/integration_test.go @@ -8219,3 +8219,11 @@ func TestAutoIncrementCheckWithCheckConstraint(t *testing.T) { KEY idx_autoinc_id (id) )`) } + +func TestIssue40285(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("CREATE TABLE t(col1 enum('p5', '9a33x') NOT NULL DEFAULT 'p5',col2 tinyblob DEFAULT NULL) ENGINE = InnoDB DEFAULT CHARSET = latin1 COLLATE = latin1_bin;") + tk.MustQuery("(select last_value(col1) over () as r0 from t) union all (select col2 as r0 from t);") +} diff --git a/planner/core/logical_plan_builder.go b/planner/core/logical_plan_builder.go index df903670ab010..21c54056c7cd8 100644 --- a/planner/core/logical_plan_builder.go +++ b/planner/core/logical_plan_builder.go @@ -1576,7 +1576,9 @@ func (*PlanBuilder) setUnionFlen(resultTp *types.FieldType, cols []expression.Ex childTp := cols[i].GetType() childTpCharLen := 1 if isBinary { - childTpCharLen = charset.CharacterSetInfos[childTp.GetCharset()].Maxlen + if charsetInfo, ok := charset.CharacterSetInfos[childTp.GetCharset()]; ok { + childTpCharLen = charsetInfo.Maxlen + } } resultTp.SetFlen(mathutil.Max(resultTp.GetFlen(), childTpCharLen*childTp.GetFlen())) } From 7f33cc9701759bf5cd347799b4c5bd14ccdb73c4 Mon Sep 17 00:00:00 2001 From: time-and-fate <25057648+time-and-fate@users.noreply.github.com> Date: Mon, 9 Jan 2023 20:41:40 +0800 Subject: [PATCH 2/2] try my luck --- planner/core/plan_cost_ver2_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/planner/core/plan_cost_ver2_test.go b/planner/core/plan_cost_ver2_test.go index 38ee51738d81a..c56f41b22cf59 100644 --- a/planner/core/plan_cost_ver2_test.go +++ b/planner/core/plan_cost_ver2_test.go @@ -163,6 +163,7 @@ func TestCostModelVer2ScanRowSize(t *testing.T) { tk.MustExec(`create table t (pk int, a int, b int, c int, d int, primary key(pk), index ab(a, b), index abc(a, b, c))`) tk.MustExec("insert into t values (1, 1, 1, 1, 1)") tk.MustExec(`set @@tidb_cost_model_version=2`) + tk.MustExec("set global tidb_enable_collect_execution_info=1;") cases := []struct { query string