} while  (localRow != null);
} while  (localRow != null && (fbStatement.maxRows==0 || rows.size()<fbStatement.maxRows)); if (rows.size()==0) isEmpty = true; else isBeforeFirst = true;
        FBCachedFetcher(FBManagedConnection mc, isc_stmt_handle stmt) throws SQLException {            Object[] localRow = null;            rows = new ArrayList();            try {                do {                    localRow = mc.fetch(stmt);                    if (localRow != null)                    {                        //ugly blob caching workaround.                        for (int i = 0; i < localRow.length; i++)                        {                            boolean blobField =                                 FBField.isType(xsqlvars[i], Types.BLOB) ||                                FBField.isType(xsqlvars[i], Types.BINARY) ||                                FBField.isType(xsqlvars[i], Types.LONGVARCHAR);                                                            if (blobField && localRow[i] != null )                             {                                FBBlobField blob = (FBBlobField)FBField.createField(xsqlvars[i]);                                blob.setConnection(c);                                localRow[i] = blob.getCachedObject();                                                            } // end of if ()                                                    } // end of for ()                                                rows.add(localRow);                    }                } while  (localRow != null);                // rows.add(null);                mc.closeStatement(stmt, false);            }            catch (GDSException ge) {                throw new SQLException("fetch problem: " + ge.toString());            }        }