This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 00213e5 Add mysql data type with json (#11414)
00213e5 is described below
commit 00213e5038f137909de409519f7445d5f7b95fd8
Author: zhaojinchao <[email protected]>
AuthorDate: Wed Jul 21 09:59:32 2021 +0800
Add mysql data type with json (#11414)
* add mysql data type
* add ut for json data type
---
.../loader/dialect/MySQLTableMetaDataLoader.java | 1 +
.../dialect/MySQLTableMetaDataLoaderTest.java | 29 +++++++++++-----------
2 files changed, 16 insertions(+), 14 deletions(-)
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/MySQLTableMetaDataLoader.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/MySQLTableMetaDataLoader.java
index 511adde..e3b684c 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/MySQLTableMetaDataLoader.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/MySQLTableMetaDataLoader.java
@@ -70,6 +70,7 @@ public final class MySQLTableMetaDataLoader implements
DialectTableMetaDataLoade
Connection connection = dataSource.getConnection();
PreparedStatement preparedStatement =
connection.prepareStatement(getTableMetaDataSQL(existedTables))) {
Map<String, Integer> dataTypes =
DataTypeLoader.load(connection.getMetaData());
+ dataTypes.putIfAbsent("JSON", -1);
preparedStatement.setString(1, connection.getCatalog());
try (ResultSet resultSet = preparedStatement.executeQuery()) {
while (resultSet.next()) {
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/MySQLTableMetaDataLoaderTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/MySQLTableMetaDataLoaderTest.java
index c359774..c997cc4 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/MySQLTableMetaDataLoaderTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/MySQLTableMetaDataLoaderTest.java
@@ -79,24 +79,24 @@ public final class MySQLTableMetaDataLoaderTest {
private ResultSet mockTypeInfoResultSet() throws SQLException {
ResultSet result = mock(ResultSet.class);
- when(result.next()).thenReturn(true, true, false);
- when(result.getString("TYPE_NAME")).thenReturn("int", "varchar");
- when(result.getInt("DATA_TYPE")).thenReturn(4, 12);
+ when(result.next()).thenReturn(true, true, true, false);
+ when(result.getString("TYPE_NAME")).thenReturn("int", "varchar",
"json");
+ when(result.getInt("DATA_TYPE")).thenReturn(4, 12, -1);
return result;
}
-
+
private ResultSet mockTableMetaDataResultSet() throws SQLException {
ResultSet result = mock(ResultSet.class);
- when(result.next()).thenReturn(true, true, false);
+ when(result.next()).thenReturn(true, true, true, false);
when(result.getString("TABLE_NAME")).thenReturn("tbl");
- when(result.getString("COLUMN_NAME")).thenReturn("id", "name");
- when(result.getString("DATA_TYPE")).thenReturn("int", "varchar");
- when(result.getString("COLUMN_KEY")).thenReturn("PRI", "");
- when(result.getString("EXTRA")).thenReturn("auto_increment", "");
- when(result.getString("COLLATION_NAME")).thenReturn("utf8",
"utf8_general_ci");
+ when(result.getString("COLUMN_NAME")).thenReturn("id", "name", "doc");
+ when(result.getString("DATA_TYPE")).thenReturn("int", "varchar",
"json");
+ when(result.getString("COLUMN_KEY")).thenReturn("PRI", "", "");
+ when(result.getString("EXTRA")).thenReturn("auto_increment", "", "");
+ when(result.getString("COLLATION_NAME")).thenReturn("utf8",
"utf8_general_ci", "utf8_general_ci");
return result;
}
-
+
private ResultSet mockIndexMetaDataResultSet() throws SQLException {
ResultSet result = mock(ResultSet.class);
when(result.next()).thenReturn(true, false);
@@ -104,7 +104,7 @@ public final class MySQLTableMetaDataLoaderTest {
when(result.getString("TABLE_NAME")).thenReturn("tbl");
return result;
}
-
+
private DialectTableMetaDataLoader getTableMetaDataLoader() {
for (DialectTableMetaDataLoader each :
ShardingSphereServiceLoader.getSingletonServiceInstances(DialectTableMetaDataLoader.class))
{
if ("MySQL".equals(each.getDatabaseType())) {
@@ -113,12 +113,13 @@ public final class MySQLTableMetaDataLoaderTest {
}
throw new IllegalStateException("Can not find
MySQLTableMetaDataLoader");
}
-
+
private void assertTableMetaDataMap(final Map<String, TableMetaData>
actual) {
assertThat(actual.size(), is(1));
- assertThat(actual.get("tbl").getColumns().size(), is(2));
+ assertThat(actual.get("tbl").getColumns().size(), is(3));
assertThat(actual.get("tbl").getColumnMetaData(0), is(new
ColumnMetaData("id", 4, true, true, true)));
assertThat(actual.get("tbl").getColumnMetaData(1), is(new
ColumnMetaData("name", 12, false, false, false)));
+ assertThat(actual.get("tbl").getColumnMetaData(2), is(new
ColumnMetaData("doc", -1, false, false, false)));
assertThat(actual.get("tbl").getIndexes().size(), is(1));
assertThat(actual.get("tbl").getIndexes().get("id"), is(new
IndexMetaData("id")));
}