@Override public NodeValue eval(NodeValue x, NodeValue y) { if ( ARQ.isStrictMode() ) return XSDFuncOp.numAdd(x, y) ; return NodeValueOps.additionNV(x, y) ; }
@Override public NodeValue eval(NodeValue x, NodeValue y) { if ( ARQ.isStrictMode() ) return XSDFuncOp.numDivide(x, y) ; return NodeValueOps.divisionNV(x, y) ; }
@Override public NodeValue eval(NodeValue x, NodeValue y) { if ( ARQ.isStrictMode() ) return XSDFuncOp.numMultiply(x, y) ; return NodeValueOps.multiplicationNV(x, y) ; }
XMLGregorianCalendar result = xsd_add(cal, nv2.getDuration()) ; NodeValue r = NodeValue.makeDateTime(result) ; return r ; XMLGregorianCalendar result = xsd_add(cal, nv2.getDuration()) ; NodeValue r = NodeValue.makeDate(result) ; return r ; XMLGregorianCalendar result = xsd_add(cal, nv2.getDuration()) ; NodeValue r = NodeValue.makeNode(result.toXMLFormat(), XSDDatatype.XSDtime) ; return r ; if ( isDT(vs2) && vs1.equals(VSPACE_DURATION) ) return additionNV(nv2, nv1) ; throw new ExprEvalTypeException("Operator '+' : Undefined addition: "+nv1+" and "+nv2) ;
if ( isDT(vs1) && isDT(vs2) ) throw new ExprEvalTypeException("Operator '-': can't substract timezone/non-timezone values") ; return NodeValue.makeDuration(xsd_substract(cal1, cal2)); XMLGregorianCalendar result = xsd_subtract(cal, nv2.getDuration()) ; NodeValue r = NodeValue.makeDateTime(result) ; return r ; XMLGregorianCalendar result = xsd_subtract(cal, nv2.getDuration()) ; NodeValue r = NodeValue.makeDate(result) ; return r ; XMLGregorianCalendar result = xsd_subtract(cal, nv2.getDuration()) ; NodeValue r = NodeValue.makeNode(result.toXMLFormat(), XSDDatatype.XSDtime) ; return r ;
@Override public NodeValue eval(NodeValue x, NodeValue y) { if ( ARQ.isStrictMode() ) return XSDFuncOp.numSubtract(x, y) ; return NodeValueOps.subtractionNV(x, y) ; }
private static XMLGregorianCalendar xsd_subtract(XMLGregorianCalendar cal, Duration duration) { return xsd_add(cal, duration.negate()) ; }
static NodeValue testSub(String s1, String s2) { NodeValue nv1 = NodeValue.parse(s1) ; NodeValue nv2 = NodeValue.parse(s2) ; return NodeValueOps.subtractionNV(nv1, nv2) ; }
static NodeValue testAdd(String s1, String s2) { NodeValue nv1 = NodeValue.parse(s1) ; NodeValue nv2 = NodeValue.parse(s2) ; return NodeValueOps.additionNV(nv1, nv2) ; }
static NodeValue testMult(String s1, String s2) { NodeValue nv1 = NodeValue.parse(s1) ; NodeValue nv2 = NodeValue.parse(s2) ; return NodeValueOps.multiplicationNV(nv1, nv2) ; }
static NodeValue testDiv(String s1, String s2) { NodeValue nv1 = NodeValue.parse(s1) ; NodeValue nv2 = NodeValue.parse(s2) ; return NodeValueOps.divisionNV(nv1, nv2) ; }