use of org.sirix.axis.filter.PredicateFilterAxis in project sirix by sirixdb.
the class PipelineBuilder method addPredicate.
/**
* Adds a predicate to the pipeline.
*
* @param pRtx transaction to operate with
*/
public void addPredicate(final XdmNodeReadTrx pRtx) {
assert getPipeStack().size() >= 2;
final Axis predicate = getPipeStack().pop().getExpr();
if (predicate instanceof LiteralExpr) {
predicate.hasNext();
// if is numeric literal -> abbrev for position()
final int type = pRtx.getTypeKey();
if (type == pRtx.keyForName("xs:integer") || type == pRtx.keyForName("xs:double") || type == pRtx.keyForName("xs:float") || type == pRtx.keyForName("xs:decimal")) {
throw new IllegalStateException("function fn:position() is not implemented yet.");
// getExpression().add(
// new PosFilter(transaction, (int)
// Double.parseDouble(transaction
// .getValue())));
// return; // TODO: YES! it is dirty!
// AtomicValue pos =
// new AtomicValue(mTransaction.getItem().getRawValue(),
// mTransaction
// .keyForName("xs:integer"));
// long position = mTransaction.getItemList().addItem(pos);
// mPredicate.reset(mTransaction.getItem().getKey());
// IAxis function =
// new FNPosition(mTransaction, new ArrayList<IAxis>(),
// FuncDef.POS.getMin(), FuncDef.POS
// .getMax(),
// mTransaction.keyForName(FuncDef.POS.getReturnType()));
// IAxis expectedPos = new LiteralExpr(mTransaction, position);
//
// mPredicate = new ValueComp(mTransaction, function,
// expectedPos, CompKind.EQ);
}
}
getExpression().add(new PredicateFilterAxis(pRtx, predicate));
}
Aggregations