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 2025/05/19 04:51:58 UTC
(shardingsphere) branch master updated: Add DialectPaginationOption.rowNumberColumnName (#35461)
This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 5f40ec2c2d7 Add DialectPaginationOption.rowNumberColumnName (#35461)
5f40ec2c2d7 is described below
commit 5f40ec2c2d797ff86311c65255bc33f000c105c3
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Mon May 19 12:51:53 2025 +0800
Add DialectPaginationOption.rowNumberColumnName (#35461)
* Fix sonar issues
* Add DialectPaginationOption.rowNumberColumnName
---
.../engine/RowNumberPaginationContextEngine.java | 34 ++++++++--------------
.../database/metadata/DialectDatabaseMetaData.java | 2 +-
.../option/pagination/DialectPaginationOption.java | 2 ++
.../metadata/database/OracleDatabaseMetaData.java | 2 +-
.../database/SQLServerDatabaseMetaData.java | 2 +-
5 files changed, 17 insertions(+), 25 deletions(-)
diff --git a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/pagination/engine/RowNumberPaginationContextEngine.java b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/pagination/engine/RowNumberPaginationContextEngine.java
index a60e5b08b55..f5d647fa0c7 100644
--- a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/pagination/engine/RowNumberPaginationContextEngine.java
+++ b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/pagination/engine/RowNumberPaginationContextEngine.java
@@ -17,12 +17,12 @@
package org.apache.shardingsphere.infra.binder.context.segment.select.pagination.engine;
-import com.cedarsoftware.util.CaseInsensitiveMap;
-import com.cedarsoftware.util.CaseInsensitiveSet;
-import lombok.RequiredArgsConstructor;
+import com.google.common.base.Strings;
import org.apache.shardingsphere.infra.binder.context.segment.select.pagination.PaginationContext;
import org.apache.shardingsphere.infra.binder.context.segment.select.projection.ProjectionsContext;
+import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.pagination.DialectPaginationOption;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
import org.apache.shardingsphere.sql.parser.statement.core.extractor.ExpressionExtractor;
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.BinaryOperationExpression;
@@ -37,27 +37,18 @@ import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.paginatio
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
-import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* Pagination context engine for row number.
*/
-@RequiredArgsConstructor
public final class RowNumberPaginationContextEngine {
- private static final Collection<String> ROW_NUMBER_IDENTIFIERS = new CaseInsensitiveSet<>(2, 1F);
+ private final DialectPaginationOption paginationOption;
- private static final Map<String, String> DATABASE_TYPE_ROW_NUMBER_IDENTIFIERS = new CaseInsensitiveMap<>(2, 1F);
-
- private final DatabaseType databaseType;
-
- static {
- ROW_NUMBER_IDENTIFIERS.add("ROWNUM");
- ROW_NUMBER_IDENTIFIERS.add("ROW_NUMBER");
- DATABASE_TYPE_ROW_NUMBER_IDENTIFIERS.put("Oracle", "ROWNUM");
- DATABASE_TYPE_ROW_NUMBER_IDENTIFIERS.put("SQLServer", "ROW_NUMBER");
+ public RowNumberPaginationContextEngine(final DatabaseType databaseType) {
+ paginationOption = new DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().getPaginationOption();
}
/**
@@ -89,13 +80,12 @@ public final class RowNumberPaginationContextEngine {
}
private Optional<String> findRowNumberAlias(final ProjectionsContext projectionsContext) {
- for (String each : ROW_NUMBER_IDENTIFIERS) {
- Optional<String> result = projectionsContext.findAlias(each);
- if (result.isPresent()) {
- return result;
- }
+ String rowNumberColumnName = paginationOption.getRowNumberColumnName();
+ if (Strings.isNullOrEmpty(rowNumberColumnName)) {
+ return Optional.empty();
}
- return Optional.ofNullable(DATABASE_TYPE_ROW_NUMBER_IDENTIFIERS.get(databaseType.getType()));
+ Optional<String> result = projectionsContext.findAlias(rowNumberColumnName);
+ return result.isPresent() ? result : Optional.of(rowNumberColumnName);
}
private boolean isRowNumberColumn(final ExpressionSegment predicate, final String rowNumberAlias) {
@@ -103,7 +93,7 @@ public final class RowNumberPaginationContextEngine {
ExpressionSegment left = ((BinaryOperationExpression) predicate).getLeft();
if (left instanceof ColumnSegment) {
String leftColumnValue = ((ColumnSegment) left).getIdentifier().getValue();
- return ROW_NUMBER_IDENTIFIERS.contains(leftColumnValue) || leftColumnValue.equalsIgnoreCase(rowNumberAlias);
+ return leftColumnValue.equalsIgnoreCase(paginationOption.getRowNumberColumnName()) || leftColumnValue.equalsIgnoreCase(rowNumberAlias);
}
return false;
}
diff --git a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/DialectDatabaseMetaData.java b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/DialectDatabaseMetaData.java
index c4b2d8c668d..c4b8eacb444 100644
--- a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/DialectDatabaseMetaData.java
+++ b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/DialectDatabaseMetaData.java
@@ -145,7 +145,7 @@ public interface DialectDatabaseMetaData extends DatabaseTypedSPI {
* @return pagination option
*/
default DialectPaginationOption getPaginationOption() {
- return new DialectPaginationOption(false);
+ return new DialectPaginationOption(false, "");
}
/**
diff --git a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/pagination/DialectPaginationOption.java b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/pagination/DialectPaginationOption.java
index 66f35fdc8d7..fea40c90a87 100644
--- a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/pagination/DialectPaginationOption.java
+++ b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/pagination/DialectPaginationOption.java
@@ -28,4 +28,6 @@ import lombok.RequiredArgsConstructor;
public final class DialectPaginationOption {
private final boolean containsRowNumber;
+
+ private final String rowNumberColumnName;
}
diff --git a/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/OracleDatabaseMetaData.java b/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/OracleDatabaseMetaData.java
index 1e69aba0c99..fe4a10333e7 100644
--- a/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/OracleDatabaseMetaData.java
+++ b/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/OracleDatabaseMetaData.java
@@ -74,7 +74,7 @@ public final class OracleDatabaseMetaData implements DialectDatabaseMetaData {
@Override
public DialectPaginationOption getPaginationOption() {
- return new DialectPaginationOption(true);
+ return new DialectPaginationOption(true, "ROWNUM");
}
@Override
diff --git a/infra/database/type/sqlserver/src/main/java/org/apache/shardingsphere/infra/database/sqlserver/metadata/database/SQLServerDatabaseMetaData.java b/infra/database/type/sqlserver/src/main/java/org/apache/shardingsphere/infra/database/sqlserver/metadata/database/SQLServerDatabaseMetaData.java
index bab95b769d3..2e7ffaf6787 100644
--- a/infra/database/type/sqlserver/src/main/java/org/apache/shardingsphere/infra/database/sqlserver/metadata/database/SQLServerDatabaseMetaData.java
+++ b/infra/database/type/sqlserver/src/main/java/org/apache/shardingsphere/infra/database/sqlserver/metadata/database/SQLServerDatabaseMetaData.java
@@ -55,7 +55,7 @@ public final class SQLServerDatabaseMetaData implements DialectDatabaseMetaData
@Override
public DialectPaginationOption getPaginationOption() {
- return new DialectPaginationOption(true);
+ return new DialectPaginationOption(true, "ROW_NUMBER");
}
@Override