예제 #1
0
    def test_escaped_params(self):

        foo = 123

        bound = bind('''SELECT '%s' ''')
        q, p = bound(Postgres)
        self.assertEqual(q, '''SELECT '%s' ''')

        bound = bind('''SELECT '%s', {foo} ''')
        q, p = bound(Postgres)
        self.assertEqual(q, '''SELECT '%%s', %s ''')
예제 #2
0
    def test_indexes(self):

        q, p = bind('SELECT {0}, {1}', ('foo', 'bar'))()
        self.assertEqual(q, 'SELECT ?, ?')
        self.assertEqual(p, ['foo', 'bar'])

        q, p = bind('SELECT {1}, {0}', ('foo', 'bar'))()
        self.assertEqual(q, 'SELECT ?, ?')
        self.assertEqual(p, ['bar', 'foo'])

        q, p = bind('SELECT {0}, {1}, {0}', ('foo', 'bar'))()
        self.assertEqual(q, 'SELECT ?, ?, ?')
        self.assertEqual(p, ['foo', 'bar', 'foo'])
예제 #3
0
    def test_scope(self):

        foo = 234

        q, p = bind('SELECT {foo}, {global_bar}')()
        self.assertEqual(q, 'SELECT ?, ?')
        self.assertEqual(p, [234, 345])

        # Expressions.
        q, p = bind('SELECT {foo + global_bar}')()
        self.assertEqual(q, 'SELECT ?')
        self.assertEqual(p, [234 + 345])

        # Deep expressions.
        foodict = dict(foo=456)
        q, p = bind('SELECT {foodict["foo"]}')()
        self.assertEqual(q, 'SELECT ?')
        self.assertEqual(p, [456])
예제 #4
0
    def test_values(self):

        bound = bind('INSERT INTO foo VALUES {x:values}', dict(x=(1, 123)))

        q, p = bound()
        self.assertEqual(q, 'INSERT INTO foo VALUES (?, ?)')
        self.assertEqual(p, [1, 123])

        q, p = bound(Postgres)
        self.assertEqual(q, 'INSERT INTO foo VALUES (%s, %s)')
예제 #5
0
    def test_multi_values(self):

        bound = bind('INSERT INTO foo VALUES {x:values_list}',
                     dict(x=[
                         (1, 123),
                         (2, 234),
                     ]))

        q, p = bound()
        self.assertEqual(q, 'INSERT INTO foo VALUES (?, ?), (?, ?)')
        self.assertEqual(p, [1, 123, 2, 234])
예제 #6
0
    def test_engines(self):

        # Identifiers.

        bq = bind('SELECT * FROM {table:i} WHERE id = {id}',
                  dict(table='foo', id=123))
        q, p = bq()
        self.assertEqual(q, 'SELECT * FROM "foo" WHERE id = ?')
        self.assertEqual(p, [123])

        q, p = bq(SQLite)
        self.assertEqual(q, 'SELECT * FROM "foo" WHERE id = ?')
        self.assertEqual(p, [123])

        q, p = bq(Postgres)
        self.assertEqual(q, 'SELECT * FROM "foo" WHERE id = %s')
        self.assertEqual(p, [123])

        # Serial primary keys.

        bq = bind('CREATE TABLE foo (id {SERIAL PRIMARY KEY!t})')
        q, p = bq()
        self.assertEqual(q, 'CREATE TABLE foo (id SERIAL PRIMARY KEY)')
        self.assertEqual(p, [])

        q, p = bq(SQLite)
        self.assertEqual(q, 'CREATE TABLE foo (id INTEGER PRIMARY KEY)')
        self.assertEqual(p, [])

        # Gotta pass through the underlying ones.

        q, p = bind('SELECT %s', [1])()
        self.assertEqual(q, 'SELECT %s')
        self.assertEqual(p, [1])

        q, p = bind('SELECT ?', [1])()
        self.assertEqual(q, 'SELECT ?')
        self.assertEqual(p, [1])
예제 #7
0
    def test_literal(self):

        func = 'now'
        bound = bind('SELECT {func:literal}()')
        q, p = bound()
        self.assertEqual(q, 'SELECT now()')