Hello -

I'm having a tough time understanding how to use the ResultItator properly. Reading the 3.0.1 Javadocs, it reports:

Result "rows", depending on the query, may be represented as scalar values, DataRows, or Object[] arrays containing a mix of scalars and DataRows.

In the performance tuning example, the guide shows:

// ResultIterator operations all throw checked CayenneException
try {
  // special "performIteratedQuery" method is used
  it = context.performIteratedQuery(q);

  while(it.hasNextRow()) {
// ResultIterator always returns data rows Map row = (Map) it.nextRow(); // do something with the row...
     ...
  }
}


How can one pre-determine the object context being returned from a ResultIterator.nextRow() call? My code depends on a base class applying object-specific behavior to serialize queries to another context.. One pass a scalar is returned; yet another pass I have a Map returned..

Tks!

Code snippet:

     ResultIterator resultIter = null;
     query.setPageSize(mPageSize);
     query.setFetchingDataRows(true);
     long rowCnt = 0;
     try {
        resultIter = mDataCtx.performIteratedQuery(query);
     } catch (CayenneException e) {
        mLogger.log(Level.FATAL, "Query failed!", e);
        return;
     }
     boolean needHeader = true;
     try {
        while ( resultIter.hasNextRow() ) {
           DataRow row = (DataRow)resultIter.nextRow();
           rowCnt++;
           if ( needHeader ) {
              this.writeHeader(row, errors);
           }
           this.writeLine(row, errors);
        }
        resultIter.close();
     } catch (CayenneException e) {
        mLogger.log(Level.FATAL, "Iterating through query failed!", e);
        return;
     }
     finally {
try { if ( resultIter != null ) { resultIter.close(); } } catch (CayenneException e) { /* nothing */ }
     }
  }

Reply via email to