Exemplo n.º 1
0
    def test_nested_queries(self):
        query1 = SqlStatement('SELECT 3 as x')
        query2 = SqlStatement('SELECT x FROM $query1')
        query3 = 'SELECT * FROM $query2 WHERE x == $count'

        self.assertEquals('SELECT 3 as x', query1.sql)

        with self.assertRaises(Exception) as e:
            _ = SqlStatement.format(query3)[0]
        self.assertEquals('Unsatisfied dependency $query2',
                          e.exception.message)

        with self.assertRaises(Exception) as e:
            _ = SqlStatement.format(query3, {'query1': query1})[0]
        self.assertEquals('Unsatisfied dependency $query2',
                          e.exception.message)

        with self.assertRaises(Exception) as e:
            _ = SqlStatement.format(query3, {'query2': query2})[0]
        self.assertEquals('Unsatisfied dependency $query1',
                          e.exception.message)

        with self.assertRaises(Exception) as e:
            _ = SqlStatement.format(query3, {
                'query1': query1,
                'query2': query2
            })[0]
        self.assertEquals('Unsatisfied dependency $count', e.exception.message)

        formatted_query =\
            SqlStatement.format(query3, {'query1': query1, 'query2': query2, 'count': 5})[0]
        self.assertEqual(
            'SELECT * FROM (SELECT x FROM (SELECT 3 as x)) WHERE x == 5',
            formatted_query)
Exemplo n.º 2
0
 def test_shared_nested_queries(self):
     query1 = SqlStatement('SELECT 3 as x')
     query2 = SqlStatement('SELECT x FROM $query1')
     query3 = 'SELECT x AS y FROM $query1, x FROM $query2'
     formatted_query = SqlStatement.format(query3, {
         'query1': query1,
         'query2': query2
     })[0]
     self.assertEqual(
         'SELECT x AS y FROM (SELECT 3 as x), x FROM (SELECT x FROM (SELECT 3 as x))',
         formatted_query)
Exemplo n.º 3
0
    def test_module_reference(self):
        m = imp.new_module('m')
        m.__dict__['q1'] = SqlStatement('SELECT 3 AS x')
        m.__dict__[SqlModule._SQL_MODULE_LAST] =\
            m.__dict__[SqlModule._SQL_MODULE_LAST] = SqlStatement('SELECT * FROM $q1 LIMIT 10')
        with self.assertRaises(Exception) as e:
            _ = SqlStatement.format('SELECT * FROM $s', {'s': m})
        self.assertEquals('Unsatisfied dependency $q1', e.exception.message)

        formatted_query = SqlStatement.format('SELECT * FROM $s', {
            's': m,
            'q1': m.q1
        })
        self.assertEqual(
            'SELECT * FROM (SELECT * FROM (SELECT 3 AS x) LIMIT 10)',
            formatted_query)

        formatted_query = SqlStatement.format('SELECT * FROM $s', {'s': m.q1})
        self.assertEqual('SELECT * FROM (SELECT 3 AS x)', formatted_query)
Exemplo n.º 4
0
    def test_circular_references(self):
        query1 = SqlStatement('SELECT * FROM $query3')
        query2 = SqlStatement('SELECT x FROM $query1')
        query3 = SqlStatement('SELECT * FROM $query2 WHERE x == $count')
        args = {'query1': query1, 'query2': query2, 'query3': query3}

        with self.assertRaises(Exception) as e:
            _ = SqlStatement.format('SELECT * FROM $query1', args)[0]
        self.assertEquals('Circular dependency in $query1',
                          e.exception.message)

        with self.assertRaises(Exception) as e:
            _ = SqlStatement.format('SELECT * FROM $query2', args)[0]
        self.assertEquals('Circular dependency in $query2',
                          e.exception.message)

        with self.assertRaises(Exception) as e:
            _ = SqlStatement.format('SELECT * FROM $query3', args)[0]
        self.assertEquals('Circular dependency in $query3',
                          e.exception.message)