Skip to content

Commit

Permalink
cherry pick #32505 to release-5.3
Browse files Browse the repository at this point in the history
Signed-off-by: ti-srebot <ti-srebot@pingcap.com>
  • Loading branch information
Defined2014 committed Feb 21, 2022
1 parent 27ffd11 commit e388bb9
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 8 deletions.
36 changes: 28 additions & 8 deletions expression/builtin_string_vec.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,22 @@ func (b *builtinLowerSig) vectorized() bool {
}

func (b *builtinLowerUTF8Sig) vecEvalString(input *chunk.Chunk, result *chunk.Column) error {
if err := b.args[0].VecEvalString(b.ctx, input, result); err != nil {
n := input.NumRows()
buf, err := b.bufAllocator.get()
if err != nil {
return err
}

for i := 0; i < input.NumRows(); i++ {
result.SetRaw(i, []byte(b.encoding.ToLower(result.GetString(i))))
defer b.bufAllocator.put(buf)
if err := b.args[0].VecEvalString(b.ctx, input, buf); err != nil {
return err
}
result.ReserveString(n)
for i := 0; i < n; i++ {
if buf.IsNull(i) {
result.AppendNull()
} else {
result.AppendString(b.encoding.ToLower(result.GetString(i)))
}
}

return nil
Expand Down Expand Up @@ -143,12 +153,22 @@ func (b *builtinStringIsNullSig) vectorized() bool {
}

func (b *builtinUpperUTF8Sig) vecEvalString(input *chunk.Chunk, result *chunk.Column) error {
if err := b.args[0].VecEvalString(b.ctx, input, result); err != nil {
n := input.NumRows()
buf, err := b.bufAllocator.get()
if err != nil {
return err
}

for i := 0; i < input.NumRows(); i++ {
result.SetRaw(i, []byte(b.encoding.ToUpper(result.GetString(i))))
defer b.bufAllocator.put(buf)
if err := b.args[0].VecEvalString(b.ctx, input, buf); err != nil {
return err
}
result.ReserveString(n)
for i := 0; i < n; i++ {
if buf.IsNull(i) {
result.AppendNull()
} else {
result.AppendString(b.encoding.ToUpper(result.GetString(i)))
}
}
return nil
}
Expand Down
16 changes: 16 additions & 0 deletions expression/integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10539,3 +10539,19 @@ func (s *testIntegrationSuite) TestIssue29513(c *C) {
tk.MustQuery("select '123' union select cast(a as char) from t;").Sort().Check(testkit.Rows("123", "45678"))
tk.MustQuery("select '123' union select cast(a as char(2)) from t;").Sort().Check(testkit.Rows("123", "45"))
}

func TestIssue32488(t *testing.T) {
store, clean := testkit.CreateMockStore(t)
defer clean()

tk := testkit.NewTestKit(t, store)
tk.MustExec("use test")
tk.MustExec("create table t(a varchar(32)) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;")
tk.MustExec("insert into t values('ʞ'), ('İ');")
tk.MustExec("set @@tidb_enable_vectorized_expression = false;")
tk.MustQuery("select binary upper(a), lower(a) from t order by upper(a);").Check([][]interface{}{{"İ i"}, {"Ʞ ʞ"}})
tk.MustQuery("select distinct upper(a), lower(a) from t order by upper(a);").Check([][]interface{}{{"İ i"}, {"Ʞ ʞ"}})
tk.MustExec("set @@tidb_enable_vectorized_expression = true;")
tk.MustQuery("select binary upper(a), lower(a) from t order by upper(a);").Check([][]interface{}{{"İ i"}, {"Ʞ ʞ"}})
tk.MustQuery("select distinct upper(a), lower(a) from t order by upper(a);").Check([][]interface{}{{"İ i"}, {"Ʞ ʞ"}})
}

0 comments on commit e388bb9

Please sign in to comment.