@@ -274,6 +274,45 @@ def CheckCursorDescriptionNoRow(self):
274274 self .cur .execute ("select * from test where 0 = 1" )
275275 self .assertEqual (self .cur .description [0 ][0 ], "x" )
276276
277+ def CheckCursorDescriptionInsert (self ):
278+ self .cur .execute ("insert into test values (1)" )
279+ self .assertIsNone (self .cur .description )
280+
281+
282+ @unittest .skipIf (sqlite .sqlite_version_info < (3 , 8 , 3 ), "CTEs not supported" )
283+ class CommonTableExpressionTests (unittest .TestCase ):
284+
285+ def setUp (self ):
286+ self .con = sqlite .connect (":memory:" )
287+ self .cur = self .con .cursor ()
288+ self .cur .execute ("create table test(x foo)" )
289+
290+ def tearDown (self ):
291+ self .cur .close ()
292+ self .con .close ()
293+
294+ def CheckCursorDescriptionCTESimple (self ):
295+ self .cur .execute ("with one as (select 1) select * from one" )
296+ self .assertIsNotNone (self .cur .description )
297+ self .assertEqual (self .cur .description [0 ][0 ], "1" )
298+
299+ def CheckCursorDescriptionCTESMultipleColumns (self ):
300+ self .cur .execute ("insert into test values(1)" )
301+ self .cur .execute ("insert into test values(2)" )
302+ self .cur .execute ("with testCTE as (select * from test) select * from testCTE" )
303+ self .assertIsNotNone (self .cur .description )
304+ self .assertEqual (self .cur .description [0 ][0 ], "x" )
305+
306+ def CheckCursorDescriptionCTE (self ):
307+ self .cur .execute ("insert into test values (1)" )
308+ self .cur .execute ("with bar as (select * from test) select * from test where x = 1" )
309+ self .assertIsNotNone (self .cur .description )
310+ self .assertEqual (self .cur .description [0 ][0 ], "x" )
311+ self .cur .execute ("with bar as (select * from test) select * from test where x = 2" )
312+ self .assertIsNotNone (self .cur .description )
313+ self .assertEqual (self .cur .description [0 ][0 ], "x" )
314+
315+
277316class ObjectAdaptationTests (unittest .TestCase ):
278317 def cast (obj ):
279318 return float (obj )
@@ -372,7 +411,8 @@ def suite():
372411 adaptation_suite = unittest .makeSuite (ObjectAdaptationTests , "Check" )
373412 bin_suite = unittest .makeSuite (BinaryConverterTests , "Check" )
374413 date_suite = unittest .makeSuite (DateTimeTests , "Check" )
375- return unittest .TestSuite ((sqlite_type_suite , decltypes_type_suite , colnames_type_suite , adaptation_suite , bin_suite , date_suite ))
414+ cte_suite = unittest .makeSuite (CommonTableExpressionTests , "Check" )
415+ return unittest .TestSuite ((sqlite_type_suite , decltypes_type_suite , colnames_type_suite , adaptation_suite , bin_suite , date_suite , cte_suite ))
376416
377417def test ():
378418 runner = unittest .TextTestRunner ()
0 commit comments