Skip to content

Commit fcd53aa

Browse files
committed
Merge pull request mauricio#55 from kxbmap/mysql-binary-types
Add support for MySQL BINARY/VARBINARY types
2 parents 0f6d637 + 64ffaf0 commit fcd53aa

File tree

2 files changed

+56
-7
lines changed

2 files changed

+56
-7
lines changed

mysql-async/src/main/scala/com/github/mauricio/async/db/mysql/codec/DecoderRegistry.scala

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ class DecoderRegistry(charset: Charset) {
3636

3737
(columnType: @switch) match {
3838
case ColumnTypes.FIELD_TYPE_VARCHAR |
39-
ColumnTypes.FIELD_TYPE_VAR_STRING |
40-
ColumnTypes.FIELD_TYPE_STRING |
4139
ColumnTypes.FIELD_TYPE_ENUM => this.stringDecoder
4240
case ColumnTypes.FIELD_TYPE_BLOB |
4341
ColumnTypes.FIELD_TYPE_LONG_BLOB |
4442
ColumnTypes.FIELD_TYPE_MEDIUM_BLOB |
45-
ColumnTypes.FIELD_TYPE_TINY_BLOB => {
43+
ColumnTypes.FIELD_TYPE_TINY_BLOB |
44+
ColumnTypes.FIELD_TYPE_VAR_STRING |
45+
ColumnTypes.FIELD_TYPE_STRING => {
4646
if (charsetCode == CharsetMapper.Binary) {
4747
ByteArrayDecoder
4848
} else {
@@ -83,13 +83,13 @@ class DecoderRegistry(charset: Charset) {
8383
case ColumnTypes.FIELD_TYPE_SHORT => ShortEncoderDecoder
8484
case ColumnTypes.FIELD_TYPE_TIME => TextTimeDecoder
8585
case ColumnTypes.FIELD_TYPE_TINY => TextByteDecoder
86-
case ColumnTypes.FIELD_TYPE_VAR_STRING |
87-
ColumnTypes.FIELD_TYPE_VARCHAR |
88-
ColumnTypes.FIELD_TYPE_STRING |
86+
case ColumnTypes.FIELD_TYPE_VARCHAR |
8987
ColumnTypes.FIELD_TYPE_ENUM => StringEncoderDecoder
9088
case ColumnTypes.FIELD_TYPE_YEAR => ShortEncoderDecoder
9189
case ColumnTypes.FIELD_TYPE_BIT => ByteArrayColumnDecoder
92-
case ColumnTypes.FIELD_TYPE_BLOB => {
90+
case ColumnTypes.FIELD_TYPE_BLOB |
91+
ColumnTypes.FIELD_TYPE_VAR_STRING |
92+
ColumnTypes.FIELD_TYPE_STRING => {
9393
if (charsetCode == CharsetMapper.Binary) {
9494
ByteArrayColumnDecoder
9595
} else {

mysql-async/src/test/scala/com/github/mauricio/async/db/mysql/QuerySpec.scala

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,55 @@ class QuerySpec extends Specification with ConnectionHelper {
211211

212212
}
213213

214+
"support BINARY type" in {
215+
216+
val create =
217+
"""CREATE TEMPORARY TABLE POSTS (
218+
| id INT NOT NULL AUTO_INCREMENT,
219+
| binary_column BINARY(20),
220+
| primary key (id))
221+
""".stripMargin
222+
223+
val insert = "INSERT INTO POSTS (binary_column) VALUES (?)"
224+
val select = "SELECT * FROM POSTS"
225+
val bytes = (1 to 10).map(_.toByte).toArray
226+
val padding = Array.fill[Byte](10)(0)
227+
228+
withConnection {
229+
connection =>
230+
executeQuery(connection, create)
231+
executePreparedStatement(connection, insert, bytes)
232+
val row = executeQuery(connection, select).rows.get(0)
233+
row("id") === 1
234+
row("binary_column") === bytes ++ padding
235+
}
236+
237+
}
238+
239+
"support VARBINARY type" in {
240+
241+
val create =
242+
"""CREATE TEMPORARY TABLE POSTS (
243+
| id INT NOT NULL AUTO_INCREMENT,
244+
| varbinary_column VARBINARY(20),
245+
| primary key (id))
246+
""".stripMargin
247+
248+
val insert = "INSERT INTO POSTS (varbinary_column) VALUES (?)"
249+
val select = "SELECT * FROM POSTS"
250+
val bytes = (1 to 10).map(_.toByte).toArray
251+
252+
withConnection {
253+
connection =>
254+
executeQuery(connection, create)
255+
executePreparedStatement(connection, insert, bytes)
256+
val row = executeQuery(connection, select).rows.get(0)
257+
row("id") === 1
258+
row("varbinary_column") === bytes
259+
}
260+
261+
}
262+
214263
"fail if number of args required is different than the number of provided parameters" in {
215264

216265
withConnection {

0 commit comments

Comments
 (0)