Search in sources :

Example 6 with Axis

use of org.sirix.api.Axis in project sirix by sirixdb.

the class PipelineBuilder method addIntExcExpression.

/**
 * Adds a intersect or a exception expression to the pipeline.
 *
 * @param mTransaction Transaction to operate with.
 * @param mIsIntersect true, if expression is an intersection
 */
public void addIntExcExpression(final XdmNodeReadTrx mTransaction, final boolean mIsIntersect) {
    assert getPipeStack().size() >= 2;
    final XdmNodeReadTrx rtx = mTransaction;
    final Axis mOperand2 = getPipeStack().pop().getExpr();
    final Axis mOperand1 = getPipeStack().pop().getExpr();
    final Axis axis = mIsIntersect ? new IntersectAxis(rtx, mOperand1, mOperand2) : new ExceptAxis(rtx, mOperand1, mOperand2);
    if (getPipeStack().empty() || getExpression().getSize() != 0) {
        addExpressionSingle();
    }
    getExpression().add(axis);
}
Also used : ExceptAxis(org.sirix.service.xml.xpath.expr.ExceptAxis) XdmNodeReadTrx(org.sirix.api.XdmNodeReadTrx) IntersectAxis(org.sirix.service.xml.xpath.expr.IntersectAxis) ModOpAxis(org.sirix.service.xml.xpath.operators.ModOpAxis) RangeAxis(org.sirix.service.xml.xpath.expr.RangeAxis) AddOpAxis(org.sirix.service.xml.xpath.operators.AddOpAxis) ExceptAxis(org.sirix.service.xml.xpath.expr.ExceptAxis) Axis(org.sirix.api.Axis) MulOpAxis(org.sirix.service.xml.xpath.operators.MulOpAxis) UnionAxis(org.sirix.service.xml.xpath.expr.UnionAxis) IfAxis(org.sirix.service.xml.xpath.expr.IfAxis) IntersectAxis(org.sirix.service.xml.xpath.expr.IntersectAxis) IDivOpAxis(org.sirix.service.xml.xpath.operators.IDivOpAxis) DupFilterAxis(org.sirix.service.xml.xpath.filter.DupFilterAxis) PredicateFilterAxis(org.sirix.axis.filter.PredicateFilterAxis) VariableAxis(org.sirix.service.xml.xpath.expr.VariableAxis) ForAxis(org.sirix.axis.ForAxis) SequenceAxis(org.sirix.service.xml.xpath.expr.SequenceAxis) FilterAxis(org.sirix.axis.filter.FilterAxis) SubOpAxis(org.sirix.service.xml.xpath.operators.SubOpAxis) DivOpAxis(org.sirix.service.xml.xpath.operators.DivOpAxis)

Example 7 with Axis

use of org.sirix.api.Axis 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));
}
Also used : LiteralExpr(org.sirix.service.xml.xpath.expr.LiteralExpr) ModOpAxis(org.sirix.service.xml.xpath.operators.ModOpAxis) RangeAxis(org.sirix.service.xml.xpath.expr.RangeAxis) AddOpAxis(org.sirix.service.xml.xpath.operators.AddOpAxis) ExceptAxis(org.sirix.service.xml.xpath.expr.ExceptAxis) Axis(org.sirix.api.Axis) MulOpAxis(org.sirix.service.xml.xpath.operators.MulOpAxis) UnionAxis(org.sirix.service.xml.xpath.expr.UnionAxis) IfAxis(org.sirix.service.xml.xpath.expr.IfAxis) IntersectAxis(org.sirix.service.xml.xpath.expr.IntersectAxis) IDivOpAxis(org.sirix.service.xml.xpath.operators.IDivOpAxis) DupFilterAxis(org.sirix.service.xml.xpath.filter.DupFilterAxis) PredicateFilterAxis(org.sirix.axis.filter.PredicateFilterAxis) VariableAxis(org.sirix.service.xml.xpath.expr.VariableAxis) ForAxis(org.sirix.axis.ForAxis) SequenceAxis(org.sirix.service.xml.xpath.expr.SequenceAxis) FilterAxis(org.sirix.axis.filter.FilterAxis) SubOpAxis(org.sirix.service.xml.xpath.operators.SubOpAxis) DivOpAxis(org.sirix.service.xml.xpath.operators.DivOpAxis) PredicateFilterAxis(org.sirix.axis.filter.PredicateFilterAxis)

Example 8 with Axis

use of org.sirix.api.Axis in project sirix by sirixdb.

the class PipelineBuilder method finishExpr.

/**
 * Ends an expression. This means that the currently used pipeline stack will be emptied and the
 * singleExpressions that were on the stack are combined by a sequence expression, which is lated
 * added to the next pipeline stack.
 *
 * @param mTransaction transaction to operate on
 * @param mNum number of singleExpressions that will be added to the sequence
 */
