You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@turbine.apache.org by fe...@apache.org on 2001/08/15 07:10:37 UTC
cvs commit: jakarta-turbine/src/java/org/apache/turbine/util/db/adapter DBMSSQL7.java DB.java
fedor 01/08/14 22:10:37
Modified: src/java/org/apache/turbine/om/peer Tag: T_2_1_BRANCH
BasePeer.java
src/java/org/apache/turbine/util/db Tag: T_2_1_BRANCH
Query.java
src/java/org/apache/turbine/util/db/adapter Tag:
T_2_1_BRANCH DB.java
Added: src/java/org/apache/turbine/util/db/adapter Tag:
T_2_1_BRANCH DBMSSQL7.java
Log:
limit fixes. also adds MSSQL7 adapter. these are not in the HEAD.
Revision Changes Path
No revision
No revision
1.58.4.9 +39 -51 jakarta-turbine/src/java/org/apache/turbine/om/peer/Attic/BasePeer.java
Index: BasePeer.java
===================================================================
RCS file: /home/cvs/jakarta-turbine/src/java/org/apache/turbine/om/peer/Attic/BasePeer.java,v
retrieving revision 1.58.4.8
retrieving revision 1.58.4.9
diff -u -r1.58.4.8 -r1.58.4.9
--- BasePeer.java 2001/07/28 01:40:20 1.58.4.8
+++ BasePeer.java 2001/08/15 05:10:37 1.58.4.9
@@ -111,7 +111,7 @@
* @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
* @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
* @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @version $Id: BasePeer.java,v 1.58.4.8 2001/07/28 01:40:20 mpoeschl Exp $
+ * @version $Id: BasePeer.java,v 1.58.4.9 2001/08/15 05:10:37 fedor Exp $
*/
public abstract class BasePeer
{
@@ -1051,45 +1051,8 @@
}
}
- // Limit the number of rows returned.
- int limit = criteria.getLimit();
- int offset = criteria.getOffset();
- String limitString = null;
- if ( offset > 0 && db.supportsNativeOffset() )
- {
- switch(db.getLimitStyle())
- {
- case DB.LIMIT_STYLE_MYSQL:
- limitString = new StringBuffer().append(offset)
- .append(", ")
- .append(limit)
- .toString();
- break;
- case DB.LIMIT_STYLE_POSTGRES:
- limitString = new StringBuffer().append(limit)
- .append(", ")
- .append(offset)
- .toString();
- break;
- }
+ setLimit(criteria, db, query);
- // Now set the criteria's limit and offset to return the
- // full resultset since the results are limited on the
- // server.
- criteria.setLimit(-1);
- criteria.setOffset(0);
- }
- else if (limit > 0 && db.supportsNativeLimit() )
- {
- limitString = String.valueOf(limit);
-
- // Now set the criteria's limit to return the full
- // resultset since the results are limited on the server.
- criteria.setLimit(-1);
- }
-
- if (limitString != null) query.setLimit(limitString);
-
String sql = query.toString();
TurbineLogging.getLogger(TurbineConstants.SQL_LOG_FACILITY).debug(sql);
return sql;
@@ -2145,10 +2108,21 @@
}
}
+ setLimit(criteria, db, query);
+
+ String sql = query.toString();
+ TurbineLogging.getLogger(TurbineConstants.SQL_LOG_FACILITY).debug(sql);
+ queryString.append (sql);
+ }
+
+ private static void setLimit(Criteria criteria, DB db, Query query)
+ {
// Limit the number of rows returned.
int limit = criteria.getLimit();
int offset = criteria.getOffset();
String limitString = null;
+ String topString = null;
+ String rcString = null;
if ( offset > 0 && db.supportsNativeOffset() )
{
switch(db.getLimitStyle())
@@ -2158,35 +2132,49 @@
.append(", ")
.append(limit)
.toString();
+
+ criteria.setLimit(-1);
break;
case DB.LIMIT_STYLE_POSTGRES:
limitString = new StringBuffer().append(limit)
.append(", ")
.append(offset)
.toString();
+
+ criteria.setLimit(-1);
break;
+ default: //for DBs which support limit but not offset
+ limit +=offset; //this needs to be implemented in the retrieval to skip records
+ throw new UnsupportedOperationException("non-native offset is not implemented");
}
-
- // Now set the criteria's limit and offset to return the
- // full resultset since the results are limited on the
- // server.
- criteria.setLimit(-1);
criteria.setOffset(0);
}
- else if (limit > 0 && db.supportsNativeLimit() )
+ if (limit > 0 && db.supportsNativeLimit() )
{
- limitString = String.valueOf(limit);
+ switch(db.getLimitStyle())
+ {
+ case DB.LIMIT_STYLE_MYSQL:
+ case DB.LIMIT_STYLE_POSTGRES:
+ limitString = String.valueOf(limit);
+ break;
+ case DB.LIMIT_STYLE_MSSQL7:
+ topString = String.valueOf(limit);
+ break;
+ case DB.LIMIT_STYLE_SYBASE:
+ rcString = String.valueOf(limit);
+ break;
+ default:
+ throw new UnsupportedOperationException("non-native limit is not implemented");
+ }
// Now set the criteria's limit to return the full
// resultset since the results are limited on the server.
criteria.setLimit(-1);
}
-
- if (limitString != null) query.setLimit(limitString);
- String sql = query.toString();
- TurbineLogging.getLogger(TurbineConstants.SQL_LOG_FACILITY).debug(sql);
- queryString.append (sql);
+ query.setLimit(limitString);
+ query.setRowcount(rcString);
+ query.setTop(topString);
}
}
No revision
No revision
1.4.10.2 +21 -3 jakarta-turbine/src/java/org/apache/turbine/util/db/Attic/Query.java
Index: Query.java
===================================================================
RCS file: /home/cvs/jakarta-turbine/src/java/org/apache/turbine/util/db/Attic/Query.java,v
retrieving revision 1.4.10.1
retrieving revision 1.4.10.2
diff -u -r1.4.10.1 -r1.4.10.2
--- Query.java 2001/05/07 03:06:40 1.4.10.1
+++ Query.java 2001/08/15 05:10:37 1.4.10.2
@@ -64,7 +64,7 @@
* is used primarily by BasePeer.
*
* @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @version $Id: Query.java,v 1.4.10.1 2001/05/07 03:06:40 jvanzyl Exp $
+ * @version $Id: Query.java,v 1.4.10.2 2001/08/15 05:10:37 fedor Exp $
*/
public class Query
{
@@ -78,7 +78,9 @@
private static final String BETWEEN = " BETWEEN ";
private static final String LIMIT = " LIMIT ";
private static final String ROWCOUNT = " SET ROWCOUNT ";
+ private static final String TOP = " TOP ";
+
private StringStackBuffer selectModifiers = new StringStackBuffer();
private StringStackBuffer selectColumns = new StringStackBuffer();
private StringStackBuffer fromTables = new StringStackBuffer();
@@ -87,6 +89,18 @@
private String limit;
private String rowcount;
+ public String getTop()
+ {
+ return top;
+ }
+
+ public void setTop(String top)
+ {
+ this.top = top;
+ }
+
+ private String top;
+
/**
* Retrieve the modifier buffer in order to add modifiers to this
* query. E.g. DISTINCT and ALL.
@@ -203,8 +217,12 @@
.append(rowcount)
.append(" ");
stmt.append(SELECT)
- .append(selectModifiers.toString(" "))
- .append(selectColumns.toString(", "))
+ .append(selectModifiers.toString(" "));
+ if ( top != null )
+ stmt.append(TOP)
+ .append(top)
+ .append(" ");
+ stmt.append(selectColumns.toString(", "))
.append(FROM)
.append(fromTables.toString(", "));
if ( !whereCriteria.empty() )
No revision
No revision
1.4.10.6 +4 -1 jakarta-turbine/src/java/org/apache/turbine/util/db/adapter/Attic/DB.java
Index: DB.java
===================================================================
RCS file: /home/cvs/jakarta-turbine/src/java/org/apache/turbine/util/db/adapter/Attic/DB.java,v
retrieving revision 1.4.10.5
retrieving revision 1.4.10.6
diff -u -r1.4.10.5 -r1.4.10.6
--- DB.java 2001/08/06 04:48:27 1.4.10.5
+++ DB.java 2001/08/15 05:10:37 1.4.10.6
@@ -100,7 +100,7 @@
*
* @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
* @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @version $Id: DB.java,v 1.4.10.5 2001/08/06 04:48:27 djpolito Exp $
+ * @version $Id: DB.java,v 1.4.10.6 2001/08/15 05:10:37 fedor Exp $
*/
public abstract class DB implements Serializable
{
@@ -127,6 +127,9 @@
/** SET ROWCOUNT <limit> SELECT ... SET ROWCOUNT 0 */
public static final int LIMIT_STYLE_SYBASE = 3;
+
+ /** SELECT TOP <limit> ... */
+ public static final int LIMIT_STYLE_MSSQL7 = 4;
/**
No revision
No revision
1.1.2.1 +87 -0 jakarta-turbine/src/java/org/apache/turbine/util/db/adapter/Attic/DBMSSQL7.java
---------------------------------------------------------------------
To unsubscribe, e-mail: turbine-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: turbine-dev-help@jakarta.apache.org