Example #1
0
  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);
  }