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 61cd5522370 Support visible column for Oracle database. (#20225)
61cd5522370 is described below
commit 61cd5522370a5dc60612004934b5a5b8b2e41c03
Author: Zonglei Dong <[email protected]>
AuthorDate: Wed Aug 17 11:44:09 2022 +0800
Support visible column for Oracle database. (#20225)
---
.../loader/dialect/OracleSchemaMetaDataLoader.java | 16 ++++++++++---
.../dialect/OracleSchemaMetaDataLoaderTest.java | 27 +++++++++++-----------
2 files changed, 27 insertions(+), 16 deletions(-)
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/OracleSchemaMetaDataLoader.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/OracleSchemaMetaDataLoader.java
index 8d01838fec5..2e5156168d5 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/OracleSchemaMetaDataLoader.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/OracleSchemaMetaDataLoader.java
@@ -47,7 +47,7 @@ import java.util.stream.Collectors;
*/
public final class OracleSchemaMetaDataLoader implements
DialectSchemaMetaDataLoader {
- private static final String TABLE_META_DATA_SQL_NO_ORDER = "SELECT OWNER
AS TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_ID %s FROM
ALL_TAB_COLUMNS WHERE OWNER = ?";
+ private static final String TABLE_META_DATA_SQL_NO_ORDER = "SELECT OWNER
AS TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_ID %s FROM
ALL_TAB_COLS WHERE OWNER = ?";
private static final String ORDER_BY_COLUMN_ID = " ORDER BY COLUMN_ID";
@@ -67,6 +67,8 @@ public final class OracleSchemaMetaDataLoader implements
DialectSchemaMetaDataLo
private static final int COLLATION_START_MINOR_VERSION = 2;
private static final int IDENTITY_COLUMN_START_MINOR_VERSION = 1;
+
+ private static final int HIDDEN_COLUMN_START_MINOR_VERSION = 1;
private static final int MAX_EXPRESSION_SIZE = 1000;
@@ -115,7 +117,8 @@ public final class OracleSchemaMetaDataLoader implements
DialectSchemaMetaDataLo
boolean generated = versionContainsIdentityColumn(databaseMetaData) &&
"YES".equals(resultSet.getString("IDENTITY_COLUMN"));
// TODO need to support caseSensitive when version < 12.2.
boolean caseSensitive = versionContainsCollation(databaseMetaData) &&
resultSet.getString("COLLATION").endsWith("_CS");
- return new ColumnMetaData(columnName, dataTypeMap.get(dataType),
primaryKey, generated, caseSensitive, true);
+ boolean isVisible = !(versionContainsHiddenColumn(databaseMetaData) &&
"YES".equals(resultSet.getString("HIDDEN_COLUMN")));
+ return new ColumnMetaData(columnName, dataTypeMap.get(dataType),
primaryKey, generated, caseSensitive, isVisible);
}
private String getOriginalDataType(final String dataType) {
@@ -127,7 +130,10 @@ public final class OracleSchemaMetaDataLoader implements
DialectSchemaMetaDataLo
}
private String getTableMetaDataSQL(final Collection<String> tables, final
DatabaseMetaData databaseMetaData) throws SQLException {
- StringBuilder stringBuilder = new StringBuilder(28);
+ StringBuilder stringBuilder = new StringBuilder(43);
+ if (versionContainsHiddenColumn(databaseMetaData)) {
+ stringBuilder.append(", HIDDEN_COLUMN");
+ }
if (versionContainsIdentityColumn(databaseMetaData)) {
stringBuilder.append(", IDENTITY_COLUMN");
}
@@ -138,6 +144,10 @@ public final class OracleSchemaMetaDataLoader implements
DialectSchemaMetaDataLo
return tables.isEmpty() ? String.format(TABLE_META_DATA_SQL, collation)
: String.format(TABLE_META_DATA_SQL_IN_TABLES, collation,
tables.stream().map(each -> String.format("'%s'",
each)).collect(Collectors.joining(",")));
}
+
+ private boolean versionContainsHiddenColumn(final DatabaseMetaData
databaseMetaData) throws SQLException {
+ return databaseMetaData.getDatabaseMajorVersion() >=
COLLATION_START_MAJOR_VERSION && databaseMetaData.getDatabaseMinorVersion() >=
HIDDEN_COLUMN_START_MINOR_VERSION;
+ }
private boolean versionContainsCollation(final DatabaseMetaData
databaseMetaData) throws SQLException {
return databaseMetaData.getDatabaseMajorVersion() >=
COLLATION_START_MAJOR_VERSION && databaseMetaData.getDatabaseMinorVersion() >=
COLLATION_START_MINOR_VERSION;
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/OracleSchemaMetaDataLoaderTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/OracleSchemaMetaDataLoaderTest.java
index d5c112758f1..b9c5aaba561 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/OracleSchemaMetaDataLoaderTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/dialect/OracleSchemaMetaDataLoaderTest.java
@@ -51,22 +51,22 @@ public final class OracleSchemaMetaDataLoaderTest {
private static final String ALL_INDEXES_SQL = "SELECT OWNER AS
TABLE_SCHEMA, TABLE_NAME, INDEX_NAME FROM ALL_INDEXES WHERE OWNER = ? AND
TABLE_NAME IN ('tbl')";
- private static final String ALL_TAB_COLUMNS_SQL_CONDITION1 = "SELECT OWNER
AS TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_ID ,
IDENTITY_COLUMN, COLLATION"
- + " FROM ALL_TAB_COLUMNS WHERE OWNER = ? AND TABLE_NAME IN ('tbl')
ORDER BY COLUMN_ID";
+ private static final String ALL_TAB_COLUMNS_SQL_CONDITION1 = "SELECT OWNER
AS TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_ID , HIDDEN_COLUMN,
IDENTITY_COLUMN, COLLATION"
+ + " FROM ALL_TAB_COLS WHERE OWNER = ? AND TABLE_NAME IN ('tbl')
ORDER BY COLUMN_ID";
- private static final String ALL_TAB_COLUMNS_SQL_CONDITION2 = "SELECT OWNER
AS TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_ID ,
IDENTITY_COLUMN FROM ALL_TAB_COLUMNS WHERE OWNER = ?"
- + " AND TABLE_NAME IN ('tbl') ORDER BY COLUMN_ID";
+ private static final String ALL_TAB_COLUMNS_SQL_CONDITION2 = "SELECT OWNER
AS TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_ID , HIDDEN_COLUMN,
IDENTITY_COLUMN"
+ + " FROM ALL_TAB_COLS WHERE OWNER = ? AND TABLE_NAME IN ('tbl')
ORDER BY COLUMN_ID";
- private static final String ALL_TAB_COLUMNS_SQL_CONDITION3 = "SELECT OWNER
AS TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_ID FROM
ALL_TAB_COLUMNS WHERE OWNER = ?"
+ private static final String ALL_TAB_COLUMNS_SQL_CONDITION3 = "SELECT OWNER
AS TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_ID FROM
ALL_TAB_COLS WHERE OWNER = ?"
+ " AND TABLE_NAME IN ('tbl') ORDER BY COLUMN_ID";
- private static final String ALL_TAB_COLUMNS_SQL_CONDITION4 = "SELECT OWNER
AS TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_ID ,
IDENTITY_COLUMN, COLLATION FROM ALL_TAB_COLUMNS"
- + " WHERE OWNER = ? AND TABLE_NAME IN ('tbl') ORDER BY COLUMN_ID";
+ private static final String ALL_TAB_COLUMNS_SQL_CONDITION4 = "SELECT OWNER
AS TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_ID , HIDDEN_COLUMN,
IDENTITY_COLUMN, COLLATION"
+ + " FROM ALL_TAB_COLS WHERE OWNER = ? AND TABLE_NAME IN ('tbl')
ORDER BY COLUMN_ID";
- private static final String ALL_TAB_COLUMNS_SQL_CONDITION5 = "SELECT OWNER
AS TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_ID ,
IDENTITY_COLUMN FROM ALL_TAB_COLUMNS"
+ private static final String ALL_TAB_COLUMNS_SQL_CONDITION5 = "SELECT OWNER
AS TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_ID , HIDDEN_COLUMN,
IDENTITY_COLUMN FROM ALL_TAB_COLS"
+ " WHERE OWNER = ? AND TABLE_NAME IN ('tbl') ORDER BY COLUMN_ID";
- private static final String ALL_TAB_COLUMNS_SQL_CONDITION6 = "SELECT OWNER
AS TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_ID FROM
ALL_TAB_COLUMNS"
+ private static final String ALL_TAB_COLUMNS_SQL_CONDITION6 = "SELECT OWNER
AS TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_ID FROM
ALL_TAB_COLS"
+ " WHERE OWNER = ? AND TABLE_NAME IN ('tbl') ORDER BY COLUMN_ID";
@Test
@@ -85,7 +85,7 @@ public final class OracleSchemaMetaDataLoaderTest {
TableMetaData actualTableMetaData =
actual.iterator().next().getTables().iterator().next();
Iterator<ColumnMetaData> columnsIterator =
actualTableMetaData.getColumns().iterator();
assertThat(columnsIterator.next(), is(new ColumnMetaData("id", 4,
false, true, true, true)));
- assertThat(columnsIterator.next(), is(new ColumnMetaData("name", 12,
false, false, false, true)));
+ assertThat(columnsIterator.next(), is(new ColumnMetaData("name", 12,
false, false, false, false)));
}
@Test
@@ -104,7 +104,7 @@ public final class OracleSchemaMetaDataLoaderTest {
TableMetaData actualTableMetaData =
actual.iterator().next().getTables().iterator().next();
Iterator<ColumnMetaData> columnsIterator =
actualTableMetaData.getColumns().iterator();
assertThat(columnsIterator.next(), is(new ColumnMetaData("id", 4,
false, true, false, true)));
- assertThat(columnsIterator.next(), is(new ColumnMetaData("name", 12,
false, false, false, true)));
+ assertThat(columnsIterator.next(), is(new ColumnMetaData("name", 12,
false, false, false, false)));
}
@Test
@@ -142,7 +142,7 @@ public final class OracleSchemaMetaDataLoaderTest {
TableMetaData actualTableMetaData =
actual.iterator().next().getTables().iterator().next();
Iterator<ColumnMetaData> columnsIterator =
actualTableMetaData.getColumns().iterator();
assertThat(columnsIterator.next(), is(new ColumnMetaData("id", 4,
true, true, true, true)));
- assertThat(columnsIterator.next(), is(new ColumnMetaData("name", 12,
false, false, false, true)));
+ assertThat(columnsIterator.next(), is(new ColumnMetaData("name", 12,
false, false, false, false)));
}
@Test
@@ -161,7 +161,7 @@ public final class OracleSchemaMetaDataLoaderTest {
TableMetaData actualTableMetaData =
actual.iterator().next().getTables().iterator().next();
Iterator<ColumnMetaData> columnsIterator =
actualTableMetaData.getColumns().iterator();
assertThat(columnsIterator.next(), is(new ColumnMetaData("id", 4,
true, true, false, true)));
- assertThat(columnsIterator.next(), is(new ColumnMetaData("name", 12,
false, false, false, true)));
+ assertThat(columnsIterator.next(), is(new ColumnMetaData("name", 12,
false, false, false, false)));
}
@Test
@@ -204,6 +204,7 @@ public final class OracleSchemaMetaDataLoaderTest {
when(result.getString("TABLE_NAME")).thenReturn("tbl");
when(result.getString("COLUMN_NAME")).thenReturn("id", "name",
"creation_time");
when(result.getString("DATA_TYPE")).thenReturn("int", "varchar",
"TIMESTAMP(6)");
+ when(result.getString("HIDDEN_COLUMN")).thenReturn("NO", "YES", "NO");
when(result.getString("IDENTITY_COLUMN")).thenReturn("YES", "NO",
"NO");
when(result.getString("COLLATION")).thenReturn("BINARY_CS",
"BINARY_CI", "BINARY_CI");
return result;