Author: aadamchik
Date: Sun Oct 19 04:45:50 2008
New Revision: 705983

URL: http://svn.apache.org/viewvc?rev=705983&view=rev
Log:
CAY-1110 fetchLimit + DistinctResultIterator = fewer rows in the result

fixing LIMIT clause on all previously untested DBs

Modified:
    
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseSelectTranslator.java
    
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLSelectTranslator.java
    
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLSelectTranslator.java
    
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/openbase/OpenBaseSelectTranslator.java
    
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleSelectTranslator.java
    
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresSelectTranslator.java

Modified: 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseSelectTranslator.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseSelectTranslator.java?rev=705983&r1=705982&r2=705983&view=diff
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseSelectTranslator.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseSelectTranslator.java
 Sun Oct 19 04:45:50 2008
@@ -33,13 +33,15 @@
     public String createSqlString() throws Exception {
         String sql = super.createSqlString();
 
-        // limit results
-        int limit = 
getQuery().getMetaData(getEntityResolver()).getFetchLimit();
-        if (limit > 0 && sql.startsWith(SELECT_PREFIX)) {
-            return SELECT_PREFIX
-                    + " TOP "
-                    + limit
-                    + sql.substring(SELECT_PREFIX.length());
+        if (!isSuppressingDistinct()) {
+            // limit results
+            int limit = 
getQuery().getMetaData(getEntityResolver()).getFetchLimit();
+            if (limit > 0 && sql.startsWith(SELECT_PREFIX)) {
+                return SELECT_PREFIX
+                        + " TOP "
+                        + limit
+                        + sql.substring(SELECT_PREFIX.length());
+            }
         }
 
         return sql;

Modified: 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLSelectTranslator.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLSelectTranslator.java?rev=705983&r1=705982&r2=705983&view=diff
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLSelectTranslator.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLSelectTranslator.java
 Sun Oct 19 04:45:50 2008
@@ -31,18 +31,19 @@
     @Override
     public String createSqlString() throws Exception {
         String sql = super.createSqlString();
-        QueryMetadata metadata = getQuery().getMetaData(getEntityResolver());
-        if(!isSuppressingDistinct()){
+
+        if (!isSuppressingDistinct()) {
             // limit results
+            QueryMetadata metadata = 
getQuery().getMetaData(getEntityResolver());
             int offset = metadata.getFetchOffset();
             int limit = metadata.getFetchLimit();
-            
+
             if (offset > 0 || limit > 0) {
                 sql += " LIMIT ";
                 if (limit == 0) {
                     limit = Integer.MAX_VALUE;
                 }
-                sql += limit + " OFFSET " +  offset; 
+                sql += limit + " OFFSET " + offset;
             }
         }
         return sql;

Modified: 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLSelectTranslator.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLSelectTranslator.java?rev=705983&r1=705982&r2=705983&view=diff
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLSelectTranslator.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLSelectTranslator.java
 Sun Oct 19 04:45:50 2008
@@ -31,18 +31,20 @@
     @Override
     public String createSqlString() throws Exception {
         String sql = super.createSqlString();
-        QueryMetadata metadata = getQuery().getMetaData(getEntityResolver());
-        
-        // limit results
-        int offset = metadata.getFetchOffset();
-        int limit = metadata.getFetchLimit();
-        
-        if (offset > 0 || limit > 0) {
-            sql += " LIMIT ";
-            if (limit == 0) {
-                limit = Integer.MAX_VALUE;
+
+        if (!isSuppressingDistinct()) {
+            // limit results
+            QueryMetadata metadata = 
getQuery().getMetaData(getEntityResolver());
+            int offset = metadata.getFetchOffset();
+            int limit = metadata.getFetchLimit();
+
+            if (offset > 0 || limit > 0) {
+                sql += " LIMIT ";
+                if (limit == 0) {
+                    limit = Integer.MAX_VALUE;
+                }
+                sql += limit + " OFFSET " + offset;
             }
-            sql += limit + " OFFSET " +  offset; 
         }
         return sql;
     }

Modified: 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/openbase/OpenBaseSelectTranslator.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/openbase/OpenBaseSelectTranslator.java?rev=705983&r1=705982&r2=705983&view=diff
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/openbase/OpenBaseSelectTranslator.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/openbase/OpenBaseSelectTranslator.java
 Sun Oct 19 04:45:50 2008
@@ -32,15 +32,17 @@
     protected JoinStack createJoinStack() {
         return new OpenBaseJoinStack();
     }
-    
+
     @Override
     public String createSqlString() throws Exception {
         String sql = super.createSqlString();
 
-        // limit results
-        int limit = 
getQuery().getMetaData(getEntityResolver()).getFetchLimit();
-        if (limit > 0) {
-            return sql + " RETURN RESULTS " + limit;
+        if (!isSuppressingDistinct()) {
+            // limit results
+            int limit = 
getQuery().getMetaData(getEntityResolver()).getFetchLimit();
+            if (limit > 0) {
+                return sql + " RETURN RESULTS " + limit;
+            }
         }
 
         return sql;

Modified: 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleSelectTranslator.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleSelectTranslator.java?rev=705983&r1=705982&r2=705983&view=diff
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleSelectTranslator.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleSelectTranslator.java
 Sun Oct 19 04:45:50 2008
@@ -37,15 +37,23 @@
 
         String sqlString = super.createSqlString();
 
-        QueryMetadata info = getQuery().getMetaData(getEntityResolver());
-        if (info.getFetchLimit() > 0 || info.getFetchOffset() > 0) {
-            int max = (info.getFetchLimit() == 0)? Integer.MAX_VALUE : 
(info.getFetchLimit() + info.getFetchOffset());
-            
-            sqlString = "select * " + 
-            "from ( select " +
-                    "tid.*, ROWNUM rnum " + 
-                        "from (" + sqlString +  ") tid " + 
-                        "where ROWNUM <=" + max + ") where rnum  > " + 
info.getFetchOffset(); 
+        if (!isSuppressingDistinct()) {
+            QueryMetadata info = getQuery().getMetaData(getEntityResolver());
+            if (info.getFetchLimit() > 0 || info.getFetchOffset() > 0) {
+                int max = (info.getFetchLimit() == 0) ? Integer.MAX_VALUE : 
(info
+                        .getFetchLimit() + info.getFetchOffset());
+
+                sqlString = "select * "
+                        + "from ( select "
+                        + "tid.*, ROWNUM rnum "
+                        + "from ("
+                        + sqlString
+                        + ") tid "
+                        + "where ROWNUM <="
+                        + max
+                        + ") where rnum  > "
+                        + info.getFetchOffset();
+            }
         }
 
         return sqlString;

Modified: 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresSelectTranslator.java
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresSelectTranslator.java?rev=705983&r1=705982&r2=705983&view=diff
==============================================================================
--- 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresSelectTranslator.java
 (original)
+++ 
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresSelectTranslator.java
 Sun Oct 19 04:45:50 2008
@@ -31,18 +31,21 @@
     @Override
     public String createSqlString() throws Exception {
         String sql = super.createSqlString();
-        QueryMetadata metadata = getQuery().getMetaData(getEntityResolver());
 
-        // limit results
-        int offset = metadata.getFetchOffset();
-        int limit = metadata.getFetchLimit();
+        if (!isSuppressingDistinct()) {
+            QueryMetadata metadata = 
getQuery().getMetaData(getEntityResolver());
 
-        if (limit > 0) {
-            sql += " LIMIT " + limit;
-        }
-        
-        if (offset > 0) {
-            sql += " OFFSET " + offset;
+            // limit results
+            int offset = metadata.getFetchOffset();
+            int limit = metadata.getFetchLimit();
+
+            if (limit > 0) {
+                sql += " LIMIT " + limit;
+            }
+
+            if (offset > 0) {
+                sql += " OFFSET " + offset;
+            }
         }
         return sql;
     }


Reply via email to