Skip to content

Commit fa6190a

Browse files
committed
Test returning data in columns and in np objects
1 parent b9494c3 commit fa6190a

File tree

1 file changed

+116
-0
lines changed

1 file changed

+116
-0
lines changed

tests/backends/tests.py

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,122 @@ def test_timezone_none_use_tz_false(self):
560560
connection.init_connection_state()
561561

562562

563+
def check_numpy():
564+
"""Check if numpy is installed."""
565+
566+
try:
567+
import numpy as _
568+
except ImportError:
569+
return False
570+
571+
return True
572+
573+
class ColumnarTestCase(TransactionTestCase):
574+
available_apps = ["backends"]
575+
databases = {"default", "s2r1"}
576+
577+
def test_columnar_query(self):
578+
sql = """
579+
SELECT number, number*2, number*3, number*4, number*5
580+
FROM system.numbers
581+
LIMIT 10
582+
"""
583+
with connections["s2r1"].cursor() as cursorWrapper:
584+
cursorWrapper.cursor.columnar = True
585+
cursorWrapper.execute(sql)
586+
self.assertEqual(
587+
cursorWrapper.fetchall(),
588+
[
589+
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9),
590+
(0, 2, 4, 6, 8, 10, 12, 14, 16, 18),
591+
(0, 3, 6, 9, 12, 15, 18, 21, 24, 27),
592+
(0, 4, 8, 12, 16, 20, 24, 28, 32, 36),
593+
(0, 5, 10, 15, 20, 25, 30, 35, 40, 45),
594+
],
595+
)
596+
597+
cursorWrapper.execute(sql)
598+
self.assertEqual(
599+
cursorWrapper.fetchmany(2),
600+
[
601+
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9),
602+
(0, 2, 4, 6, 8, 10, 12, 14, 16, 18),
603+
],
604+
)
605+
606+
actual_results = [
607+
r
608+
for results in iter(lambda: cursorWrapper.fetchmany(2), [])
609+
for r in results
610+
]
611+
self.assertEqual(
612+
actual_results,
613+
[
614+
(0, 3, 6, 9, 12, 15, 18, 21, 24, 27),
615+
(0, 4, 8, 12, 16, 20, 24, 28, 32, 36),
616+
(0, 5, 10, 15, 20, 25, 30, 35, 40, 45),
617+
],
618+
)
619+
620+
cursorWrapper.execute(sql)
621+
self.assertEqual(
622+
cursorWrapper.fetchone(),
623+
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9),
624+
)
625+
cursorWrapper.cursor.columnar = False
626+
627+
628+
@unittest.skipUnless(check_numpy(), "numpy is not installed")
629+
def test_use_numpy_query(self):
630+
sql = """
631+
SELECT toDateTime32('2022-01-01 01:00:05', 'UTC'), number, number*2.5
632+
FROM system.numbers
633+
LIMIT 3
634+
"""
635+
import numpy as np
636+
637+
with connections["s2r1"].cursor() as cursorWrapper:
638+
cursorWrapper.cursor.columnar = True
639+
cursorWrapper.cursor.use_numpy = True
640+
cursorWrapper.execute(sql)
641+
np.testing.assert_equal(
642+
cursorWrapper.fetchall(),
643+
[
644+
np.array([np.datetime64('2022-01-01T01:00:05'), np.datetime64('2022-01-01T01:00:05'), np.datetime64('2022-01-01T01:00:05')], dtype='datetime64[s]'),
645+
np.array([0, 1, 2], dtype=np.uint64),
646+
np.array([0, 2.5, 5.0], dtype=np.float64)
647+
],
648+
)
649+
650+
cursorWrapper.execute(sql)
651+
np.testing.assert_equal(
652+
cursorWrapper.fetchmany(2),
653+
[
654+
np.array([np.datetime64('2022-01-01T01:00:05'), np.datetime64('2022-01-01T01:00:05'), np.datetime64('2022-01-01T01:00:05')], dtype='datetime64[s]'),
655+
np.array([0, 1, 2], dtype=np.uint64),
656+
],
657+
)
658+
659+
actual_results = [
660+
r
661+
for results in iter(lambda: cursorWrapper.fetchmany(2), [])
662+
for r in results
663+
]
664+
np.testing.assert_equal(
665+
actual_results,
666+
[
667+
np.array([0, 2.5, 5], dtype=np.float64),
668+
],
669+
)
670+
671+
cursorWrapper.execute(sql)
672+
np.testing.assert_equal(
673+
cursorWrapper.fetchone(),
674+
np.array([np.datetime64('2022-01-01T01:00:05'), np.datetime64('2022-01-01T01:00:05'), np.datetime64('2022-01-01T01:00:05')], dtype='datetime64[s]'),
675+
)
676+
cursorWrapper.cursor.columnar = False
677+
cursorWrapper.cursor.use_numpy = False
678+
563679
# These tests aren't conditional because it would require differentiating
564680
# between MySQL+InnoDB and MySQL+MYISAM (something we currently can't do).
565681
class FkConstraintsTests(TransactionTestCase):

0 commit comments

Comments
 (0)