switch (operation) {
case COUNT:
return super.getItemType(th);
case SUM: {
//ItemType base = argument[0].getItemType();
ItemType base = Atomizer.getAtomizedItemType(argument[0], false, th);
if (base.equals(BuiltInAtomicType.UNTYPED_ATOMIC)) {
base = BuiltInAtomicType.DOUBLE;
}
if (Cardinality.allowsZero(argument[0].getCardinality())) {
if (argument.length == 1) {
return Type.getCommonSuperType(base, BuiltInAtomicType.INTEGER, th);
} else {
return Type.getCommonSuperType(base, argument[1].getItemType(th), th);
}
} else {
return base;
}
}
case AVG: {
ItemType base = Atomizer.getAtomizedItemType(argument[0], false, th);
if (base.equals(BuiltInAtomicType.UNTYPED_ATOMIC)) {
return BuiltInAtomicType.DOUBLE;
} else if (base.getPrimitiveType() == StandardNames.XS_INTEGER) {
return BuiltInAtomicType.DECIMAL;
} else {
return base;
}
}