rows = new ArrayList();
    FBCachedFetcher(FBConnection c, FBStatement fbStatement    , isc_stmt_handle stmt_handle, FBResultSet rs) throws SQLException {        isc_stmt_handle_impl stmt = (isc_stmt_handle_impl) stmt_handle;        byte[][] localRow = null;                    this.fbStatement = fbStatement;        this.rs = rs;                    isEmpty = false;        isBeforeFirst = false;        isFirst = false;        isLast = false;        isAfterLast = false;        rows = new ArrayList();        //        // Check if there is blobs to catch        //        boolean[] isBlob = new boolean[rs.xsqlvars.length];        boolean hasBlobs = false;        for (int i = 0; i < rs.xsqlvars.length; i++){            isBlob[i] = FBField.isType(rs.xsqlvars[i], Types.BLOB) ||                FBField.isType(rs.xsqlvars[i], Types.BINARY) ||                FBField.isType(rs.xsqlvars[i], Types.LONGVARCHAR);            if (isBlob[i])                 hasBlobs = true;        }        //        // load all rows from statement        //		          try {            do {                c.fetch(stmt);                if (stmt.rows.size() > 0){                    rows.addAll(stmt.rows);                    stmt.rows.clear();					 }            } while (!stmt.allRowsFetched && (fbStatement.maxRows==0 || rows.size()<fbStatement.maxRows));            //            if (hasBlobs){                for (int i=0;i< rows.size(); i++){                    localRow = (byte[][]) rows.get(i);                    //ugly blob caching workaround.                    for (int j = 0; i < localRow.length; i++){                                           if (isBlob[i] && localRow[i] != null ) {                            rs.row = localRow;						                              FBBlobField blob = (FBBlobField)FBField.createField(rs.xsqlvars[i], rs, i,false);                            blob.setConnection(c);                            localRow[i] = blob.getCachedObject();                            rs.row = null;                        }                    }                }            }            if (rows.size()==0)                 isEmpty = true;            else                 isBeforeFirst = true;            c.closeStatement(stmt, false);        }        catch (GDSException ge) {            throw new FBSQLException(ge);        }    }