diff options
| author | Diana Clarke <diana.joan.clarke@gmail.com> | 2013-03-29 17:25:39 -0400 |
|---|---|---|
| committer | Diana Clarke <diana.joan.clarke@gmail.com> | 2013-03-29 17:25:39 -0400 |
| commit | 0f203d57cda4a6b966330f78f181ebb7089e05e9 (patch) | |
| tree | 249ca2538d51ff33bbfab2ec912790df54b6a8fd /test/sql/test_delete.py | |
| parent | 7dff6f6d490528f5e88493cdf4b14d3136b40d3c (diff) | |
| download | sqlalchemy-0f203d57cda4a6b966330f78f181ebb7089e05e9.tar.gz | |
move the delete tests from CRUDTest into sql/test_delete.py (see #2630)
Diffstat (limited to 'test/sql/test_delete.py')
| -rw-r--r-- | test/sql/test_delete.py | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/test/sql/test_delete.py b/test/sql/test_delete.py new file mode 100644 index 000000000..a8506fe86 --- /dev/null +++ b/test/sql/test_delete.py @@ -0,0 +1,86 @@ +#! coding:utf-8 + +from sqlalchemy import Column, Integer, String, Table, delete, select +from sqlalchemy.dialects import mysql +from sqlalchemy.testing import AssertsCompiledSQL, fixtures + + +class _DeleteTestBase(object): + @classmethod + def define_tables(cls, metadata): + Table('mytable', metadata, + Column('myid', Integer), + Column('name', String), + Column('description', String)) + Table('myothertable', metadata, + Column('otherid', Integer), + Column('othername', String)) + + +class DeleteTest(_DeleteTestBase, fixtures.TablesTest, AssertsCompiledSQL): + __dialect__ = 'default' + + def test_delete(self): + table1 = self.tables.mytable + + self.assert_compile( + delete(table1, table1.c.myid == 7), + 'DELETE FROM mytable WHERE mytable.myid = :myid_1') + + self.assert_compile( + table1.delete().where(table1.c.myid == 7), + 'DELETE FROM mytable WHERE mytable.myid = :myid_1') + + self.assert_compile( + table1.delete(). + where(table1.c.myid == 7). + where(table1.c.name == 'somename'), + 'DELETE FROM mytable ' + 'WHERE mytable.myid = :myid_1 ' + 'AND mytable.name = :name_1') + + def test_prefix_with(self): + table1 = self.tables.mytable + + stmt = table1.delete().\ + prefix_with('A', 'B', dialect='mysql').\ + prefix_with('C', 'D') + + self.assert_compile(stmt, + 'DELETE C D FROM mytable') + + self.assert_compile(stmt, + 'DELETE A B C D FROM mytable', + dialect=mysql.dialect()) + + def test_alias(self): + table1 = self.tables.mytable + + talias1 = table1.alias('t1') + stmt = delete(talias1).where(talias1.c.myid == 7) + + self.assert_compile(stmt, + 'DELETE FROM mytable AS t1 WHERE t1.myid = :myid_1') + + def test_correlated(self): + table1, table2 = self.tables.mytable, self.tables.myothertable + + # test a non-correlated WHERE clause + s = select([table2.c.othername], table2.c.otherid == 7) + self.assert_compile(delete(table1, table1.c.name == s), + 'DELETE FROM mytable ' + 'WHERE mytable.name = (' + 'SELECT myothertable.othername ' + 'FROM myothertable ' + 'WHERE myothertable.otherid = :otherid_1' + ')') + + # test one that is actually correlated... + s = select([table2.c.othername], table2.c.otherid == table1.c.myid) + self.assert_compile(table1.delete(table1.c.name == s), + 'DELETE FROM mytable ' + 'WHERE mytable.name = (' + 'SELECT myothertable.othername ' + 'FROM myothertable ' + 'WHERE myothertable.otherid = mytable.myid' + ')') |
