Index: org/exolab/castor/jdo/engine/SQLEngine.java =================================================================== RCS file: /home/projects/castor/scm/castor/src/main/org/exolab/castor/jdo/engine/SQLEngine.java,v retrieving revision 1.38 diff -u -r1.38 SQLEngine.java --- org/exolab/castor/jdo/engine/SQLEngine.java 13 Oct 2005 07:40:54 -0000 1.38 +++ org/exolab/castor/jdo/engine/SQLEngine.java 23 Nov 2005 11:34:04 -0000 @@ -419,7 +419,7 @@ _log.debug( Messages.format( "jdo.createSql", sql ) ); } - return new SQLQuery( this, sql, types ); + return new SQLQuery( this, sql, types, false ); } @@ -441,7 +441,7 @@ _log.debug (Messages.format ("jdo.directSQL", sql)); } - return new SQLQuery( this, sql, types ); + return new SQLQuery( this, sql, types, true ); } if (_log.isDebugEnabled()) { @@ -2027,8 +2027,21 @@ private boolean _resultSetDone; private Object[] _fields; + + /** + * Indicates whether the SQL query executed is issued as part of a SQL + * CALL statement or not. + */ + private boolean _isCallSql = false; - SQLQuery( SQLEngine engine, String sql, Class[] types ) + /** + * Creates an instance of SQLQuery. + * @param engine SQLEngine instance + * @param sql The SQL statement to execute + * @param types Types of the class used. + * @param isCallSql true if the SQL is issued as part of a CALL SQL statement. + */ + SQLQuery(SQLEngine engine, String sql, Class[] types, boolean isCallSql) { _engine = engine; _requestedEngine = engine; @@ -2039,6 +2052,8 @@ for (int i = 0; i < _identSqlType.length; i++) { _identSqlType[i] = ((JDOFieldDescriptor) _engine._clsDesc.getIdentities()[i]).getSQLType()[0]; } + + _isCallSql = isCallSql; } @@ -2313,11 +2328,16 @@ String metaTableName = metaData.getTableName(count); String metaColumnName = metaData.getColumnName(count); if (fieldColumnName.equalsIgnoreCase(metaColumnName)) { - if (fieldTableName.equalsIgnoreCase(metaTableName)) { - break; - } else if ("".equals(metaTableName)) { - break; - } + if (!_isCallSql) { + if (fieldTableName.equalsIgnoreCase(metaTableName)) { + break; + } else if ("".equals(metaTableName)) { + break; + } + } else { + // if we are running as a result of a CALL SQL statement, let's relax our checks. + break; + } } else if (fieldName.equalsIgnoreCase(metaColumnName)) { break; }