package org.basex.query.expr;
import static org.basex.query.QueryText.*;
import org.basex.query.QueryContext;
import org.basex.query.QueryException;
import org.basex.query.item.Item;
import org.basex.query.item.Value;
import org.basex.query.iter.Iter;
import org.basex.query.path.Axis;
import org.basex.query.path.AxisStep;
import org.basex.query.path.Path;
import org.basex.query.path.Test;
import org.basex.query.util.Var;
import org.basex.util.InputInfo;
/**
* Context item.
*
* @author BaseX Team 2005-12, BSD License
* @author Christian Gruen
*/
public final class Context extends Simple {
/**
* Constructor.
* @param ii input info
*/
public Context(final InputInfo ii) {
super(ii);
}
@Override
public Expr comp(final QueryContext ctx) {
if(ctx.value != null) {
type = ctx.value.type.seqType();
size = ctx.value.size();
}
return this;
}
@Override
public Iter iter(final QueryContext ctx) throws QueryException {
return checkCtx(ctx).iter();
}
@Override
public Value value(final QueryContext ctx) throws QueryException {
return checkCtx(ctx);
}
@Override
public Item item(final QueryContext ctx, final InputInfo ii)
throws QueryException {
return checkCtx(ctx).item(ctx, input);
}
@Override
public boolean removable(final Var v) {
return false;
}
@Override
public Expr addText(final QueryContext ctx) {
// replacing context node with text() node to facilitate index rewritings
if(!ctx.leaf) return this;
ctx.compInfo(OPTTEXT);
return Path.get(input, null, AxisStep.get(input, Axis.CHILD, Test.TXT));
}
@Override
public boolean uses(final Use u) {
return u == Use.CTX;
}
@Override
public boolean sameAs(final Expr cmp) {
return cmp instanceof Context;
}
@Override
public String toString() {
return ".";
}
}