Skip to content

Commit

Permalink
This is an automated cherry-pick of pingcap#52812
Browse files Browse the repository at this point in the history
Signed-off-by: ti-chi-bot <[email protected]>
  • Loading branch information
wjhuang2016 authored and ti-chi-bot committed Apr 24, 2024
1 parent 5e7a36d commit 22b8219
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 0 deletions.
23 changes: 23 additions & 0 deletions cmd/explaintest/r/collation_misc_disabled.result
Original file line number Diff line number Diff line change
Expand Up @@ -120,4 +120,27 @@ binary binary 63 Yes Yes 1
ascii_bin ascii 65 Yes Yes 1
utf8_bin utf8 83 Yes Yes 1
gbk_bin gbk 87 Yes Yes 1
<<<<<<< HEAD:cmd/explaintest/r/collation_misc_disabled.result
use test;
=======
create database if not exists cd_test_utf8mb4_0900_bin;
use cd_test_utf8mb4_0900_bin;
create table t (id varchar(255) primary key clustered, a varchar(255) collate utf8mb4_0900_bin, b varchar(255) collate utf8mb4_bin, key idx(a, b));
insert into t values ("1", "a ", "a");
select /*+USE_INDEX(t, idx)*/ * from t;
id a b
1 a a
drop table if exists t1;
drop table if exists t2;
create table t1(code varchar(32)) CHARSET=utf8 COLLATE=utf8_general_ci;
create table t2(code varchar(32)) CHARSET=utf8 COLLATE=utf8_bin;
desc format=brief select * from t1 join t2 on t1.code=t2.code and t1.code in ('1') and t2.code in ('1');
id estRows task access object operator info
HashJoin 12.50 root inner join, equal:[eq(cd_test_utf8mb4_0900_bin.t1.code, cd_test_utf8mb4_0900_bin.t2.code)]
├─TableReader(Build) 10.00 root data:Selection
│ └─Selection 10.00 cop[tikv] eq(cd_test_utf8mb4_0900_bin.t2.code, "1"), not(isnull(cd_test_utf8mb4_0900_bin.t2.code))
│ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo
└─TableReader(Probe) 10.00 root data:Selection
└─Selection 10.00 cop[tikv] eq(cd_test_utf8mb4_0900_bin.t1.code, "1"), not(isnull(cd_test_utf8mb4_0900_bin.t1.code))
└─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo
>>>>>>> cf5c68e5558 (expression: don't cast collation for in expression is the new collation is disabled (#52812)):tests/integrationtest/r/collation_misc_disabled.result
24 changes: 24 additions & 0 deletions cmd/explaintest/r/collation_misc_enabled.result
Original file line number Diff line number Diff line change
Expand Up @@ -133,4 +133,28 @@ utf8_unicode_ci utf8 192 Yes 1
utf8mb4_bin utf8mb4 46 Yes Yes 1
utf8mb4_general_ci utf8mb4 45 Yes 1
utf8mb4_unicode_ci utf8mb4 224 Yes 1
<<<<<<< HEAD:cmd/explaintest/r/collation_misc_enabled.result
use test;
=======
create database if not exists cd_test_utf8mb4_0900_bin;
use cd_test_utf8mb4_0900_bin;
create table t (id varchar(255) primary key clustered, a varchar(255) collate utf8mb4_0900_bin, b varchar(255) collate utf8mb4_bin, key idx(a, b));
insert into t values ("1", "a ", "a");
select /*+USE_INDEX(t, idx)*/ * from t;
id a b
1 a a
drop table if exists t1;
drop table if exists t2;
create table t1(code varchar(32)) CHARSET=utf8 COLLATE=utf8_general_ci;
create table t2(code varchar(32)) CHARSET=utf8 COLLATE=utf8_bin;
desc format=brief select * from t1 join t2 on t1.code=t2.code and t1.code in ('1') and t2.code in ('1');
id estRows task access object operator info
Projection 80000.00 root cd_test_utf8mb4_0900_bin.t1.code, cd_test_utf8mb4_0900_bin.t2.code
└─HashJoin 80000.00 root CARTESIAN inner join
├─TableReader(Build) 10.00 root data:Selection
│ └─Selection 10.00 cop[tikv] eq(cd_test_utf8mb4_0900_bin.t2.code, "1")
│ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo
└─TableReader(Probe) 8000.00 root data:Selection
└─Selection 8000.00 cop[tikv] eq(cd_test_utf8mb4_0900_bin.t1.code, "1")
└─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo
>>>>>>> cf5c68e5558 (expression: don't cast collation for in expression is the new collation is disabled (#52812)):tests/integrationtest/r/collation_misc_enabled.result
16 changes: 16 additions & 0 deletions cmd/explaintest/t/collation_misc.test
Original file line number Diff line number Diff line change
Expand Up @@ -86,4 +86,20 @@ select * from information_schema.COLLATION_CHARACTER_SET_APPLICABILITY where COL
show charset;
show collation;

<<<<<<< HEAD:cmd/explaintest/t/collation_misc.test
use test;
=======
# Issue46690
create database if not exists cd_test_utf8mb4_0900_bin;
use cd_test_utf8mb4_0900_bin;
create table t (id varchar(255) primary key clustered, a varchar(255) collate utf8mb4_0900_bin, b varchar(255) collate utf8mb4_bin, key idx(a, b));
insert into t values ("1", "a ", "a");
select /*+USE_INDEX(t, idx)*/ * from t;

# issue 52772
drop table if exists t1;
drop table if exists t2;
create table t1(code varchar(32)) CHARSET=utf8 COLLATE=utf8_general_ci;
create table t2(code varchar(32)) CHARSET=utf8 COLLATE=utf8_bin;
desc format=brief select * from t1 join t2 on t1.code=t2.code and t1.code in ('1') and t2.code in ('1');
>>>>>>> cf5c68e5558 (expression: don't cast collation for in expression is the new collation is disabled (#52812)):tests/integrationtest/t/collation_misc.test
7 changes: 7 additions & 0 deletions planner/core/expression_rewriter.go
Original file line number Diff line number Diff line change
Expand Up @@ -1651,6 +1651,13 @@ func (er *expressionRewriter) castCollationForIn(colLen int, elemCnt int, stkLen
if colLen != 1 {
return
}
if !collate.NewCollationEnabled() {
// See https://github.com/pingcap/tidb/issues/52772
// This function will apply CoercibilityExplicit to the casted expression, but some checks(during ColumnSubstituteImpl) is missed when the new
// collation is disabled, then lead to panic.
// To work around this issue, we can skip the function, it should be good since the collation is disabled.
return
}
for i := stkLen - elemCnt; i < stkLen; i++ {
// todo: consider refining the code and reusing expression.BuildCollationFunction here
if er.ctxStack[i].GetType().EvalType() == types.ETString {
Expand Down

0 comments on commit 22b8219

Please sign in to comment.