public void finishExpr(final XdmNodeReadTrx mTransaction, final int mNum) {
    // of the stack containing these SingleExpressions have to be the same.
    if (getPipeStack().size() != mNum) {
        // this should never happen
        throw new IllegalStateException("The query has not been processed correctly");
    }
    int no = mNum;
    Axis[] axis;
    if (no > 1) {
        axis = new Axis[no];
        // add all SingleExpression to a list
        while (no-- > 0) {
            axis[no] = getPipeStack().pop().getExpr();
        }
        if (mExprStack.size() > 1) {
            assert mExprStack.peek().empty();
            mExprStack.pop();
        }
        if (getPipeStack().empty() || getExpression().getSize() != 0) {
            addExpressionSingle();
        }
        getExpression().add(new SequenceAxis(mTransaction, axis));
    } else if (no == 1) {
        // only one expression does not need to be capsled by a seq
        axis = new Axis[1];
        axis[0] = getPipeStack().pop().getExpr();
        if (mExprStack.size() > 1) {
            assert mExprStack.peek().empty();
            mExprStack.pop();
        }
        if (getPipeStack().empty() || getExpression().getSize() != 0) {
            addExpressionSingle();
        }
        final Axis iAxis;
        if (mExprStack.size() == 1 && getPipeStack().size() == 1 && getExpression().getSize() == 0) {
            iAxis = new SequenceAxis(mTransaction, axis);
        } else {
            iAxis = axis[0];
        }
        getExpression().add(iAxis);
    } else {
        mExprStack.pop();
    }
}
Also used : SequenceAxis(org.sirix.service.xml.xpath.expr.SequenceAxis) ModOpAxis(org.sirix.service.xml.xpath.operators.ModOpAxis) RangeAxis(org.sirix.service.xml.xpath.expr.RangeAxis) AddOpAxis(org.sirix.service.xml.xpath.operators.AddOpAxis) ExceptAxis(org.sirix.service.xml.xpath.expr.ExceptAxis) Axis(org.sirix.api.Axis) MulOpAxis(org.sirix.service.xml.xpath.operators.MulOpAxis) UnionAxis(org.sirix.service.xml.xpath.expr.UnionAxis) IfAxis(org.sirix.service.xml.xpath.expr.IfAxis) IntersectAxis(org.sirix.service.xml.xpath.expr.IntersectAxis) IDivOpAxis(org.sirix.service.xml.xpath.operators.IDivOpAxis) DupFilterAxis(org.sirix.service.xml.xpath.filter.DupFilterAxis) PredicateFilterAxis(org.sirix.axis.filter.PredicateFilterAxis) VariableAxis(org.sirix.service.xml.xpath.expr.VariableAxis) ForAxis(org.sirix.axis.ForAxis) SequenceAxis(org.sirix.service.xml.xpath.expr.SequenceAxis) FilterAxis(org.sirix.axis.filter.FilterAxis) SubOpAxis(org.sirix.service.xml.xpath.operators.SubOpAxis) DivOpAxis(org.sirix.service.xml.xpath.operators.DivOpAxis)

Example 9 with Axis

use of org.sirix.api.Axis in project sirix by sirixdb.

the class PipelineBuilder method addVariableExpr.

/**
 * Adds a variable expression to the pipeline. Adds the expression that will evaluate the results
 * the variable holds.
 *
 * @param mTransaction Transaction to operate with.
 * @param mVarName name of the variable
 */
public void addVariableExpr(final XdmNodeReadTrx mTransaction, final String mVarName) {
    assert getPipeStack().size() >= 1;
    final Axis bindingSeq = getPipeStack().pop().getExpr();
    final Axis axis = new VariableAxis(mTransaction, bindingSeq);
    mVarRefMap.put(mVarName, axis);
    if (getPipeStack().empty() || getExpression().getSize() != 0) {
        addExpressionSingle();
    }
    getExpression().add(axis);
}
Also used : VariableAxis(org.sirix.service.xml.xpath.expr.VariableAxis) ModOpAxis(org.sirix.service.xml.xpath.operators.ModOpAxis) RangeAxis(org.sirix.service.xml.xpath.expr.RangeAxis) AddOpAxis(org.sirix.service.xml.xpath.operators.AddOpAxis) ExceptAxis(org.sirix.service.xml.xpath.expr.ExceptAxis) Axis(org.sirix.api.Axis) MulOpAxis(org.sirix.service.xml.xpath.operators.MulOpAxis) UnionAxis(org.sirix.service.xml.xpath.expr.UnionAxis) IfAxis(org.sirix.service.xml.xpath.expr.IfAxis) IntersectAxis(org.sirix.service.xml.xpath.expr.IntersectAxis) IDivOpAxis(org.sirix.service.xml.xpath.operators.IDivOpAxis) DupFilterAxis(org.sirix.service.xml.xpath.filter.DupFilterAxis) PredicateFilterAxis(org.sirix.axis.filter.PredicateFilterAxis) VariableAxis(org.sirix.service.xml.xpath.expr.VariableAxis) ForAxis(org.sirix.axis.ForAxis) SequenceAxis(org.sirix.service.xml.xpath.expr.SequenceAxis) FilterAxis(org.sirix.axis.filter.FilterAxis) SubOpAxis(org.sirix.service.xml.xpath.operators.SubOpAxis) DivOpAxis(org.sirix.service.xml.xpath.operators.DivOpAxis)

