Skip to content

Commit

Permalink
expression: support GBK for builtin function Decode and encode
Browse files Browse the repository at this point in the history
Signed-off-by: Weizhen Wang <wangweizhen@pingcap.com>
  • Loading branch information
hawkingrei committed Nov 3, 2021
1 parent 0f22e3a commit f5af85f
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 19 deletions.
14 changes: 7 additions & 7 deletions expression/builtin_encryption.go
Original file line number Diff line number Diff line change
Expand Up @@ -408,7 +408,7 @@ func (b *builtinDecodeSig) evalString(row chunk.Row) (string, bool, error) {
return "", true, err
}
dataTp := b.args[0].GetType()
dataBuf, err := charset.NewEncoding(dataTp.Charset).EncodeString(dataStr)
dataStr, err = charset.NewEncoding(dataTp.Charset).EncodeString(dataStr)
if err != nil {
return "", false, err
}
Expand All @@ -418,12 +418,12 @@ func (b *builtinDecodeSig) evalString(row chunk.Row) (string, bool, error) {
return "", true, err
}
passwordTp := b.args[1].GetType()
passwordBuf, err := charset.NewEncoding(passwordTp.Charset).EncodeString(passwordStr)
passwordStr, err = charset.NewEncoding(passwordTp.Charset).EncodeString(passwordStr)
if err != nil {
return "", false, err
}

decodeStr, err := encrypt.SQLDecode(dataBuf, passwordBuf)
decodeStr, err := encrypt.SQLDecode(dataStr, passwordStr)
return decodeStr, false, err
}

Expand Down Expand Up @@ -481,22 +481,22 @@ func (b *builtinEncodeSig) evalString(row chunk.Row) (string, bool, error) {
return "", true, err
}
decodeTp := b.args[0].GetType()
decodeBuff, err := charset.NewEncoding(decodeTp.Charset).EncodeString(decodeStr)
decodeStr, err = charset.NewEncoding(decodeTp.Charset).EncodeString(decodeStr)
if err != nil {
return "", false, err
}

passwordStr, isNull, err := b.args[1].EvalString(b.ctx, row)
if isNull || err != nil {
return "", false, err
return "", true, err
}
passwordTp := b.args[1].GetType()
passwordBuff, err := charset.NewEncoding(passwordTp.Charset).EncodeString(passwordStr)
passwordStr, err = charset.NewEncoding(passwordTp.Charset).EncodeString(passwordStr)
if err != nil {
return "", false, err
}

dataStr, err := encrypt.SQLEncode(decodeBuff, passwordBuff)
dataStr, err := encrypt.SQLEncode(decodeStr, passwordStr)
return dataStr, false, err
}

Expand Down
24 changes: 12 additions & 12 deletions expression/builtin_encryption_vec.go
Original file line number Diff line number Diff line change
Expand Up @@ -212,8 +212,8 @@ func (b *builtinDecodeSig) vecEvalString(input *chunk.Chunk, result *chunk.Colum
if err := b.args[0].VecEvalString(b.ctx, input, buf); err != nil {
return err
}
bufTp := b.args[0].GetType()
bufEnc := charset.NewEncoding(bufTp.Charset)
dataTp := b.args[0].GetType()
dataEnc := charset.NewEncoding(dataTp.Charset)

buf1, err1 := b.bufAllocator.get()
if err1 != nil {
Expand All @@ -223,19 +223,19 @@ func (b *builtinDecodeSig) vecEvalString(input *chunk.Chunk, result *chunk.Colum
if err := b.args[1].VecEvalString(b.ctx, input, buf1); err != nil {
return err
}
buf1Tp := b.args[1].GetType()
buf1Enc := charset.NewEncoding(buf1Tp.Charset)
passwordTp := b.args[1].GetType()
passwordEnc := charset.NewEncoding(passwordTp.Charset)
result.ReserveString(n)
for i := 0; i < n; i++ {
if buf.IsNull(i) || buf1.IsNull(i) {
result.AppendNull()
continue
}
dataStr, err := bufEnc.EncodeString(buf.GetString(i))
dataStr, err := dataEnc.EncodeString(buf.GetString(i))
if err != nil {
return err
}
passwordStr, err := buf1Enc.EncodeString(buf1.GetString(i))
passwordStr, err := passwordEnc.EncodeString(buf1.GetString(i))
if err != nil {
return err
}
Expand Down Expand Up @@ -266,26 +266,26 @@ func (b *builtinEncodeSig) vecEvalString(input *chunk.Chunk, result *chunk.Colum
if err1 != nil {
return err1
}
bufTp := b.args[0].GetType()
bufEnc := charset.NewEncoding(bufTp.Charset)
dataTp := b.args[0].GetType()
dataEnc := charset.NewEncoding(dataTp.Charset)
defer b.bufAllocator.put(buf1)
if err := b.args[1].VecEvalString(b.ctx, input, buf1); err != nil {
return err
}
buf1Tp := b.args[1].GetType()
buf1Enc := charset.NewEncoding(buf1Tp.Charset)
passwordTp := b.args[1].GetType()
passwordEnc := charset.NewEncoding(passwordTp.Charset)
result.ReserveString(n)
for i := 0; i < n; i++ {
if buf.IsNull(i) || buf1.IsNull(i) {
result.AppendNull()
continue
}

decodeStr, err := bufEnc.EncodeString(buf.GetString(i))
decodeStr, err := dataEnc.EncodeString(buf.GetString(i))
if err != nil {
return err
}
passwordStr, err := buf1Enc.EncodeString(buf1.GetString(i))
passwordStr, err := passwordEnc.EncodeString(buf1.GetString(i))
if err != nil {
return err
}
Expand Down

0 comments on commit f5af85f

Please sign in to comment.