def test_should_sniff_raise_exception(self):
     invalid_call_args = [
         (('type', 1), ),  # Invalid type
     ]
     for invalid_call_arg in invalid_call_args:
         with self.assertRaises(InvalidOperator):
             Operator.sniff(invalid_call_arg)
Exemple #2
0
    def _parse_expression(expression, order=None):
        equations = []
        if not order:
            order = expression.keys()

        for column in order:
            operator, value = Operator.sniff(expression[column])
            equations.append(OperatorParser(operator).parse(column, value))

        return equations
Exemple #3
0
    def test_select_from_where(self):
        """Asserts Statement object Where"""
        scenarios = [{
            'expected': 'WHERE A == 1',
            'elements': ('A == 1', )
        }, {
            'expected': 'WHERE A == 1',
            'elements': (Ex({'A': 1}), )
        }, {
            'expected': 'WHERE A == 1',
            'elements': (Ex({'A': op.equal(1)}), )
        }, {
            'expected': 'WHERE A > 1',
            'elements': (Ex({'A': op.bigger(1)}), )
        }, {
            'expected': 'WHERE A >= 1',
            'elements': (Ex({'A': op.bigger_or_equal(1)}), )
        }, {
            'expected': 'WHERE A < 1',
            'elements': (Ex({'A': op.smaller(1)}), )
        }, {
            'expected': 'WHERE A <= 1',
            'elements': (Ex({'A': op.smaller_or_equal(1)}), )
        }, {
            'expected': 'WHERE A <> 1',
            'elements': (Ex({'A': op.different(1)}), )
        }, {
            'expected': 'WHERE DAY IN (20, 30, 40)',
            'elements': (Ex({'DAY': [20, 30, 40]}), )
        }, {
            'expected': 'WHERE DAY IN (20, 30, 40)',
            'elements': (Ex({'DAY': op.in_operator([20, 30, 40])}), )
        }, {
            'expected': 'WHERE DAY IN (\'20\', \'30\', \'40\')',
            'elements': (Ex({'DAY': ['20', '30', '40']}), )
        }, {
            'expected':
            'WHERE REFERENCE_DAY BETWEEN \'20170101\' AND \'20170731\'',
            'elements':
            ('REFERENCE_DAY BETWEEN \'20170101\' AND \'20170731\'', )
        }, {
            'expected':
            'WHERE REFERENCE_DAY BETWEEN \'20170701\' AND \'20170731\'',
            'elements':
            (Ex({'REFERENCE_DAY': op.between('20170701', '20170731')}), )
        }, {
            'expected': 'WHERE A == 1 OR B == 1',
            'elements': ('A == 1 OR B == 1', )
        }, {
            'expected': 'WHERE (A == 1 OR B == 1)',
            'elements': (ExOr({
                'A': 1,
                'B': 1
            }, order=['A', 'B']), )
        }, {
            'expected':
            'WHERE (A == 1 AND (B == 2 OR C == 3))',
            'elements': (Ex(Ex({'A': 1}),
                            ExOr({
                                'B': 2,
                                'C': 3
                            }, order=['B', 'C'])), )
        }, {
            'expected': 'WHERE A == 1 AND B == 2',
            'elements': (Ex({
                'A': 1
            }).add(Ex({'B': 2})), )
        }, {
            'expected': 'WHERE A == 1 AND B == 2',
            'elements': (Ex({'A': 1}) + Ex({'B': 2}), )
        }]
        for scenario in scenarios:
            elements = scenario['elements']
            expected = scenario['expected']

            statement = Where().add(*elements)
            actual = statement.parse()
            self.assertEqualQueries(expected, actual)
 def test_should_sniff_operator(self):
     scenarios = [
         {
             'expected': (
                 EQUAL_OPERATOR_STR,
                 1,
             ),
             'call_args': Operator.equal(1)
         },
         {
             'expected': (
                 BIGGER_OPERATOR_STR,
                 1,
             ),
             'call_args': Operator.bigger(1)
         },
         {
             'expected': (
                 BIGGER_OR_EQUAL_OPERATOR_STR,
                 1,
             ),
             'call_args': Operator.bigger_or_equal(1)
         },
         {
             'expected': (
                 SMALLER_OPERATOR_STR,
                 1,
             ),
             'call_args': Operator.smaller(1)
         },
         {
             'expected': (
                 SMALLER_OR_EQUAL_OPERATOR_STR,
                 1,
             ),
             'call_args': Operator.smaller_or_equal(1)
         },
         {
             'expected': (
                 DIFFERENT_OPERATOR_STR,
                 1,
             ),
             'call_args': Operator.different(1)
         },
         {
             'expected': (
                 IN_OPERATOR_STR,
                 [1, 2, 3],
             ),
             'call_args': Operator.in_operator(1, 2, 3)
         },
         {
             'expected': (
                 IN_OPERATOR_STR,
                 [1, 2, 3],
             ),
             'call_args': Operator.in_operator([1, 2, 3])
         },
         {
             'expected': (
                 LIKE_OPERATOR_STR,
                 '%WORKA%',
             ),
             'call_args': Operator.like('%WORKA%')
         },
         {
             'expected': (
                 BETWEEN_OPERATOR_STR,
                 (
                     '20170701',
                     '20170731',
                 ),
             ),
             'call_args': Operator.between('20170701', '20170731')
         },
     ]
     for scenario in scenarios:
         expected = scenario['expected']
         call_args = scenario['call_args']
         actual = Operator.sniff(call_args)
         self.assertEqual(expected, actual)
 def test_should_sniff_tuple(self):
     expected = IN_OPERATOR_STR, [1, 2]
     actual = Operator().sniff(1, 2)
     self.assertEqual(expected, actual)
 def test_should_sniff_single_argument(self):
     expected = EQUAL_OPERATOR_STR, 1
     actual = Operator().sniff(1)
     self.assertEqual(expected, actual)
 def test_in_operator_list_provided(self):
     expected = IN_OPERATOR_STR, ['BRAZIL', 'NETHERLANDS', 'FINLAND']
     actual = Operator.in_operator(['BRAZIL', 'NETHERLANDS', 'FINLAND'])
     self.assertEqual(expected, actual)
 def test_in_operator_single_element_provided(self):
     expected = IN_OPERATOR_STR, ['BRAZIL']
     actual = Operator.in_operator('BRAZIL')
     self.assertEqual(expected, actual)
 def test_between_operator(self):
     expected = BETWEEN_OPERATOR_STR, ('20170701', '20170731')
     actual = Operator.between('20170701', '20170731')
     self.assertEqual(expected, actual)
Exemple #10
0
 def test_equal_operator(self):
     expected = EQUAL_OPERATOR_STR, 'Uberaba'
     actual = Operator.equal('Uberaba')
     self.assertEqual(expected, actual)
Exemple #11
0
 def test_like_operator(self):
     expected = LIKE_OPERATOR_STR, '%WORKER%'
     actual = Operator.like('%WORKER%')
     self.assertEqual(expected, actual)