summaryrefslogtreecommitdiffstats
path: root/Lib/sqlite3
diff options
context:
space:
mode:
authorErlend Egeberg Aasland <erlend.aasland@innova.no>2021-06-03 15:53:47 (GMT)
committerGitHub <noreply@github.com>2021-06-03 15:53:47 (GMT)
commit82ad22a97d4b5d7134424f12bd6a61167db7f4f8 (patch)
tree753b308bddf46e8b6ea4d468539a237601e8ece7 /Lib/sqlite3
parent937cebc93b4922583218e0cbf0a9a14705a595b2 (diff)
downloadcpython-82ad22a97d4b5d7134424f12bd6a61167db7f4f8.zip
cpython-82ad22a97d4b5d7134424f12bd6a61167db7f4f8.tar.gz
cpython-82ad22a97d4b5d7134424f12bd6a61167db7f4f8.tar.bz2
bpo-42213: Check connection in sqlite3.Connection.__enter__ (GH-26512)
Try to harden connection close: - add tests that exercise stuff against a closed database - add wrapper for sqlite3_close_v2() - check connection on __enter__ - explicitly free pending statements before close() - sqlite3_close_v2() always returns SQLITE_OK
Diffstat (limited to 'Lib/sqlite3')
-rw-r--r--Lib/sqlite3/test/dbapi.py20
1 files changed, 20 insertions, 0 deletions
diff --git a/Lib/sqlite3/test/dbapi.py b/Lib/sqlite3/test/dbapi.py
index 39c9bf5..ab33135 100644
--- a/Lib/sqlite3/test/dbapi.py
+++ b/Lib/sqlite3/test/dbapi.py
@@ -135,6 +135,26 @@ class ConnectionTests(unittest.TestCase):
def test_close(self):
self.cx.close()
+ def test_use_after_close(self):
+ sql = "select 1"
+ cu = self.cx.cursor()
+ res = cu.execute(sql)
+ self.cx.close()
+ self.assertRaises(sqlite.ProgrammingError, res.fetchall)
+ self.assertRaises(sqlite.ProgrammingError, cu.execute, sql)
+ self.assertRaises(sqlite.ProgrammingError, cu.executemany, sql, [])
+ self.assertRaises(sqlite.ProgrammingError, cu.executescript, sql)
+ self.assertRaises(sqlite.ProgrammingError, self.cx.execute, sql)
+ self.assertRaises(sqlite.ProgrammingError,
+ self.cx.executemany, sql, [])
+ self.assertRaises(sqlite.ProgrammingError, self.cx.executescript, sql)
+ self.assertRaises(sqlite.ProgrammingError,
+ self.cx.create_function, "t", 1, lambda x: x)
+ self.assertRaises(sqlite.ProgrammingError, self.cx.cursor)
+ with self.assertRaises(sqlite.ProgrammingError):
+ with self.cx:
+ pass
+
def test_exceptions(self):
# Optional DB-API extension.
self.assertEqual(self.cx.Warning, sqlite.Warning)