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 ar...@apache.org on 2004/08/09 09:45:42 UTC
cvs commit: db-ojb/src/java/org/apache/ojb/broker/accesslayer RowReaderDefaultImpl.java RsIterator.java
arminw 2004/08/09 00:45:42
Modified: src/java/org/apache/ojb/broker/accesslayer
RowReaderDefaultImpl.java RsIterator.java
Log:
clear used row Map for each object, default RowReader now only add fields
if they not already set in row map.
apply patch by Charles Anthony:
We've got a problem with the RowReaderDefaultImpl on some of our tables,
which arises when we use the Microsoft SqlServer Driver and the table
includes a LONGVARCHAR (or LONGVARBINARY).
The MS Driver doesn't like the columns resultset being read twice (or out of
sequence) when the data include an IMAGE or TEXT column.
The reason it throws this error is because the Default row reader first
reads the PK to check the cache, and then if nothing is found, reads the
entire row, thus leading to columns being read twice.
So, I'm writing a custom HPDRowReader that reads all the columns into the
map in one go - and that only adds something to row map if the column is't
already in the map.
Revision Changes Path
1.31 +6 -3 db-ojb/src/java/org/apache/ojb/broker/accesslayer/RowReaderDefaultImpl.java
Index: RowReaderDefaultImpl.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/RowReaderDefaultImpl.java,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- RowReaderDefaultImpl.java 6 May 2004 18:54:44 -0000 1.30
+++ RowReaderDefaultImpl.java 9 Aug 2004 07:45:41 -0000 1.31
@@ -196,8 +196,11 @@
for (int j = 0; j < size; j++)
{
fld = fields[j];
- val = fld.getJdbcType().getObjectFromColumn(rs, fld.getColumnName());
- row.put(fld.getColumnName(), fld.getFieldConversion().sqlToJava(val));
+ if(!row.containsKey(fld.getColumnName()))
+ {
+ val = fld.getJdbcType().getObjectFromColumn(rs, fld.getColumnName());
+ row.put(fld.getColumnName(), fld.getFieldConversion().sqlToJava(val));
+ }
}
}
catch (SQLException t)
1.66 +2 -1 db-ojb/src/java/org/apache/ojb/broker/accesslayer/RsIterator.java
Index: RsIterator.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/RsIterator.java,v
retrieving revision 1.65
retrieving revision 1.66
diff -u -r1.65 -r1.66
--- RsIterator.java 25 Jul 2004 00:18:50 -0000 1.65
+++ RsIterator.java 9 Aug 2004 07:45:41 -0000 1.66
@@ -405,6 +405,7 @@
*/
protected Object getObjectFromResultSet() throws PersistenceBrokerException
{
+ getRow().clear();
/**
* MBAIRD if a proxy is to be used, return a proxy instance and dont
* perfom a full materialization. NOTE: Potential problem here with
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org