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