From bd7b4db3b0eff51b457cd2b788baaee0bc2f9390 Mon Sep 17 00:00:00 2001 From: oshai Date: Mon, 28 Jan 2019 11:46:51 +0200 Subject: [PATCH] add json type support to mysql --- .../jasync/sql/db/mysql/codec/DecoderRegistry.kt | 1 + .../jasync/sql/db/mysql/column/ColumnTypes.kt | 5 ++++- .../com/github/jasync/sql/db/mysql/QuerySpec.kt | 16 +++++++--------- .../sql/db/mysql/binary/BinaryRowDecoderSpec.kt | 2 +- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/mysql-async/src/main/java/com/github/jasync/sql/db/mysql/codec/DecoderRegistry.kt b/mysql-async/src/main/java/com/github/jasync/sql/db/mysql/codec/DecoderRegistry.kt index fbdf49a3..b25372ca 100644 --- a/mysql-async/src/main/java/com/github/jasync/sql/db/mysql/codec/DecoderRegistry.kt +++ b/mysql-async/src/main/java/com/github/jasync/sql/db/mysql/codec/DecoderRegistry.kt @@ -40,6 +40,7 @@ class DecoderRegistry(charset: Charset) { return when (columnType) { ColumnTypes.FIELD_TYPE_VARCHAR, + ColumnTypes.FIELD_TYPE_JSON, ColumnTypes.FIELD_TYPE_ENUM -> this.stringDecoder ColumnTypes.FIELD_TYPE_BLOB, ColumnTypes.FIELD_TYPE_LONG_BLOB, diff --git a/mysql-async/src/main/java/com/github/jasync/sql/db/mysql/column/ColumnTypes.kt b/mysql-async/src/main/java/com/github/jasync/sql/db/mysql/column/ColumnTypes.kt index ab740e0b..d3b0b772 100644 --- a/mysql-async/src/main/java/com/github/jasync/sql/db/mysql/column/ColumnTypes.kt +++ b/mysql-async/src/main/java/com/github/jasync/sql/db/mysql/column/ColumnTypes.kt @@ -58,6 +58,8 @@ object ColumnTypes { val FIELD_TYPE_YEAR = 13 + val FIELD_TYPE_JSON = 245 + val Mapping = mapOf( FIELD_TYPE_BIT to "bit", FIELD_TYPE_BLOB to "blob", @@ -86,7 +88,8 @@ object ColumnTypes { FIELD_TYPE_TINY_BLOB to "tiny_blob", FIELD_TYPE_VAR_STRING to "var_string", FIELD_TYPE_VARCHAR to "varchar", - FIELD_TYPE_YEAR to "year" + FIELD_TYPE_YEAR to "year", + FIELD_TYPE_JSON to "json" ) } diff --git a/mysql-async/src/test/java/com/github/jasync/sql/db/mysql/QuerySpec.kt b/mysql-async/src/test/java/com/github/jasync/sql/db/mysql/QuerySpec.kt index af76fbc7..b4963311 100644 --- a/mysql-async/src/test/java/com/github/jasync/sql/db/mysql/QuerySpec.kt +++ b/mysql-async/src/test/java/com/github/jasync/sql/db/mysql/QuerySpec.kt @@ -273,24 +273,22 @@ class QuerySpec : ConnectionHelper() { } @Test - fun `"connection" should "select from a large text column" `() { + fun `"connection" should "select from a json column" `() { - val create = "create temporary table bombs (id char(4), bomb mediumtext character set ascii)" + val create = "create temporary table jsons (id char(4), data json)" - val insert = """ insert bombs values - | ('bomb', repeat(' ',65536+16384+8192+4096+2048+1024+512+256+128)), - | ('good', repeat(' ',65536+16384+8192+4096+2048+1024+512+256+128-1))""".trimMargin("|") + val insert = """ insert jsons values + | ('json', '{"a": 1}')""".trimMargin("|") withConnection { connection -> executeQuery(connection, create) executeQuery(connection, insert) - val result = executeQuery(connection, "select bomb from bombs").rows + val result = executeQuery(connection, "select data from jsons").rows - assertThat(result.size).isEqualTo(2) + assertThat(result.size).isEqualTo(1) - assertThat((result(0)("bomb") as String).length).isEqualTo(98176) - assertThat((result(1)("bomb") as String).length).isEqualTo(98175) + assertThat((result(0)("data"))).isEqualTo("""{"a": 1}""") } } diff --git a/mysql-async/src/test/java/com/github/jasync/sql/db/mysql/binary/BinaryRowDecoderSpec.kt b/mysql-async/src/test/java/com/github/jasync/sql/db/mysql/binary/BinaryRowDecoderSpec.kt index 57fd965f..9544015a 100644 --- a/mysql-async/src/test/java/com/github/jasync/sql/db/mysql/binary/BinaryRowDecoderSpec.kt +++ b/mysql-async/src/test/java/com/github/jasync/sql/db/mysql/binary/BinaryRowDecoderSpec.kt @@ -53,7 +53,7 @@ class BinaryRowDecoderSpec { } - fun createColumn(name: String, columnType: Int): ColumnDefinitionMessage { + private fun createColumn(name: String, columnType: Int): ColumnDefinitionMessage { return ColumnDefinitionMessage( "root", "root",