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/08/23 23:47:25 UTC
[shardingsphere] branch master updated: Oracle load test (#11956)
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 <86...@users.noreply.github.com>
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")));
}