mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
bpo-41662: Fix bugs in binding parameters in sqlite3 (GH-21998)
* When the parameters argument is a list, correctly handle the case of changing it during iteration. * When the parameters argument is a custom sequence, no longer override an exception raised in ``__len__()``.
This commit is contained in:
parent
dcfaa520c4
commit
0b419b7910
5 changed files with 34 additions and 3 deletions
|
@ -270,7 +270,7 @@ class CursorTests(unittest.TestCase):
|
|||
self.assertEqual(row[0], "foo")
|
||||
|
||||
def CheckExecuteParamSequence(self):
|
||||
class L(object):
|
||||
class L:
|
||||
def __len__(self):
|
||||
return 1
|
||||
def __getitem__(self, x):
|
||||
|
@ -282,6 +282,18 @@ class CursorTests(unittest.TestCase):
|
|||
row = self.cu.fetchone()
|
||||
self.assertEqual(row[0], "foo")
|
||||
|
||||
def CheckExecuteParamSequenceBadLen(self):
|
||||
# Issue41662: Error in __len__() was overridden with ProgrammingError.
|
||||
class L:
|
||||
def __len__(self):
|
||||
1/0
|
||||
def __getitem__(slf, x):
|
||||
raise AssertionError
|
||||
|
||||
self.cu.execute("insert into test(name) values ('foo')")
|
||||
with self.assertRaises(ZeroDivisionError):
|
||||
self.cu.execute("select name from test where name=?", L())
|
||||
|
||||
def CheckExecuteDictMapping(self):
|
||||
self.cu.execute("insert into test(name) values ('foo')")
|
||||
self.cu.execute("select name from test where name=:name", {"name": "foo"})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue