You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2021/10/09 10:39:52 UTC

[shardingsphere] branch master updated: Support GEOMETRY data type for mysql (#12965)

This is an automated email from the ASF dual-hosted git repository.

zhangliang 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 78287e2  Support GEOMETRY data type for mysql (#12965)
78287e2 is described below

commit 78287e285a89dba23c624b40921f6f59ddb5ab7a
Author: zhaojinchao <33...@users.noreply.github.com>
AuthorDate: Sat Oct 9 18:39:09 2021 +0800

    Support GEOMETRY data type for mysql (#12965)
    
    * Support GEOMETRY data type
    
    * update
---
 .../builder/loader/common/ColumnMetaDataLoader.java   |  2 --
 .../loader/dialect/MySQLTableMetaDataLoader.java      |  8 +++++++-
 .../loader/dialect/MySQLTableMetaDataLoaderTest.java  | 19 ++++++++++---------
 3 files changed, 17 insertions(+), 12 deletions(-)

diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/common/ColumnMetaDataLoader.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/common/ColumnMetaDataLoader.java
index aa87fe5..91f0d25 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/common/ColumnMetaDataLoader.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/common/ColumnMetaDataLoader.java
@@ -43,8 +43,6 @@ public final class ColumnMetaDataLoader {
     
     private static final String DATA_TYPE = "DATA_TYPE";
     
-    private static final String TYPE_NAME = "TYPE_NAME";
-    
     private static final String TABLE_NAME = "TABLE_NAME";
     
     /**
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 d2fd7aa..e78fb6d 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
@@ -28,6 +28,7 @@ import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.sql.Types;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -70,7 +71,7 @@ public final class MySQLTableMetaDataLoader implements DialectTableMetaDataLoade
                 Connection connection = dataSource.getConnection();
                 PreparedStatement preparedStatement = connection.prepareStatement(getTableMetaDataSQL(tables))) {
             Map<String, Integer> dataTypes = DataTypeLoader.load(connection.getMetaData());
-            dataTypes.putIfAbsent("JSON", -1);
+            appendDataTypes(dataTypes);
             preparedStatement.setString(1, connection.getCatalog());
             try (ResultSet resultSet = preparedStatement.executeQuery()) {
                 while (resultSet.next()) {
@@ -86,6 +87,11 @@ public final class MySQLTableMetaDataLoader implements DialectTableMetaDataLoade
         return result;
     }
     
+    private void appendDataTypes(final Map<String, Integer> dataTypes) {
+        dataTypes.putIfAbsent("JSON", Types.LONGVARCHAR);
+        dataTypes.putIfAbsent("GEOMETRY", Types.BINARY);
+    }
+    
     private ColumnMetaData loadColumnMetaData(final Map<String, Integer> dataTypeMap, final ResultSet resultSet) throws SQLException {
         String columnName = resultSet.getString("COLUMN_NAME");
         String dataType = resultSet.getString("DATA_TYPE");
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 d89e2b3..0be6daa 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
@@ -81,20 +81,20 @@ public final class MySQLTableMetaDataLoaderTest {
     
     private ResultSet mockTypeInfoResultSet() throws SQLException {
         ResultSet result = mock(ResultSet.class);
-        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);
+        when(result.next()).thenReturn(true, true, true, true, false);
+        when(result.getString("TYPE_NAME")).thenReturn("int", "varchar", "json", "geometry");
+        when(result.getInt("DATA_TYPE")).thenReturn(4, 12, -1, -2);
         return result;
     }
 
     private ResultSet mockTableMetaDataResultSet() throws SQLException {
         ResultSet result = mock(ResultSet.class);
-        when(result.next()).thenReturn(true, true, true, false);
+        when(result.next()).thenReturn(true, true, true, true, false);
         when(result.getString("TABLE_NAME")).thenReturn("tbl");
-        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("COLUMN_NAME")).thenReturn("id", "name", "doc", "geo");
+        when(result.getString("DATA_TYPE")).thenReturn("int", "varchar", "json", "geometry");
+        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;
     }
@@ -118,10 +118,11 @@ public final class MySQLTableMetaDataLoaderTest {
 
     private void assertTableMetaDataMap(final Map<String, TableMetaData> actual) {
         assertThat(actual.size(), is(1));
-        assertThat(actual.get("tbl").getColumns().size(), is(3));
+        assertThat(actual.get("tbl").getColumns().size(), is(4));
         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").getColumnMetaData(3), is(new ColumnMetaData("geo", -2, false, false, false)));
         assertThat(actual.get("tbl").getIndexes().size(), is(1));
         assertThat(actual.get("tbl").getIndexes().get("id"), is(new IndexMetaData("id")));
     }