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

[shardingsphere] branch master updated: fix oracle load timestamp error. (#13334)

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 b7ef8d9  fix oracle load timestamp error. (#13334)
b7ef8d9 is described below

commit b7ef8d965be02d87267f07a6f759d49efbdac22f
Author: tuichenchuxin <86...@users.noreply.github.com>
AuthorDate: Fri Oct 29 09:51:43 2021 +0800

    fix oracle load timestamp error. (#13334)
    
    * fix oracle load timestamp error.
    
    * fix oracle load timestamp error.
---
 .../loader/dialect/OracleTableMetaDataLoader.java      | 10 +++++++++-
 .../loader/dialect/OracleTableMetaDataLoaderTest.java  | 18 +++++++++---------
 2 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/OracleTableMetaDataLoader.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/OracleTableMetaDataLoader.java
index 5b64375..e0dd58d 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/OracleTableMetaDataLoader.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/OracleTableMetaDataLoader.java
@@ -104,7 +104,7 @@ public final class OracleTableMetaDataLoader implements DialectTableMetaDataLoad
     private ColumnMetaData loadColumnMetaData(final Map<String, Integer> dataTypeMap, final ResultSet resultSet, final Collection<String> primaryKeys, final DatabaseMetaData metaData)
             throws SQLException {
         String columnName = resultSet.getString("COLUMN_NAME");
-        String dataType = resultSet.getString("DATA_TYPE");
+        String dataType = getOriginalDataType(resultSet.getString("DATA_TYPE"));
         boolean primaryKey = primaryKeys.contains(columnName);
         boolean generated = versionContainsIdentityColumn(metaData) && "YES".equals(resultSet.getString("IDENTITY_COLUMN"));
         // TODO need to support caseSensitive when version < 12.2.
@@ -112,6 +112,14 @@ public final class OracleTableMetaDataLoader implements DialectTableMetaDataLoad
         return new ColumnMetaData(columnName, dataTypeMap.get(dataType), primaryKey, generated, caseSensitive);
     }
     
+    private String getOriginalDataType(final String dataType) {
+        int index = dataType.indexOf("(");
+        if (index > 0) {
+            return dataType.substring(0, index);
+        }
+        return dataType;
+    }
+    
     private String getTableMetaDataSQL(final Collection<String> tables, final DatabaseMetaData metaData) throws SQLException {
         StringBuilder stringBuilder = new StringBuilder(28);
         if (versionContainsIdentityColumn(metaData)) {
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/OracleTableMetaDataLoaderTest.java b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/OracleTableMetaDataLoaderTest.java
index c1e35e3..3648e47 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/OracleTableMetaDataLoaderTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/builder/loader/dialect/OracleTableMetaDataLoaderTest.java
@@ -188,20 +188,20 @@ public final class OracleTableMetaDataLoaderTest {
     
     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", "TIMESTAMP");
+        when(result.getInt("DATA_TYPE")).thenReturn(4, 12, 93);
         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("IDENTITY_COLUMN")).thenReturn("YES", "NO");
-        when(result.getString("COLLATION")).thenReturn("BINARY_CS", "BINARY_CI");
+        when(result.getString("COLUMN_NAME")).thenReturn("id", "name", "creation_time");
+        when(result.getString("DATA_TYPE")).thenReturn("int", "varchar", "TIMESTAMP(6)");
+        when(result.getString("IDENTITY_COLUMN")).thenReturn("YES", "NO", "NO");
+        when(result.getString("COLLATION")).thenReturn("BINARY_CS", "BINARY_CI", "BINARY_CI");
         return result;
     }
     
@@ -232,7 +232,7 @@ public final class OracleTableMetaDataLoaderTest {
     
     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").getIndexes().size(), is(1));
         assertThat(actual.get("tbl").getIndexes().get("id"), is(new IndexMetaData("id")));
     }