package org.basex.query.expr;
import static org.basex.query.QueryText.*;
import java.io.IOException;
import org.basex.io.serial.Serializer;
import org.basex.query.QueryContext;
import org.basex.query.QueryException;
import org.basex.query.iter.Iter;
import org.basex.util.InputInfo;
/**
* Pragma extension.
*
* @author BaseX Team 2005-12, BSD License
* @author Leo Woerteler
*/
public final class Extension extends Single {
/** Pragmas of the ExtensionExpression. */
private final Expr[] pragmas;
/**
* Constructor.
* @param ii input info
* @param prag pragmas
* @param e enclosed expression
*/
public Extension(final InputInfo ii, final Expr[] prag, final Expr e) {
super(ii, e);
pragmas = prag;
}
@Override
public Expr comp(final QueryContext ctx) throws QueryException {
// ignore pragma
return optPre(expr.comp(ctx), ctx);
}
@Override
public Iter iter(final QueryContext ctx) throws QueryException {
// currently, will never be called, as compilation step returns argument
return ctx.iter(expr);
}
@Override
public void plan(final Serializer ser) throws IOException {
ser.openElement(this);
for(final Expr p : pragmas) p.plan(ser);
expr.plan(ser);
ser.closeElement();
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
for(final Expr p : pragmas) sb.append(p).append(' ');
return sb.append(BRACE1 + ' ' + expr + ' ' + BRACE2).toString();
}
@Override
public Expr markTailCalls() {
expr = expr.markTailCalls();
return this;
}
}