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));
+			}
+		}
+	}
+}