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