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 580d8c8  Oracle load test (#11956)
580d8c8 is described below

commit 580d8c81fbd39a751333abb0bfe3a453cc6a77a9
Author: tuichenchuxin <[email protected]>
AuthorDate: Tue Aug 24 07:46:44 2021 +0800

    Oracle load test (#11956)
---
 .../loader/dialect/OracleTableMetaDataLoader.java  | 31 +++++++++++++--------
 .../dialect/OracleTableMetaDataLoaderTest.java     | 32 ++++++++++++++++------
 2 files changed, 43 insertions(+), 20 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 fb621a7..dab2d0b 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
@@ -76,11 +76,11 @@ public final class OracleTableMetaDataLoader implements 
DialectTableMetaDataLoad
         try (Connection connection = dataSource.getConnection(); 
PreparedStatement preparedStatement = 
connection.prepareStatement(getTableMetaDataSQL(tables, 
connection.getMetaData()))) {
             Map<String, Integer> dataTypes = 
DataTypeLoader.load(connection.getMetaData());
             Map<String, Collection<String>> tablePrimaryKeys = 
loadTablePrimaryKeys(connection, tables);
-            preparedStatement.setString(1, connection.getCatalog());
+            preparedStatement.setString(1, connection.getSchema());
             try (ResultSet resultSet = preparedStatement.executeQuery()) {
                 while (resultSet.next()) {
                     String tableName = resultSet.getString("TABLE_NAME");
-                    ColumnMetaData columnMetaData = 
loadColumnMetaData(dataTypes, resultSet, 
tablePrimaryKeys.getOrDefault(tableName, Collections.emptyList()));
+                    ColumnMetaData columnMetaData = 
loadColumnMetaData(dataTypes, resultSet, 
tablePrimaryKeys.getOrDefault(tableName, Collections.emptyList()), 
connection.getMetaData());
                     if (!result.containsKey(tableName)) {
                         result.put(tableName, new LinkedList<>());
                     }
@@ -91,24 +91,23 @@ public final class OracleTableMetaDataLoader implements 
DialectTableMetaDataLoad
         return result;
     }
     
-    private ColumnMetaData loadColumnMetaData(final Map<String, Integer> 
dataTypeMap, final ResultSet resultSet, final Collection<String> primaryKeys) 
throws SQLException {
+    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");
         boolean primaryKey = primaryKeys.contains(columnName);
-        boolean generated = 
"YES".equals(resultSet.getString("IDENTITY_COLUMN"));
-        String collationName = resultSet.getString("COLLATION");
-        boolean caseSensitive = null != collationName && 
collationName.endsWith("_CS");
+        boolean generated = versionContainsIdentityColumn(metaData) && 
"YES".equals(resultSet.getString("IDENTITY_COLUMN"));
+        // TODO need to support caseSensitive when version < 12.2.
+        boolean caseSensitive = versionContainsCollation(metaData) && 
resultSet.getString("COLLATION").endsWith("_CS");
         return new ColumnMetaData(columnName, dataTypeMap.get(dataType), 
primaryKey, generated, caseSensitive);
     }
     
     private String getTableMetaDataSQL(final Collection<String> tables, final 
DatabaseMetaData metaData) throws SQLException {
         StringBuilder stringBuilder = new StringBuilder(28);
-        int majorVersion = metaData.getDatabaseMajorVersion();
-        int minorVersion = metaData.getDatabaseMinorVersion();
-        if (majorVersion >= COLLATION_START_MAJOR_VERSION && minorVersion >= 
IDENTITY_COLUMN_START_MINOR_VERSION) {
+        if (versionContainsIdentityColumn(metaData)) {
             stringBuilder.append(", IDENTITY_COLUMN");
         }
-        if (majorVersion >= COLLATION_START_MAJOR_VERSION && minorVersion >= 
COLLATION_START_MINOR_VERSION) {
+        if (versionContainsCollation(metaData)) {
             stringBuilder.append(", COLLATION");
         }
         String collation = stringBuilder.toString();
@@ -116,10 +115,18 @@ public final class OracleTableMetaDataLoader implements 
DialectTableMetaDataLoad
                 : String.format(TABLE_META_DATA_SQL_IN_TABLES, collation, 
tables.stream().map(each -> String.format("'%s'", 
each)).collect(Collectors.joining(",")));
     }
     
+    private boolean versionContainsCollation(final DatabaseMetaData metaData) 
throws SQLException {
+        return metaData.getDatabaseMajorVersion() >= 
COLLATION_START_MAJOR_VERSION && metaData.getDatabaseMinorVersion() >= 
COLLATION_START_MINOR_VERSION;
+    }
+    
+    private boolean versionContainsIdentityColumn(final DatabaseMetaData 
metaData) throws SQLException {
+        return metaData.getDatabaseMajorVersion() >= 
COLLATION_START_MAJOR_VERSION && metaData.getDatabaseMinorVersion() >= 
IDENTITY_COLUMN_START_MINOR_VERSION;
+    }
+    
     private Map<String, Collection<IndexMetaData>> loadIndexMetaData(final 
DataSource dataSource, final Collection<String> tableNames) throws SQLException 
{
         Map<String, Collection<IndexMetaData>> result = new HashMap<>();
         try (Connection connection = dataSource.getConnection(); 
PreparedStatement preparedStatement = 
connection.prepareStatement(getIndexMetaDataSQL(tableNames))) {
-            preparedStatement.setString(1, connection.getCatalog());
+            preparedStatement.setString(1, connection.getSchema());
             try (ResultSet resultSet = preparedStatement.executeQuery()) {
                 while (resultSet.next()) {
                     String indexName = resultSet.getString("INDEX_NAME");
@@ -141,7 +148,7 @@ public final class OracleTableMetaDataLoader implements 
DialectTableMetaDataLoad
     private Map<String, Collection<String>> loadTablePrimaryKeys(final 
Connection connection, final Collection<String> tableNames) throws SQLException 
{
         Map<String, Collection<String>> result = new HashMap<>();
         try (PreparedStatement preparedStatement = 
connection.prepareStatement(getPrimaryKeyMetaDataSQL(tableNames))) {
-            preparedStatement.setString(1, connection.getCatalog());
+            preparedStatement.setString(1, connection.getSchema());
             try (ResultSet resultSet = preparedStatement.executeQuery()) {
                 while (resultSet.next()) {
                     String columnName = resultSet.getString("COLUMN_NAME");
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 1790e0c..a1d1991 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
@@ -87,7 +87,10 @@ public final class OracleTableMetaDataLoaderTest {
         
when(dataSource.getConnection().prepareStatement(ALL_CONSTRAINTS_SQL_WITHOUT_TABLES).executeQuery()).thenReturn(primaryKeys);
         
when(dataSource.getConnection().getMetaData().getDatabaseMajorVersion()).thenReturn(12);
         
when(dataSource.getConnection().getMetaData().getDatabaseMinorVersion()).thenReturn(2);
-        assertTableMetaDataMap(getTableMetaDataLoader().load(dataSource, 
Collections.emptyList()));
+        Map<String, TableMetaData> actual = 
getTableMetaDataLoader().load(dataSource, Collections.emptyList());
+        assertTableMetaDataMap(actual);
+        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)));
     }
     
     @Test
@@ -101,7 +104,10 @@ public final class OracleTableMetaDataLoaderTest {
         
when(dataSource.getConnection().prepareStatement(ALL_CONSTRAINTS_SQL_WITHOUT_TABLES).executeQuery()).thenReturn(primaryKeys);
         
when(dataSource.getConnection().getMetaData().getDatabaseMajorVersion()).thenReturn(12);
         
when(dataSource.getConnection().getMetaData().getDatabaseMinorVersion()).thenReturn(1);
-        assertTableMetaDataMap(getTableMetaDataLoader().load(dataSource, 
Collections.emptyList()));
+        Map<String, TableMetaData> actual = 
getTableMetaDataLoader().load(dataSource, Collections.emptyList());
+        assertTableMetaDataMap(actual);
+        assertThat(actual.get("tbl").getColumnMetaData(0), is(new 
ColumnMetaData("id", 4, true, true, false)));
+        assertThat(actual.get("tbl").getColumnMetaData(1), is(new 
ColumnMetaData("name", 12, false, false, false)));
     }
     
     @Test
@@ -115,7 +121,10 @@ public final class OracleTableMetaDataLoaderTest {
         
when(dataSource.getConnection().prepareStatement(ALL_CONSTRAINTS_SQL_WITHOUT_TABLES).executeQuery()).thenReturn(primaryKeys);
         
when(dataSource.getConnection().getMetaData().getDatabaseMajorVersion()).thenReturn(11);
         
when(dataSource.getConnection().getMetaData().getDatabaseMinorVersion()).thenReturn(2);
-        assertTableMetaDataMap(getTableMetaDataLoader().load(dataSource, 
Collections.emptyList()));
+        Map<String, TableMetaData> actual = 
getTableMetaDataLoader().load(dataSource, Collections.emptyList());
+        assertTableMetaDataMap(actual);
+        assertThat(actual.get("tbl").getColumnMetaData(0), is(new 
ColumnMetaData("id", 4, true, false, false)));
+        assertThat(actual.get("tbl").getColumnMetaData(1), is(new 
ColumnMetaData("name", 12, false, false, false)));
     }
     
     @Test
@@ -129,7 +138,10 @@ public final class OracleTableMetaDataLoaderTest {
         
when(dataSource.getConnection().prepareStatement(ALL_CONSTRAINTS_SQL_WITH_TABLES).executeQuery()).thenReturn(primaryKeys);
         
when(dataSource.getConnection().getMetaData().getDatabaseMajorVersion()).thenReturn(12);
         
when(dataSource.getConnection().getMetaData().getDatabaseMinorVersion()).thenReturn(2);
-        assertTableMetaDataMap(getTableMetaDataLoader().load(dataSource, 
Collections.singletonList("tbl")));
+        Map<String, TableMetaData> actual = 
getTableMetaDataLoader().load(dataSource, Collections.singleton("tbl"));
+        assertTableMetaDataMap(actual);
+        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)));
     }
     
     @Test
@@ -143,7 +155,10 @@ public final class OracleTableMetaDataLoaderTest {
         
when(dataSource.getConnection().prepareStatement(ALL_CONSTRAINTS_SQL_WITH_TABLES).executeQuery()).thenReturn(primaryKeys);
         
when(dataSource.getConnection().getMetaData().getDatabaseMajorVersion()).thenReturn(12);
         
when(dataSource.getConnection().getMetaData().getDatabaseMinorVersion()).thenReturn(1);
-        assertTableMetaDataMap(getTableMetaDataLoader().load(dataSource, 
Collections.singletonList("tbl")));
+        Map<String, TableMetaData> actual = 
getTableMetaDataLoader().load(dataSource, Collections.singleton("tbl"));
+        assertTableMetaDataMap(actual);
+        assertThat(actual.get("tbl").getColumnMetaData(0), is(new 
ColumnMetaData("id", 4, true, true, false)));
+        assertThat(actual.get("tbl").getColumnMetaData(1), is(new 
ColumnMetaData("name", 12, false, false, false)));
     }
     
     @Test
@@ -157,7 +172,10 @@ public final class OracleTableMetaDataLoaderTest {
         
when(dataSource.getConnection().prepareStatement(ALL_CONSTRAINTS_SQL_WITH_TABLES).executeQuery()).thenReturn(primaryKeys);
         
when(dataSource.getConnection().getMetaData().getDatabaseMajorVersion()).thenReturn(11);
         
when(dataSource.getConnection().getMetaData().getDatabaseMinorVersion()).thenReturn(2);
-        assertTableMetaDataMap(getTableMetaDataLoader().load(dataSource, 
Collections.singletonList("tbl")));
+        Map<String, TableMetaData> actual = 
getTableMetaDataLoader().load(dataSource, Collections.singleton("tbl"));
+        assertTableMetaDataMap(actual);
+        assertThat(actual.get("tbl").getColumnMetaData(0), is(new 
ColumnMetaData("id", 4, true, false, false)));
+        assertThat(actual.get("tbl").getColumnMetaData(1), is(new 
ColumnMetaData("name", 12, false, false, false)));
     }
     
     private DataSource mockDataSource() throws SQLException {
@@ -214,8 +232,6 @@ 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").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").getIndexes().size(), is(1));
         assertThat(actual.get("tbl").getIndexes().get("id"), is(new 
IndexMetaData("id")));
     }

Reply via email to