You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2021/02/25 12:21:50 UTC
[cayenne] 03/05: the TOP query is used for null db version
This is an automated email from the ASF dual-hosted git repository.
ntimofeev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit ed86e5d770867bf1c25c6462be1db7cdea510026
Author: andreykravchenko <an...@objectstyle.com>
AuthorDate: Wed Feb 10 17:26:39 2021 +0300
the TOP query is used for null db version
---
.../dba/sqlserver/SQLServerActionBuilder.java | 21 +++++++++++++++++++--
.../cayenne/dba/sqlserver/SQLServerAdapter.java | 6 ++++--
.../dba/sqlserver/SQLServerTreeProcessor.java | 2 +-
3 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerActionBuilder.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerActionBuilder.java
index f19a671..bd43ee9 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerActionBuilder.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerActionBuilder.java
@@ -29,6 +29,13 @@ import org.apache.cayenne.query.*;
public class SQLServerActionBuilder extends JdbcActionBuilder {
/**
+ * Stores the major version of the database.
+ *
+ * @since 4.2
+ */
+ private Integer version;
+
+ /**
* @since 4.0
*/
public SQLServerActionBuilder(DataNode dataNode) {
@@ -57,7 +64,8 @@ public class SQLServerActionBuilder extends JdbcActionBuilder {
*/
@Override
public <T> SQLAction objectSelectAction(SelectQuery<T> query) {
- if (query.getOrderings() == null || query.getOrderings().size() == 0) {
+ if (query.getOrderings() == null || query.getOrderings().size() == 0 ||
+ version == null || version < 12) {
return new SQLServerSelectAction(query, dataNode, true);
}
@@ -69,10 +77,19 @@ public class SQLServerActionBuilder extends JdbcActionBuilder {
*/
@Override
public <T> SQLAction objectSelectAction(FluentSelect<T> query) {
- if (query.getOrderings() == null || query.getOrderings().size() == 0) {
+ if (query.getOrderings() == null || query.getOrderings().size() == 0 ||
+ version == null || version < 12) {
return new SQLServerSelectAction(query, dataNode, true);
}
return new SQLServerSelectAction(query, dataNode, false);
}
+
+ public Integer getVersion() {
+ return version;
+ }
+
+ public void setVersion(Integer version) {
+ this.version = version;
+ }
}
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerAdapter.java
index 67871df..9805e0d 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerAdapter.java
@@ -81,7 +81,7 @@ public class SQLServerAdapter extends SybaseAdapter {
*
* @since 4.2
*/
- protected Integer version;
+ private Integer version;
/**
* @deprecated since 4.2 unused
@@ -130,7 +130,9 @@ public class SQLServerAdapter extends SybaseAdapter {
*/
@Override
public SQLAction getAction(Query query, DataNode node) {
- return query.createSQLAction(new SQLServerActionBuilder(node));
+ SQLServerActionBuilder sqlServerActionBuilder = new SQLServerActionBuilder(node);
+ sqlServerActionBuilder.setVersion(this.version);
+ return query.createSQLAction(sqlServerActionBuilder);
}
@Override
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerTreeProcessor.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerTreeProcessor.java
index c1c8c98..347da1f 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerTreeProcessor.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerTreeProcessor.java
@@ -38,7 +38,7 @@ public class SQLServerTreeProcessor extends SybaseSQLTreeProcessor {
@Override
protected void onLimitOffsetNode(Node parent, LimitOffsetNode child, int index) {
- if (version == null || version >= 12) {
+ if (version != null && version >= 12) {
for (int i = 0; i < parent.getChildrenCount(); i++) {
if (parent.getChild(i) instanceof OrderByNode) {
replaceChild(parent, index, new SQLServerLimitOffsetNode(child.getLimit(), child.getOffset()), false);