public PersistenceQuery createCall(final String spCall, final Class[] types) { FieldDescriptor[] fields; String[] jdoFields0; String[] jdoFields; String sql; int[] sqlTypes0; int[] sqlTypes; int count; // changes for the SQL Direct interface begins here if (spCall.startsWith("SQL")) { sql = spCall.substring(4); if (LOG.isDebugEnabled()) { LOG.debug(Messages.format("jdo.directSQL", sql)); } return new SQLQuery(this, _factory, sql, types, true); } if (LOG.isDebugEnabled()) { LOG.debug(Messages.format("jdo.spCall", spCall)); } fields = _clsDesc.getFields(); jdoFields0 = new String[fields.length + 1]; sqlTypes0 = new int[fields.length + 1]; // the first field is the identity count = 1; jdoFields0[0] = _clsDesc.getIdentity().getFieldName(); sqlTypes0[0] = ((JDOFieldDescriptor) _clsDesc.getIdentity()).getSQLType()[0]; for (int i = 0; i < fields.length; ++i) { if (fields[i] instanceof JDOFieldDescriptor) { jdoFields0[count] = ((JDOFieldDescriptor) fields[i]).getSQLName()[0]; sqlTypes0[count] = ((JDOFieldDescriptor) fields[i]).getSQLType()[0]; ++count; } } jdoFields = new String[count]; sqlTypes = new int[count]; System.arraycopy(jdoFields0, 0, jdoFields, 0, count); System.arraycopy(sqlTypes0, 0, sqlTypes, 0, count); return ((BaseFactory) _factory) .getCallQuery(spCall, types, _clsDesc.getJavaClass(), jdoFields, sqlTypes); }