You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by br...@apache.org on 2004/02/15 15:08:33 UTC
cvs commit: db-ojb/src/java/org/apache/ojb/broker/platforms PlatformOracleImpl.java
brj 2004/02/15 06:08:33
Modified: src/java/org/apache/ojb/broker/platforms
PlatformOracleImpl.java
Log:
applied patch to support like for date-columns
patch by martin kalen
Revision Changes Path
1.17 +82 -92 db-ojb/src/java/org/apache/ojb/broker/platforms/PlatformOracleImpl.java
Index: PlatformOracleImpl.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/platforms/PlatformOracleImpl.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- PlatformOracleImpl.java 24 Jan 2004 00:08:58 -0000 1.16
+++ PlatformOracleImpl.java 15 Feb 2004 14:08:33 -0000 1.17
@@ -1,56 +1,41 @@
package org.apache.ojb.broker.platforms;
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation. All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- * if any, must include the following acknowledgment:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowledgment may appear in the software itself,
- * if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" and
- * "Apache ObjectRelationalBridge" must not be used to endorse or promote products
- * derived from this software without prior written permission. For
- * written permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- * "Apache ObjectRelationalBridge", nor may "Apache" appear in their name, without
- * prior written permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
+/*
+ * ==================================================================== The Apache Software
+ * License, Version 1.1
+ *
+ * Copyright (c) 2001 The Apache Software Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are permitted
+ * provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * 3. The end-user documentation included with the redistribution, if any, must include the
+ * following acknowledgment: "This product includes software developed by the Apache Software
+ * Foundation (http://www.apache.org/)." Alternately, this acknowledgment may appear in the
+ * software itself, if and wherever such third-party acknowledgments normally appear.
+ * 4. The names "Apache" and "Apache Software Foundation" and "Apache ObjectRelationalBridge" must
+ * not be used to endorse or promote products derived from this software without prior written
+ * permission. For written permission, please contact apache@apache.org.
+ * 5. Products derived from this software may not be called "Apache", "Apache
+ * ObjectRelationalBridge", nor may "Apache" appear in their name, without prior written permission
+ * of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation. For more
- * information on the Apache Software Foundation, please see
+ *
+ * This software consists of voluntary contributions made by many individuals on behalf of the
+ * Apache Software Foundation. For more information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
@@ -72,11 +57,10 @@
import java.sql.Types;
/**
- * This class is a concrete implementation of <code>Platform</code>. Provides
- * an implementation that works around some issues with Oracle in general and
- * Oracle's Thin driver in particular..
- *
- * @author <a href="mailto:thma@apache.org">Thomas Mahler<a>
+ * This class is a concrete implementation of <code>Platform</code>. Provides an implementation
+ * that works around some issues with Oracle in general and Oracle's Thin driver in particular..
+ *
+ * @author <a href="mailto:thma@apache.org">Thomas Mahler <a>
* @version $Id$
*/
@@ -90,8 +74,7 @@
private Logger logger = LoggerFactory.getLogger(PlatformOracleImpl.class);
/**
- * In Oracle we set escape processing explizit 'true' after a
- * statement was created.
+ * In Oracle we set escape processing explizit 'true' after a statement was created.
*/
public void afterStatementCreate(Statement stmt) throws PlatformException
{
@@ -106,24 +89,25 @@
}
/**
- * For objects beyond 4k, weird things happen in Oracle if you try
- * to use "setBytes", so for all cases it's better to use setBinaryStream.
- * Oracle also requires a change in the resultset type of the prepared
- * statement.
- * MBAIRD NOTE: BLOBS may not work with Oracle database/thin driver versions
- * prior to 8.1.6.
- *
- * @see Platform#setObjectForStatement
+ * For objects beyond 4k, weird things happen in Oracle if you try to use "setBytes", so for
+ * all cases it's better to use setBinaryStream. Oracle also requires a change in the resultset
+ * type of the prepared statement. MBAIRD NOTE: BLOBS may not work with Oracle database/thin
+ * driver versions prior to 8.1.6.
+ *
+ * @see Platform#setObjectForStatement
*/
- public void setObjectForStatement(PreparedStatement ps, int index, Object value, int sqlType) throws SQLException
+ public void setObjectForStatement(PreparedStatement ps, int index, Object value, int sqlType)
+ throws SQLException
{
- if (((sqlType == Types.VARBINARY) || (sqlType == Types.LONGVARBINARY) ||
- (sqlType == Types.BLOB)) && (value instanceof byte[]))
+ if (((sqlType == Types.VARBINARY) || (sqlType == Types.LONGVARBINARY) || (sqlType == Types.BLOB))
+ && (value instanceof byte[]))
{
byte buf[] = (byte[]) value;
int length = buf.length;
- if (isUsingOracleThinDriver(ps.getConnection()) && length > THIN_BLOB_MAX_SIZE) {
- throw new SQLException("Oracle thin driver cannot update BLOB values with length>2000. (Consider using Oracle9i as OJB platform.)");
+ if (isUsingOracleThinDriver(ps.getConnection()) && length > THIN_BLOB_MAX_SIZE)
+ {
+ throw new SQLException(
+ "Oracle thin driver cannot update BLOB values with length>2000. (Consider using Oracle9i as OJB platform.)");
}
ByteArrayInputStream inputStream = new ByteArrayInputStream(buf);
changePreparedStatementResultSetType(ps);
@@ -139,12 +123,16 @@
// workaround: Oracle thin driver problem when expecting long
ps.setLong(index, ((Integer) value).intValue());
}
- else if (sqlType == Types.INTEGER && value instanceof Long)
- {
- ps.setLong(index, ((Long) value).longValue());
- }
- else if (sqlType == Types.CLOB &&
- (value instanceof String || value instanceof byte[]))
+ else if (sqlType == Types.INTEGER && value instanceof Long)
+ {
+ ps.setLong(index, ((Long) value).longValue());
+ }
+ else if (sqlType == Types.DATE && value instanceof String)
+ {
+ // special handling of like for dates (birthDate like '2000-01%')
+ ps.setString(index, (String) value);
+ }
+ else if (sqlType == Types.CLOB && (value instanceof String || value instanceof byte[]))
{
Reader reader = null;
int length = 0;
@@ -161,8 +149,10 @@
reader = new InputStreamReader(inputStream);
length = buf.length;
}
- if (isUsingOracleThinDriver(ps.getConnection()) && length > THIN_CLOB_MAX_SIZE) {
- throw new SQLException("Oracle thin driver cannot insert CLOB values with length>4000. (Consider using Oracle9i as OJB platform.)");
+ if (isUsingOracleThinDriver(ps.getConnection()) && length > THIN_CLOB_MAX_SIZE)
+ {
+ throw new SQLException(
+ "Oracle thin driver cannot insert CLOB values with length>4000. (Consider using Oracle9i as OJB platform.)");
}
ps.setCharacterStream(index, reader, length);
}
@@ -173,23 +163,22 @@
}
/**
- * Attempts to modify a private member in the Oracle thin driver's resultset
- * to allow proper setting of large binary streams.
+ * Attempts to modify a private member in the Oracle thin driver's resultset to allow proper
+ * setting of large binary streams.
*/
protected void changePreparedStatementResultSetType(PreparedStatement ps)
{
try
{
final Field f = ps.getClass().getSuperclass().getDeclaredField("m_userRsetType");
- AccessController.doPrivileged(
- new PrivilegedAction()
- {
- public Object run()
- {
- f.setAccessible(true);
- return null;
- }
- });
+ AccessController.doPrivileged(new PrivilegedAction()
+ {
+ public Object run()
+ {
+ f.setAccessible(true);
+ return null;
+ }
+ });
f.setInt(ps, 1);
f.setAccessible(false);
}
@@ -224,9 +213,10 @@
/**
* Checks if the supplied connection is using the Oracle thin driver.
+ *
* @param conn database connection for which to check JDBC-driver
- * @return <code>true</code> if the connection is using Oracle thin driver,
- * <code>false</code> otherwise.
+ * @return <code>true</code> if the connection is using Oracle thin driver, <code>false</code>
+ * otherwise.
*/
protected static boolean isUsingOracleThinDriver(Connection conn)
{
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org