You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2026/07/14 07:10:58 UTC
(shardingsphere) branch master updated: Fix Oracle metadata version comparison for 18c and later (#39104)
This is an automated email from the ASF dual-hosted git repository.
terrymanu 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 f349d1f4315 Fix Oracle metadata version comparison for 18c and later (#39104)
f349d1f4315 is described below
commit f349d1f4315e39344b417757df75aa044b3886f5
Author: Eunbin Son <58...@users.noreply.github.com>
AuthorDate: Tue Jul 14 16:10:52 2026 +0900
Fix Oracle metadata version comparison for 18c and later (#39104)
---
RELEASE-NOTES.md | 1 +
.../oracle/metadata/data/loader/OracleMetaDataLoader.java | 9 +++++++--
.../oracle/metadata/data/loader/OracleMetaDataLoaderTest.java | 9 +++++----
3 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index 487a3a7b786..d9ab902c04a 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -40,6 +40,7 @@
1. Sharding: Compute the Snowflake key generator epoch in UTC instead of the JVM default timezone - [#38932](https://github.com/apache/shardingsphere/pull/38932)
1. Proxy: Fix MySQL BLOB data corruption when string-like prepared statement parameters target BLOB columns - [#39072](https://github.com/apache/shardingsphere/pull/39072)
1. Agent: Fix wrong target class name in StaticMethodAdviceExecutor error logs - [#39077](https://github.com/apache/shardingsphere/pull/39077)
+1. Metadata: Fix Oracle metadata version comparison skipping identity and collation columns on 18c and later - [#39104](https://github.com/apache/shardingsphere/pull/39104)
### Enhancements
diff --git a/database/connector/dialect/oracle/src/main/java/org/apache/shardingsphere/database/connector/oracle/metadata/data/loader/OracleMetaDataLoader.java b/database/connector/dialect/oracle/src/main/java/org/apache/shardingsphere/database/connector/oracle/metadata/data/loader/OracleMetaDataLoader.java
index 533a2c76819..744988e20b0 100644
--- a/database/connector/dialect/oracle/src/main/java/org/apache/shardingsphere/database/connector/oracle/metadata/data/loader/OracleMetaDataLoader.java
+++ b/database/connector/dialect/oracle/src/main/java/org/apache/shardingsphere/database/connector/oracle/metadata/data/loader/OracleMetaDataLoader.java
@@ -177,11 +177,16 @@ public final class OracleMetaDataLoader implements DialectMetaDataLoader {
}
private boolean versionContainsCollation(final DatabaseMetaData databaseMetaData) throws SQLException {
- return databaseMetaData.getDatabaseMajorVersion() >= COLLATION_START_MAJOR_VERSION && databaseMetaData.getDatabaseMinorVersion() >= COLLATION_START_MINOR_VERSION;
+ return isVersionAtLeast(databaseMetaData, COLLATION_START_MAJOR_VERSION, COLLATION_START_MINOR_VERSION);
}
private boolean versionContainsIdentityColumn(final DatabaseMetaData databaseMetaData) throws SQLException {
- return databaseMetaData.getDatabaseMajorVersion() >= COLLATION_START_MAJOR_VERSION && databaseMetaData.getDatabaseMinorVersion() >= IDENTITY_COLUMN_START_MINOR_VERSION;
+ return isVersionAtLeast(databaseMetaData, COLLATION_START_MAJOR_VERSION, IDENTITY_COLUMN_START_MINOR_VERSION);
+ }
+
+ private boolean isVersionAtLeast(final DatabaseMetaData databaseMetaData, final int major, final int minor) throws SQLException {
+ int majorVersion = databaseMetaData.getDatabaseMajorVersion();
+ return majorVersion > major || majorVersion == major && databaseMetaData.getDatabaseMinorVersion() >= minor;
}
private Map<String, Collection<IndexMetaData>> loadIndexMetaData(final Connection connection, final Collection<String> tableNames, final String schema) throws SQLException {
diff --git a/database/connector/dialect/oracle/src/test/java/org/apache/shardingsphere/database/connector/oracle/metadata/data/loader/OracleMetaDataLoaderTest.java b/database/connector/dialect/oracle/src/test/java/org/apache/shardingsphere/database/connector/oracle/metadata/data/loader/OracleMetaDataLoaderTest.java
index 3685a15b845..faf6159207d 100644
--- a/database/connector/dialect/oracle/src/test/java/org/apache/shardingsphere/database/connector/oracle/metadata/data/loader/OracleMetaDataLoaderTest.java
+++ b/database/connector/dialect/oracle/src/test/java/org/apache/shardingsphere/database/connector/oracle/metadata/data/loader/OracleMetaDataLoaderTest.java
@@ -221,18 +221,18 @@ class OracleMetaDataLoaderTest {
}
private String getTableMetaDataSQL(final int majorVersion, final int minorVersion) {
- if (majorVersion >= 12 && minorVersion >= 2) {
+ if (majorVersion > 12 || majorVersion == 12 && minorVersion >= 2) {
return ALL_TAB_COLUMNS_SQL_WITH_IDENTITY_AND_COLLATION;
}
- if (majorVersion >= 12 && minorVersion == 1) {
+ if (majorVersion == 12 && minorVersion == 1) {
return ALL_TAB_COLUMNS_SQL_WITH_IDENTITY;
}
return ALL_TAB_COLUMNS_SQL_WITHOUT_IDENTITY_AND_COLLATION;
}
private ColumnMetaData getExpectedFirstColumnMetaData(final int majorVersion, final int minorVersion, final boolean withPrimaryKey) {
- boolean generated = majorVersion >= 12 && minorVersion >= 1;
- boolean caseSensitive = majorVersion >= 12 && minorVersion >= 2;
+ boolean generated = majorVersion > 12 || majorVersion == 12 && minorVersion >= 1;
+ boolean caseSensitive = majorVersion > 12 || majorVersion == 12 && minorVersion >= 2;
return new ColumnMetaData("id", Types.NUMERIC, withPrimaryKey, generated, caseSensitive, true, false, false);
}
@@ -276,6 +276,7 @@ class OracleMetaDataLoaderTest {
Arguments.of("major12Minor2WithPrimaryKey", 12, 2, true, false),
Arguments.of("major12Minor1WithPrimaryKey", 12, 1, true, false),
Arguments.of("major11Minor2WithPrimaryKey", 11, 2, true, false),
+ Arguments.of("major19Minor0WithPrimaryKey", 19, 0, true, false),
Arguments.of("major12Minor2WithPrimaryKeyAndNullCollation", 12, 2, true, true));
}
}