1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
from ql.ast.nodes.expressions.binary_operators.binary_operator import BinaryOperatorNode
from ql.types.decimal import QLDecimal
from ql.types.integer import QLInteger
from ql.types.money import QLMoney
from ql.types.undefined import QLUndefined
class DivisionOperatorNode(BinaryOperatorNode):
def __init__(self, metadata, expression_type, left_expression, right_expression, value):
super(DivisionOperatorNode, self).__init__(metadata, expression_type,
left_expression, right_expression, value)
self.__valid_types = {
(QLDecimal, QLDecimal): QLDecimal,
(QLDecimal, QLInteger): QLDecimal,
(QLInteger, QLInteger): QLDecimal,
(QLInteger, QLDecimal): QLDecimal,
(QLMoney, QLDecimal): QLMoney,
(QLMoney, QLInteger): QLMoney,
}
def get_result_type(self):
if self.__valid_types.get((self.left_expression.expression_type, self.right_expression.expression_type)):
return self.__valid_types.get((self.left_expression.expression_type, self.right_expression.expression_type))
return QLUndefined
def evaluate(self):
try:
self.value = self.left_expression.value / self.right_expression.value
except ZeroDivisionError:
self.value = QLUndefined()
|