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 <[email protected]> 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);
