MCPcopy Create free account
hub / github.com/BaseXdb/basex / eval

Method eval

basex-core/src/main/java/org/basex/query/expr/Calc.java:24–50  ·  view source on GitHub ↗
(final Item item1, final Item item2, final InputInfo info)

Source from the content-addressed store, hash-verified

22 /** Addition. */
23 ADD("+") {
24 @Override
25 public Item eval(final Item item1, final Item item2, final InputInfo info)
26 throws QueryException {
27 final Type type1 = item1.type, type2 = item2.type;
28 final boolean num1 = type1.isNumberOrUntyped(), num2 = type2.isNumberOrUntyped();
29 if(num1 && num2) {
30 return switch(numType(type1, type2)) {
31 case INTEGER -> addInt(item1, item2, info);
32 case DOUBLE -> addDbl(item1, item2, info);
33 case FLOAT -> addFlt(item1, item2, info);
34 default -> addDec(item1, item2, info);
35 };
36 } else if(type1 == type2) {
37 if(type1 == YEAR_MONTH_DURATION) return new YMDur((YMDur) item1, (YMDur) item2, true, info);
38 if(type1 == DAY_TIME_DURATION) return new DTDur((DTDur) item1, (DTDur) item2, true, info);
39 } else {
40 if(type1.instanceOf(DATE_TIME)) return new Dtm((Dtm) item1, dur(info, item2), true, info);
41 if(type2.instanceOf(DATE_TIME)) return new Dtm((Dtm) item2, dur(info, item1), true, info);
42 if(type1 == DATE) return new Dat((Dat) item1, dur(info, item2), true, info);
43 if(type2 == DATE) return new Dat((Dat) item2, dur(info, item1), true, info);
44 if(type1 == TIME && type2 == DAY_TIME_DURATION)
45 return new Tim((Tim) item1, (DTDur) item2, true);
46 if(type2 == TIME && type1 == DAY_TIME_DURATION)
47 return new Tim((Tim) item2, (DTDur) item1, true);
48 }
49 throw typeError(info, item1, item2);
50 }
51
52 @Override
53 public Expr optimize(final Expr expr1, final Expr expr2, final InputInfo info,

Callers

nothing calls this directly

Calls 15

isNumberOrUntypedMethod · 0.95
numTypeMethod · 0.95
instanceOfMethod · 0.95
durMethod · 0.95
typeErrorMethod · 0.95
oneOfMethod · 0.95
getMethod · 0.95
addDblMethod · 0.80
addFltMethod · 0.80
addDecMethod · 0.80
subtractIntMethod · 0.80
subtractDblMethod · 0.80

Tested by

no test coverage detected