Skip to content

Commit ae74bd6

Browse files
authored
Merge pull request #3161 from dolthub/nicktobey/blob
Allow hash functions to work on BINARY columns when the binary is not valid UTF8
2 parents 6d94caa + fe876b2 commit ae74bd6

File tree

3 files changed

+12
-6
lines changed

3 files changed

+12
-6
lines changed

sql/expression/function/hash.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,13 @@ func (f *MD5) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) {
6767
return nil, nil
6868
}
6969

70-
val, _, err := types.LongText.Convert(ctx, arg)
70+
val, _, err := types.LongBlob.Convert(ctx, arg)
7171
if err != nil {
7272
return nil, err
7373
}
7474

7575
h := md5.New()
76-
_, err = io.WriteString(h, val.(string))
76+
_, err = h.Write(val.([]byte))
7777
if err != nil {
7878
return nil, err
7979
}
@@ -188,7 +188,7 @@ func (f *SHA2) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) {
188188
return nil, nil
189189
}
190190

191-
val, _, err := types.LongText.Convert(ctx, arg)
191+
val, _, err := types.LongBlob.Convert(ctx, arg)
192192
if err != nil {
193193
return nil, err
194194
}
@@ -211,7 +211,7 @@ func (f *SHA2) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) {
211211
return nil, nil
212212
}
213213

214-
_, err = io.WriteString(h, val.(string))
214+
_, err = h.Write(val.([]byte))
215215
if err != nil {
216216
return nil, err
217217
}

sql/expression/function/hash_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ func TestMD5(t *testing.T) {
3737
{expression.NewLiteral("abcd", types.Text), "e2fc714c4727ee9395f324cd2e7f331f"},
3838
{expression.NewLiteral(float32(2.5), types.Float32), "8221435bcce913b5c2dc22eaf6cb6590"},
3939
{expression.NewLiteral("2.5", types.Text), "8221435bcce913b5c2dc22eaf6cb6590"},
40+
{expression.NewLiteral([]byte{0x80}, types.LongBlob), "8d39dd7eef115ea6975446ef4082951f"},
4041
{NewMD5(expression.NewLiteral(int8(10), types.Int8)), "8d8e353b98d5191d5ceea1aa3eb05d43"},
4142
}
4243

@@ -232,6 +233,11 @@ func TestSHA2(t *testing.T) {
232233
expression.NewLiteral("512", types.Text),
233234
"a4281cc49c2503bd0a0876db08ac6280583ebfcee6186c054792d877e7febe63251bfb82616504ed8ee36b146a7d5c6bfcdfcf9c27969a3874bab4544efed501",
234235
},
236+
{
237+
expression.NewLiteral([]byte{0x80}, types.Blob),
238+
expression.NewLiteral(256, types.Int64),
239+
"76be8b528d0075f7aae98d6fa57a6d3c83ae480a8469e668d7b0af968995ac71",
240+
},
235241
}
236242

237243
for _, test := range tests {

sql/expression/function/tobase64_frombase64.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,11 @@ func (t *ToBase64) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) {
7777
}
7878
strBytes = encodedBytes
7979
} else {
80-
val, _, err = types.LongText.Convert(ctx, val)
80+
val, _, err = types.LongBlob.Convert(ctx, val)
8181
if err != nil {
8282
return nil, sql.ErrInvalidType.New(reflect.TypeOf(val))
8383
}
84-
strBytes = []byte(val.(string))
84+
strBytes = val.([]byte)
8585
}
8686

8787
encoded := base64.StdEncoding.EncodeToString(strBytes)

0 commit comments

Comments
 (0)