summaryrefslogtreecommitdiff
path: root/test/sql/case_statement.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/sql/case_statement.py')
-rw-r--r--test/sql/case_statement.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/test/sql/case_statement.py b/test/sql/case_statement.py
new file mode 100644
index 000000000..fc0e919a5
--- /dev/null
+++ b/test/sql/case_statement.py
@@ -0,0 +1,59 @@
+import sys
+import testbase
+from sqlalchemy import *
+
+
+class CaseTest(testbase.PersistTest):
+
+ def setUpAll(self):
+ global info_table
+ info_table = Table('infos', testbase.db,
+ Column('pk', Integer, primary_key=True),
+ Column('info', String))
+
+ info_table.create()
+
+ info_table.insert().execute(
+ {'pk':1, 'info':'pk_1_data'},
+ {'pk':2, 'info':'pk_2_data'},
+ {'pk':3, 'info':'pk_3_data'},
+ {'pk':4, 'info':'pk_4_data'},
+ {'pk':5, 'info':'pk_5_data'})
+ def tearDownAll(self):
+ info_table.drop()
+
+ def testcase(self):
+ inner = select([case([[info_table.c.pk < 3, literal('lessthan3', type=String)],
+ [info_table.c.pk >= 3, literal('gt3', type=String)]]).label('x'),
+ info_table.c.pk, info_table.c.info], from_obj=[info_table]).alias('q_inner')
+
+ inner_result = inner.execute().fetchall()
+
+ # Outputs:
+ # lessthan3 1 pk_1_data
+ # lessthan3 2 pk_2_data
+ # gt3 3 pk_3_data
+ # gt3 4 pk_4_data
+ # gt3 5 pk_5_data
+ assert inner_result == [
+ ('lessthan3', 1, 'pk_1_data'),
+ ('lessthan3', 2, 'pk_2_data'),
+ ('gt3', 3, 'pk_3_data'),
+ ('gt3', 4, 'pk_4_data'),
+ ('gt3', 5, 'pk_5_data'),
+ ]
+
+ outer = select([inner])
+
+ outer_result = outer.execute().fetchall()
+
+ assert outer_result == [
+ ('lessthan3', 1, 'pk_1_data'),
+ ('lessthan3', 2, 'pk_2_data'),
+ ('gt3', 3, 'pk_3_data'),
+ ('gt3', 4, 'pk_4_data'),
+ ('gt3', 5, 'pk_5_data'),
+ ]
+
+if __name__ == "__main__":
+ testbase.main()