mkalen 2005/03/02 12:32:35
Modified: src/java/org/apache/ojb/broker/accesslayer Tag:
OJB_1_0_RELEASE StatementManager.java
. Tag: OJB_1_0_RELEASE release-notes.txt
Log:
Make sure StatementManager uses .setNull() for null-values, also when binding
delete-statement parameters. Fixes SQLException on Oracle9i platform in
FieldConversionTest_3. Test now passes on hsqldb and oracle9i.
Revision Changes Path
No revision
No revision
1.47.2.2 +33 -56
db-ojb/src/java/org/apache/ojb/broker/accesslayer/StatementManager.java
Index: StatementManager.java
===================================================================
RCS file:
/home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/StatementManager.java,v
retrieving revision 1.47.2.1
retrieving revision 1.47.2.2
diff -u -r1.47.2.1 -r1.47.2.2
--- StatementManager.java 17 Feb 2005 14:13:46 -0000 1.47.2.1
+++ StatementManager.java 2 Mar 2005 20:32:35 -0000 1.47.2.2
@@ -132,7 +132,7 @@
{
for (; i < pkValues.length; i++)
{
- m_platform.setObjectForStatement(stmt, i + 1, pkValues[i],
pkFields[i].getJdbcType().getType());
+ setObjectForStatement(stmt, i + 1, pkValues[i],
pkFields[i].getJdbcType().getType());
}
}
catch (SQLException e)
@@ -162,7 +162,7 @@
values = getKeyValues(m_broker, cld, obj);
for (int i = 0; i < values.length; i++)
{
- m_platform.setObjectForStatement(stmt, index,
values[i].getValue(), values[i].getJdbcType().getType());
+ setObjectForStatement(stmt, index, values[i].getValue(),
values[i].getJdbcType().getType());
index++;
}
@@ -170,7 +170,7 @@
values = currentLockingValues;
for (int i = 0; i < values.length; i++)
{
- m_platform.setObjectForStatement(stmt, index,
values[i].getValue(), values[i].getJdbcType().getType());
+ setObjectForStatement(stmt, index, values[i].getValue(),
values[i].getJdbcType().getType());
index++;
}
}
@@ -443,15 +443,7 @@
values = getAllValues(cld, obj);
for (int i = 0; i < values.length; i++)
{
- ValueContainer val = values[i];
- if (val.getValue() != null)
- {
- m_platform.setObjectForStatement(stmt, i + 1,
val.getValue(), val.getJdbcType().getType());
- }
- else
- {
- m_platform.setNullForStatement(stmt, i + 1,
val.getJdbcType().getType());
- }
+ setObjectForStatement(stmt, i + 1, values[i].getValue(),
values[i].getJdbcType().getType());
}
}
}
@@ -473,15 +465,7 @@
values = getKeyValues(m_broker, cld, oid);
for (i = 0; i < values.length; i++)
{
- ValueContainer valContainer = values[i];
- if (valContainer.getValue() != null)
- {
- m_platform.setObjectForStatement(stmt, i + 1,
valContainer.getValue(), valContainer.getJdbcType().getType());
- }
- else
- {
- m_platform.setNullForStatement(stmt, i + 1,
valContainer.getJdbcType().getType());
- }
+ setObjectForStatement(stmt, i + 1, values[i].getValue(),
values[i].getJdbcType().getType());
}
}
catch (SQLException e)
@@ -512,29 +496,14 @@
// parameters for SET-clause
for (int i = 0; i < values.length; i++)
{
- if (values[i].getValue() != null)
- {
- m_platform.setObjectForStatement(stmt, index,
values[i].getValue(), values[i].getJdbcType().getType());
- }
- else
- {
- m_platform.setNullForStatement(stmt, index,
values[i].getJdbcType().getType());
- }
-
+ setObjectForStatement(stmt, index, values[i].getValue(),
values[i].getJdbcType().getType());
index++;
}
// parameters for WHERE-clause pk
values = getKeyValues(m_broker, cld, obj);
for (int i = 0; i < values.length; i++)
{
- if (values[i].getValue() != null)
- {
- m_platform.setObjectForStatement(stmt, index,
values[i].getValue(), values[i].getJdbcType().getType());
- }
- else
- {
- m_platform.setNullForStatement(stmt, index,
values[i].getJdbcType().getType());
- }
+ setObjectForStatement(stmt, index, values[i].getValue(),
values[i].getJdbcType().getType());
index++;
}
// parameters for WHERE-clause locking
@@ -542,14 +511,7 @@
values = valuesSnapshot;
for (int i = 0; i < values.length; i++)
{
- if (values[i].getValue() != null)
- {
- m_platform.setObjectForStatement(stmt, index,
values[i].getValue(), values[i].getJdbcType().getType());
- }
- else
- {
- m_platform.setNullForStatement(stmt, index,
values[i].getJdbcType().getType());
- }
+ setObjectForStatement(stmt, index, values[i].getValue(),
values[i].getJdbcType().getType());
index++;
}
}
@@ -566,7 +528,7 @@
{
for (int i = 0; i < values.length; i++)
{
- m_platform.setObjectForStatement(stmt, index,
values[i].getValue(), values[i].getJdbcType().getType());
+ setObjectForStatement(stmt, index, values[i].getValue(),
values[i].getJdbcType().getType());
index++;
}
}
@@ -758,14 +720,7 @@
ArgumentDescriptor arg = (ArgumentDescriptor) iterator.next();
Object val = arg.getValue(obj);
int jdbcType = arg.getJdbcType();
- if (val != null)
- {
- m_platform.setObjectForStatement(stmt, valueSub + 1, val,
jdbcType);
- }
- else
- {
- m_platform.setNullForStatement(stmt, valueSub + 1, jdbcType);
- }
+ setObjectForStatement(stmt, valueSub + 1, val, jdbcType);
if ((arg.getIsReturnedByProcedure()) && (callable != null))
{
callable.registerOutParameter(valueSub + 1, jdbcType);
@@ -773,4 +728,26 @@
valueSub++;
}
}
+
+ /**
+ * Sets object for statement at specific index, adhering to platform-
and null-rules.
+ * @param stmt the statement
+ * @param index the current parameter index
+ * @param value the value to set
+ * @param sqlType the JDBC SQL-type of the value
+ * @throws SQLException on platform error
+ */
+ private void setObjectForStatement(PreparedStatement stmt, int index,
Object value, int sqlType)
+ throws SQLException
+ {
+ if (value == null)
+ {
+ m_platform.setNullForStatement(stmt, index, sqlType);
+ }
+ else
+ {
+ m_platform.setObjectForStatement(stmt, index, value, sqlType);
+ }
+ }
+
}
No revision
No revision
1.54.2.29 +5 -1 db-ojb/release-notes.txt
Index: release-notes.txt
===================================================================
RCS file: /home/cvs/db-ojb/release-notes.txt,v
retrieving revision 1.54.2.28
retrieving revision 1.54.2.29
diff -u -r1.54.2.28 -r1.54.2.29
--- release-notes.txt 2 Mar 2005 16:25:28 -0000 1.54.2.28
+++ release-notes.txt 2 Mar 2005 20:32:35 -0000 1.54.2.29
@@ -72,6 +72,10 @@
under http://issues.apache.org/scarab/servlet/scarab/issues/id/OJBxxx
to see details for a bug with id OJBxxx.
+- Fix problem with StatementManager when binding delete-statement parameters
+ with null-values for numeric type columns under certain conditions.
+ (Oracle9i and jdbc-type=NUMERIC with a conversion class that can return
null-values
+ was such a combination, resulting in SQLException in
OracleStatement#get_internal_type.)
- Fix bug in MetadataManager, when 'per thread changes' is enabled and
CollectionProxy
proxies are used. Using proxies in this mode used to be undefined, since
the lazy
loading might or might not succeed depending on in which thread the data
was loaded.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]