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")));
}