package railo.runtime.type.it;
import java.util.Iterator;
import railo.runtime.config.NullSupportHelper;
import railo.runtime.exp.PageException;
import railo.runtime.exp.PageRuntimeException;
import railo.runtime.type.Collection.Key;
import railo.runtime.type.Query;
import railo.runtime.type.Struct;
import railo.runtime.type.StructImpl;
public class ForEachQueryIterator implements Iterator {
private Query qry;
private int pid;
private int start,current=0;
private Key[] names;
public ForEachQueryIterator(Query qry, int pid){
this.qry=qry;
this.pid=pid;
this.start=qry.getCurrentrow(pid);
this.names = qry.getColumnNames();
}
@Override
public boolean hasNext() {
return current<qry.getRecordcount();
}
@Override
public Object next() {
try {
if(qry.go(++current,pid)) {
Struct sct=new StructImpl();
for(int i=0;i<names.length;i++){
sct.setEL(names[i], qry.get(names[i],NullSupportHelper.empty()));
}
return sct;
}
} catch (PageException pe) {
throw new PageRuntimeException(pe);
}
return null;
}
@Override
public void remove() {
try {
qry.removeRow(current);
} catch (PageException pe) {
throw new PageRuntimeException(pe);
}
}
public void reset() throws PageException {
qry.go(start,pid);
}
}