package org.basex.query.up.expr;
import static org.basex.query.QueryText.*;
import static org.basex.query.util.Err.*;
import org.basex.query.QueryContext;
import org.basex.query.QueryException;
import org.basex.query.expr.Expr;
import org.basex.query.item.ANode;
import org.basex.query.item.DBNode;
import org.basex.query.item.Item;
import org.basex.query.iter.Iter;
import org.basex.query.up.primitives.DeleteNode;
import org.basex.util.InputInfo;
/**
* Delete expression.
*
* @author BaseX Team 2005-12, BSD License
* @author Lukas Kircher
*/
public final class Delete extends Update {
/**
* Constructor.
* @param ii input info
* @param r return expression
*/
public Delete(final InputInfo ii, final Expr r) {
super(ii, r);
}
@Override
public Item item(final QueryContext ctx, final InputInfo ii)
throws QueryException {
final Iter t = ctx.iter(expr[0]);
for(Item i; (i = t.next()) != null;) {
if(!(i instanceof ANode)) UPTRGDELEMPT.thrw(input);
final ANode n = (ANode) i;
// nodes without parents are ignored
if(n.parent() == null) continue;
final DBNode dbn = ctx.updates.determineDataRef(n, ctx);
ctx.updates.add(new DeleteNode(dbn.pre, dbn.data, input), ctx);
}
return null;
}
@Override
public String toString() {
return DELETE + ' ' + NODES + ' ' + expr[0];
}
}