8000 bpo-43853: Expand test suite for SQLite UDF's by erlend-aasland · Pull Request #27642 · python/cpython · GitHub
[go: up one dir, main page]

Skip to content

bpo-43853: Expand test suite for SQLite UDF's #27642

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 16 commits into from
Jan 26, 2022
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 18 additions & 53 deletions Lib/sqlite3/test/userfunctions.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,18 +78,8 @@ def func_memoryerror():
def func_overflowerror():
raise OverflowError

def func_isstring(v):
return type(v) is str
def func_isint(v):
return type(v) is int
def func_isfloat(v):
return type(v) is float
def func_isnone(v):
return type(v) is type(None)
def func_isblob(v):
return isinstance(v, (bytes, memoryview))
def func_islonglong(v):
return isinstance(v, int) and v >= 1<<31

def func(*args):
return len(args)
Expand Down Expand Up @@ -198,12 +188,7 @@ def setUp(self):
self.con.create_function("memoryerror", 0, func_memoryerror)
self.con.create_function("overflowerror", 0, func_overflowerror)

self.con.create_function("isstring", 1, func_isstring)
self.con.create_function("isint", 1, func_isint)
self.con.create_function("isfloat", 1, func_isfloat)
self.con.create_function("isnone", 1, func_isnone)
self.con.create_function("isblob", 1, func_isblob)
self.con.create_function("islonglong", 1, func_islonglong)
self.con.create_function("spam", -1, func)
self.con.execute("create table test(t text)")

Expand Down Expand Up @@ -303,44 +288,6 @@ def test_func_overflow_error(self):
cur.execute("select overflowerror()")
cur.fetchone()

def test_param_string(self):
cur = self.con.cursor()
for text in ["foo", str()]:
with self.subTest(text=text):
cur.execute("select isstring(?)", (text,))
val = cur.fetchone()[0]
self.assertEqual(val, 1)

def test_param_int(self):
cur = self.con.cursor()
cur.execute("select isint(?)", (42,))
val = cur.fetchone()[0]
self.assertEqual(val, 1)

def test_param_float(self):
cur = self.con.cursor()
cur.execute("select isfloat(?)", (3.14,))
val = cur.fetchone()[0]
self.assertEqual(val, 1)

def test_param_none(self):
cur = self.con.cursor()
cur.execute("select isnone(?)", (None,))
val = cur.fetchone()[0]
self.assertEqual(val, 1)

def test_param_blob(self):
cur = self.con.cursor()
cur.execute("select isblob(?)", (memoryview(b"blob"),))
val = cur.fetchone()[0]
self.assertEqual(val, 1)

def test_param_long_long(self):
cur = self.con.cursor()
cur.execute("select islonglong(?)", (1<<42,))
val = cur.fetchone()[0]
self.assertEqual(val, 1)

def test_any_arguments(self):
cur = self.con.cursor()
cur.execute("select spam(?, ?)", (1, 2))
Expand All @@ -351,6 +298,24 @@ def test_empty_blob(self):
cur = self.con.execute("select isblob(x'')")
self.assertTrue(cur.fetchone()[0])

def test_func_params(self):
self.con.create_function("boomerang", 1, lambda x: x)
dataset = (
(42, int),
(1<<42, int), # long long
(3.14, float),
("text", str),
("1\x002", str),
(b"blob", bytes),
(None, type(None)),
)
for val, tp in dataset:
with self.subTest(val=val, tp=tp):
cur = self.con.execute("select boomerang(?)", (val,))
retval = cur.fetchone()[0]
self.assertEqual(type(retval), tp)
self.assertEqual(retval, val)

# Regarding deterministic functions:
#
# Between 3.8.3 and 3.15.0, deterministic functions were only used to
Expand Down
0