Example 10 with Axis

use of org.sirix.api.Axis in project sirix by sirixdb.

the class PipelineBuilder method addCastExpr.

/**
 * Adds a cast expression to the pipeline.
 *
 * @param mTransaction Transaction to operate with.
 * @param mSingleType single type the context item will be casted to.
 */
public void addCastExpr(final XdmNodeReadTrx mTransaction, final SingleType mSingleType) {
    assert getPipeStack().size() >= 1;
    final Axis candidate = getPipeStack().pop().getExpr();
    final Axis axis = new CastExpr(mTransaction, candidate, mSingleType);
    if (getPipeStack().empty() || getExpression().getSize() != 0) {
        addExpressionSingle();
    }
    getExpression().add(axis);
}
Also used : CastExpr(org.sirix.service.xml.xpath.expr.CastExpr) ModOpAxis(org.sirix.service.xml.xpath.operators.ModOpAxis) RangeAxis(org.sirix.service.xml.xpath.expr.RangeAxis) AddOpAxis(org.sirix.service.xml.xpath.operators.AddOpAxis) ExceptAxis(org.sirix.service.xml.xpath.expr.ExceptAxis) Axis(org.sirix.api.Axis) MulOpAxis(org.sirix.service.xml.xpath.operators.MulOpAxis) UnionAxis(org.sirix.service.xml.xpath.expr.UnionAxis) IfAxis(org.sirix.service.xml.xpath.expr.IfAxis) IntersectAxis(org.sirix.service.xml.xpath.expr.IntersectAxis) IDivOpAxis(org.sirix.service.xml.xpath.operators.IDivOpAxis) DupFilterAxis(org.sirix.service.xml.xpath.filter.DupFilterAxis) PredicateFilterAxis(org.sirix.axis.filter.PredicateFilterAxis) VariableAxis(org.sirix.service.xml.xpath.expr.VariableAxis) ForAxis(org.sirix.axis.ForAxis) SequenceAxis(org.sirix.service.xml.xpath.expr.SequenceAxis) FilterAxis(org.sirix.axis.filter.FilterAxis) SubOpAxis(org.sirix.service.xml.xpath.operators.SubOpAxis) DivOpAxis(org.sirix.service.xml.xpath.operators.DivOpAxis)

Aggregations

Axis (org.sirix.api.Axis)73 DescendantAxis (org.sirix.axis.DescendantAxis)39 FilterAxis (org.sirix.axis.filter.FilterAxis)38 ChildAxis (org.sirix.axis.ChildAxis)23 UnionAxis (org.sirix.service.xml.xpath.expr.UnionAxis)19 DupFilterAxis (org.sirix.service.xml.xpath.filter.DupFilterAxis)19 ForAxis (org.sirix.axis.ForAxis)17 PredicateFilterAxis (org.sirix.axis.filter.PredicateFilterAxis)17 ExceptAxis (org.sirix.service.xml.xpath.expr.ExceptAxis)17 IfAxis (org.sirix.service.xml.xpath.expr.IfAxis)17 IntersectAxis (org.sirix.service.xml.xpath.expr.IntersectAxis)17 RangeAxis (org.sirix.service.xml.xpath.expr.RangeAxis)17 SequenceAxis (org.sirix.service.xml.xpath.expr.SequenceAxis)17 VariableAxis (org.sirix.service.xml.xpath.expr.VariableAxis)17 AddOpAxis (org.sirix.service.xml.xpath.operators.AddOpAxis)17 DivOpAxis (org.sirix.service.xml.xpath.operators.DivOpAxis)17 IDivOpAxis (org.sirix.service.xml.xpath.operators.IDivOpAxis)17 ModOpAxis (org.sirix.service.xml.xpath.operators.ModOpAxis)17 MulOpAxis (org.sirix.service.xml.xpath.operators.MulOpAxis)17 SubOpAxis (org.sirix.service.xml.xpath.operators.SubOpAxis)17