@@ -259,3 +259,191 @@ def test_row_object_for_factory_string_representation(
259259 row = cursor .fetchone ()
260260
261261 assert str (row ) == "Bar: foo\n Doe: john"
262+
263+ def test_last_rowid_and_rowcount_with_select (self , sqlitecloud_dbapi2_connection ):
264+ connection = sqlitecloud_dbapi2_connection
265+
266+ cursor = connection .execute ("SELECT * FROM genres LIMIT 3" )
267+
268+ assert cursor .fetchone () is not None
269+ assert cursor .lastrowid is None
270+ assert cursor .rowcount == 3
271+
272+ def test_last_rowid_and_rowcount_with_execute_update (
273+ self , sqlitecloud_dbapi2_connection
274+ ):
275+ connection = sqlitecloud_dbapi2_connection
276+
277+ new_name = "Jazz" + str (uuid .uuid4 ())
278+ genreId = 2
279+
280+ cursor = connection .execute (
281+ "UPDATE genres SET Name = ? WHERE GenreId = ?" ,
282+ (new_name , genreId ),
283+ )
284+
285+ assert cursor .fetchone () is None
286+ assert cursor .lastrowid is None
287+ assert cursor .rowcount == 1
288+
289+ def test_last_rowid_and_rowcount_with_execute_insert (
290+ self , sqlitecloud_dbapi2_connection
291+ ):
292+ connection = sqlitecloud_dbapi2_connection
293+
294+ new_name = "Jazz" + str (uuid .uuid4 ())
295+
296+ cursor = connection .execute (
297+ "INSERT INTO genres (Name) VALUES (?)" ,
298+ (new_name ,),
299+ )
300+
301+ last_result = connection .execute (
302+ "SELECT GenreId FROM genres WHERE Name = ?" , (new_name ,)
303+ )
304+
305+ assert cursor .fetchone () is None
306+ assert cursor .lastrowid == last_result .fetchone ()[0 ]
307+ assert cursor .rowcount == 1
308+
309+ def test_last_rowid_and_rowcount_with_execute_delete (
310+ self , sqlitecloud_dbapi2_connection
311+ ):
312+ connection = sqlitecloud_dbapi2_connection
313+
314+ new_name = "Jazz" + str (uuid .uuid4 ())
315+
316+ cursor_select = connection .execute (
317+ "INSERT INTO genres (Name) VALUES (?)" ,
318+ (new_name ,),
319+ )
320+
321+ cursor = connection .execute ("DELETE FROM genres WHERE Name = ?" , (new_name ,))
322+
323+ assert cursor .fetchone () is None
324+ assert cursor .lastrowid == cursor_select .lastrowid
325+ assert cursor .rowcount == 1
326+
327+ def test_last_rowid_and_rowcount_with_multiple_updates (
328+ self , sqlitecloud_dbapi2_connection
329+ ):
330+ connection = sqlitecloud_dbapi2_connection
331+
332+ new_name = "Jazz" + str (uuid .uuid4 ())
333+
334+ cursor = connection .execute (
335+ "UPDATE genres SET Name = ? WHERE GenreId = ? or GenreId = ?" ,
336+ (new_name , 2 , 3 ),
337+ )
338+
339+ assert cursor .fetchone () is None
340+ assert cursor .lastrowid is None
341+ assert cursor .rowcount == 2
342+
343+ def test_last_rowid_and_rowcount_with_multiple_deletes (
344+ self , sqlitecloud_dbapi2_connection
345+ ):
346+ connection = sqlitecloud_dbapi2_connection
347+
348+ new_name1 = "Jazz" + str (uuid .uuid4 ())
349+ new_name2 = "Jazz" + str (uuid .uuid4 ())
350+
351+ cursor = connection .executemany (
352+ "INSERT INTO genres (Name) VALUES (?)" ,
353+ [(new_name1 ,), (new_name2 ,)],
354+ )
355+
356+ cursor = connection .execute (
357+ "DELETE FROM genres WHERE Name = ? or Name = ?" , (new_name1 , new_name2 )
358+ )
359+
360+ assert cursor .fetchone () is None
361+ assert cursor .lastrowid > 0
362+ assert cursor .rowcount == 2
363+
364+ def test_last_rowid_and_rowcount_with_executemany_updates (
365+ self , sqlitecloud_dbapi2_connection
366+ ):
367+ connection = sqlitecloud_dbapi2_connection
368+
369+ new_name1 = "Jazz" + str (uuid .uuid4 ())
370+ new_name2 = "Jazz" + str (uuid .uuid4 ())
371+ genreId = 2
372+
373+ cursor = connection .executemany (
374+ "UPDATE genres SET Name = ? WHERE GenreId = ?;" ,
375+ [(new_name1 , genreId ), (new_name2 , genreId )],
376+ )
377+
378+ assert cursor .fetchone () is None
379+ assert cursor .lastrowid is None
380+ assert cursor .rowcount == 1
381+
382+ def test_last_rowid_and_rowcount_with_executemany_inserts (
383+ self , sqlitecloud_dbapi2_connection
384+ ):
385+ connection = sqlitecloud_dbapi2_connection
386+
387+ new_name1 = "Jazz" + str (uuid .uuid4 ())
388+ new_name2 = "Jazz" + str (uuid .uuid4 ())
389+
390+ cursor = connection .executemany (
391+ "INSERT INTO genres (Name) VALUES (?)" ,
392+ [(new_name1 ,), (new_name2 ,)],
393+ )
394+
395+ last_result = connection .execute (
396+ "SELECT GenreId FROM genres WHERE Name = ?" , (new_name2 ,)
397+ )
398+
399+ assert cursor .fetchone () is None
400+ assert cursor .lastrowid == last_result .fetchone ()[0 ]
401+ assert cursor .rowcount == 1
402+
403+ def test_last_rowid_and_rowcount_with_executemany_deletes (
404+ self , sqlitecloud_dbapi2_connection
405+ ):
406+ connection = sqlitecloud_dbapi2_connection
407+
408+ new_name1 = "Jazz" + str (uuid .uuid4 ())
409+ new_name2 = "Jazz" + str (uuid .uuid4 ())
410+
411+ cursor_select = connection .executemany (
412+ "INSERT INTO genres (Name) VALUES (?)" ,
413+ [(new_name1 ,), (new_name2 ,)],
414+ )
415+
416+ cursor = connection .executemany (
417+ "DELETE FROM genres WHERE Name = ?" , [(new_name1 ,), (new_name2 ,)]
418+ )
419+
420+ assert cursor .fetchone () is None
421+ assert cursor .lastrowid == cursor_select .lastrowid
422+ assert cursor .rowcount == 1
423+
424+ def test_connection_total_changes (self , sqlitecloud_dbapi2_connection ):
425+ connection = sqlitecloud_dbapi2_connection
426+
427+ new_name1 = "Jazz" + str (uuid .uuid4 ())
428+ new_name2 = "Jazz" + str (uuid .uuid4 ())
429+ new_name3 = "Jazz" + str (uuid .uuid4 ())
430+
431+ connection .executemany (
432+ "INSERT INTO genres (Name) VALUES (?)" ,
433+ [(new_name1 ,), (new_name2 ,)],
434+ )
435+ assert connection .total_changes == 2
436+
437+ connection .execute ("SELECT * FROM genres" )
438+ assert connection .total_changes == 2
439+
440+ connection .execute (
441+ "UPDATE genres SET Name = ? WHERE Name = ?" , (new_name3 , new_name1 )
442+ )
443+ assert connection .total_changes == 3
444+
445+ connection .execute (
446+ "DELETE FROM genres WHERE Name in (?, ?, ?)" ,
447+ (new_name1 , new_name2 , new_name3 ),
448+ )
449+ assert connection .total_changes == 5
0 commit comments