You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2016/11/03 17:41:00 UTC
[2/4] cayenne git commit: Added SybaseSelectTranslator to handle
limits within the query
Added SybaseSelectTranslator to handle limits within the query
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/6b7a053a
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/6b7a053a
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/6b7a053a
Branch: refs/heads/master
Commit: 6b7a053a8c42a5d474434371842552f514351c98
Parents: a851bb6
Author: Lon Varscsak <lo...@gmail.com>
Authored: Wed Oct 26 14:28:45 2016 -0700
Committer: Lon Varscsak <lo...@gmail.com>
Committed: Wed Oct 26 14:48:18 2016 -0700
----------------------------------------------------------------------
.../dba/sybase/SybaseSelectTranslator.java | 34 ++++++++++++++++++++
1 file changed, 34 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/6b7a053a/cayenne-server/src/main/java/org/apache/cayenne/dba/sybase/SybaseSelectTranslator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/sybase/SybaseSelectTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/sybase/SybaseSelectTranslator.java
new file mode 100644
index 0000000..9361b29
--- /dev/null
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/sybase/SybaseSelectTranslator.java
@@ -0,0 +1,34 @@
+package org.apache.cayenne.dba.sybase;
+
+import org.apache.cayenne.access.translator.select.DefaultSelectTranslator;
+import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.map.EntityResolver;
+import org.apache.cayenne.query.Query;
+
+public class SybaseSelectTranslator extends DefaultSelectTranslator {
+ /**
+ * @since 4.0
+ */
+ public SybaseSelectTranslator(Query query, DbAdapter adapter, EntityResolver entityResolver) {
+ super(query, adapter, entityResolver);
+ }
+
+ @Override
+ protected void appendLimitAndOffsetClauses(StringBuilder buffer) {
+
+ int limit = queryMetadata.getFetchLimit();
+ int offset = queryMetadata.getFetchOffset();
+
+ if (limit > 0) {
+ String sql = buffer.toString();
+
+ // If contains distinct insert top limit after
+ if (sql.startsWith("SELECT DISTINCT ")) {
+ buffer.replace(0, 15, "SELECT DISTINCT TOP " + (offset + limit));
+
+ } else {
+ buffer.replace(0, 6, "SELECT TOP " + (offset + limit));
+ }
+ }
+ }
+}