dlr 02/03/17 23:59:03
Modified: src/java/org/apache/torque/adapter DB.java DBOracle.java
src/java/org/apache/torque/util BasePeer.java
Log:
Merged in patch by Bill Schneider <[EMAIL PROTECTED]> to improve
support for Oracle:
"Here goes -- this patch should take care of native limits on Oracle +
date formatting in Oracle adapter. Why not kill two birds with one
stone?"
Bill's patch included handling of native limits for Sybase, which I
commented out because it was not mentioned in his description, I have
no Sybase installation to test against, and the MS SQL adapter
subclasses from the Sybase adapter (making the change seem more
risky). I also cleaned up the date handling portion of the patch to
call a private method which I added to reduce code duplication.
Revision Changes Path
1.22 +4 -1
jakarta-turbine-torque/src/java/org/apache/torque/adapter/DB.java
Index: DB.java
===================================================================
RCS file:
/home/cvs/jakarta-turbine-torque/src/java/org/apache/torque/adapter/DB.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -u -r1.21 -r1.22
--- DB.java 18 Mar 2002 07:32:22 -0000 1.21
+++ DB.java 18 Mar 2002 07:59:02 -0000 1.22
@@ -90,7 +90,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Jon S. Stevens</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Brett McLaughlin</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Daniel Rall</a>
- * @version $Id: DB.java,v 1.21 2002/03/18 07:32:22 dlr Exp $
+ * @version $Id: DB.java,v 1.22 2002/03/18 07:59:02 dlr Exp $
*/
public abstract class DB implements Serializable, IDMethod
{
@@ -105,6 +105,9 @@
/** <code>SET ROWCOUNT <offset> SELECT ... SET ROWCOUNT 0</code> */
public static final int LIMIT_STYLE_SYBASE = 3;
+
+ /** <code><pre>SELECT ... WHERE ... AND ROWNUM < <limit></pre></code> */
+ public static final int LIMIT_STYLE_ORACLE = 4;
/** The database user name. */
protected String DB_USER;
1.10 +59 -23
jakarta-turbine-torque/src/java/org/apache/torque/adapter/DBOracle.java
Index: DBOracle.java
===================================================================
RCS file:
/home/cvs/jakarta-turbine-torque/src/java/org/apache/torque/adapter/DBOracle.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -u -r1.9 -r1.10
--- DBOracle.java 15 Mar 2002 21:47:45 -0000 1.9
+++ DBOracle.java 18 Mar 2002 07:59:02 -0000 1.10
@@ -55,6 +55,7 @@
*/
import java.util.Date;
+import java.text.SimpleDateFormat;
import java.lang.reflect.Method;
import java.sql.Connection;
@@ -69,11 +70,15 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Jon S. Stevens</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Brett McLaughlin</a>
- * @version $Id: DBOracle.java,v 1.9 2002/03/15 21:47:45 dlr Exp $
+ * @author <a href="mailto:[EMAIL PROTECTED]">Bill Schneider</a>
+ * @author <a href="mailto:[EMAIL PROTECTED]">Daniel Rall</a>
+ * @version $Id: DBOracle.java,v 1.10 2002/03/18 07:59:02 dlr Exp $
*/
public class DBOracle
extends DB
{
+ private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
+
/**
* Empty constructor.
*/
@@ -166,6 +171,28 @@
con.commit();
}
+ /**
+ * This method is used to check whether the database natively
+ * supports limiting the size of the resultset.
+ *
+ * @return True.
+ */
+ public boolean supportsNativeLimit()
+ {
+ return true;
+ }
+
+ /**
+ * This method is used to check whether the database supports
+ * limiting the size of the resultset.
+ *
+ * @return LIMIT_STYLE_ORACLE.
+ */
+ public int getLimitStyle()
+ {
+ return DB.LIMIT_STYLE_ORACLE;
+ }
+
public ConnectionPoolDataSource getConnectionPoolDataSource()
throws java.sql.SQLException
{
@@ -184,36 +211,34 @@
}
catch (Exception e)
{
- throw new
- SQLException("Could not create OracleConnectioPoolDataSource
object: " + e);
+ throw new SQLException
+ ("Could not create OracleConnectioPoolDataSource object: " + e);
}
}
- /**
- * This method is for the SqlExpression.quoteAndEscape rules. The rule is,
- * any string in a SqlExpression with a BACKSLASH will either be changed to
- * "\\" or left as "\". SapDB does not need the escape character.
- *
- * @return false.
- */
-
+ /**
+ * This method is for the SqlExpression.quoteAndEscape rules. The rule is,
+ * any string in a SqlExpression with a BACKSLASH will either be changed to
+ * "\\" or left as "\". SapDB does not need the escape character.
+ *
+ * @return false.
+ */
public boolean escapeText()
{
return false;
}
-
/**
- * This method is used to format any date string.
- * Database can use different default date formats.
+ * This method is used to format any date string using Oracle's
+ * <code>TO_DATE</code> built-in function.
*
- * @return The proper date formated String.
+ * @see org.apache.torque.adapter.DB#getDateString(String)
* @deprecated use getDateString(java.util.Date)
*/
- public String getDateString(String dateString)
- {
- return "TO_DATE('" + dateString + "', 'yyyy-mm-dd hh24:mi:ss..' )";
- }
+ public String getDateString(String dateString)
+ {
+ return formatDate(dateString);
+ }
/**
* This method is used to format any date string.
@@ -221,8 +246,19 @@
*
* @return The proper date formated String.
*/
- public String getDateString(Date date)
- {
- return "TO_DATE('" + date.toString() + "', 'yyyy-mm-dd hh24:mi:ss..' )";
- }
+ public String getDateString(Date date)
+ {
+ return formatDate(new SimpleDateFormat(DATE_FORMAT).format(date));
+ }
+
+ /**
+ * This method is used to format any date string using Oracle's
+ * <code>TO_DATE</code> built-in function.
+ */
+ private final String formatDate(String date)
+ {
+ char delim = getStringDelimiter();
+ return ("TO_DATE(" + delim + date + delim + ", " + delim +
+ "yyyy-mm-dd hh24:mi:ss" + delim + ')');
+ }
}
1.34 +17 -2
jakarta-turbine-torque/src/java/org/apache/torque/util/BasePeer.java
Index: BasePeer.java
===================================================================
RCS file:
/home/cvs/jakarta-turbine-torque/src/java/org/apache/torque/util/BasePeer.java,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -u -r1.33 -r1.34
--- BasePeer.java 16 Mar 2002 00:20:02 -0000 1.33
+++ BasePeer.java 18 Mar 2002 07:59:02 -0000 1.34
@@ -115,7 +115,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Frank Y. Kim</a>
* @author <a href="mailto:[EMAIL PROTECTED]">John D. McNally</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Brett McLaughlin</a>
- * @version $Id: BasePeer.java,v 1.33 2002/03/16 00:20:02 jon Exp $
+ * @version $Id: BasePeer.java,v 1.34 2002/03/18 07:59:02 dlr Exp $
*/
public abstract class BasePeer implements java.io.Serializable
{
@@ -2519,7 +2519,22 @@
criteria.setLimit(-1);
}
- if (limitString != null) query.setLimit(limitString);
+ if (limitString != null)
+ {
+ switch (db.getLimitStyle())
+ {
+ case DB.LIMIT_STYLE_ORACLE:
+ whereClause.add("rownum <= " + limitString);
+ break;
+ /* Don't have a Sybase install to validate this against. (dlr)
+ case DB.LIMIT_STYLE_SYBASE:
+ query.setRowcount(limitString);
+ break;
+ */
+ default:
+ query.setLimit(limitString);
+ }
+ }
String sql = query.toString();
category.debug(sql);
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>