|
23 | 23 |
|
24 | 24 | import unittest |
25 | 25 | import sqlite3 as sqlite |
| 26 | +from collections.abc import Sequence |
26 | 27 |
|
27 | 28 | class MyConnection(sqlite.Connection): |
28 | 29 | def __init__(self, *args, **kwargs): |
@@ -96,9 +97,19 @@ def CheckSqliteRowIndex(self): |
96 | 97 | self.assertEqual(col1, 1, "by name: wrong result for column 'A'") |
97 | 98 | self.assertEqual(col2, 2, "by name: wrong result for column 'B'") |
98 | 99 |
|
99 | | - col1, col2 = row[0], row[1] |
100 | | - self.assertEqual(col1, 1, "by index: wrong result for column 0") |
101 | | - self.assertEqual(col2, 2, "by index: wrong result for column 1") |
| 100 | + self.assertEqual(row[0], 1, "by index: wrong result for column 0") |
| 101 | + self.assertEqual(row[1], 2, "by index: wrong result for column 1") |
| 102 | + self.assertEqual(row[-1], 2, "by index: wrong result for column -1") |
| 103 | + self.assertEqual(row[-2], 1, "by index: wrong result for column -2") |
| 104 | + |
| 105 | + with self.assertRaises(IndexError): |
| 106 | + row['c'] |
| 107 | + with self.assertRaises(IndexError): |
| 108 | + row[2] |
| 109 | + with self.assertRaises(IndexError): |
| 110 | + row[-3] |
| 111 | + with self.assertRaises(IndexError): |
| 112 | + row[2**1000] |
102 | 113 |
|
103 | 114 | def CheckSqliteRowIter(self): |
104 | 115 | """Checks if the row object is iterable""" |
@@ -142,6 +153,15 @@ def CheckSqliteRowHashCmp(self): |
142 | 153 | self.assertNotEqual(row_1, row_3) |
143 | 154 | self.assertNotEqual(hash(row_1), hash(row_3)) |
144 | 155 |
|
| 156 | + def CheckSqliteRowAsSequence(self): |
| 157 | + """ Checks if the row object can act like a sequence """ |
| 158 | + self.con.row_factory = sqlite.Row |
| 159 | + row = self.con.execute("select 1 as a, 2 as b").fetchone() |
| 160 | + |
| 161 | + as_tuple = tuple(row) |
| 162 | + self.assertEqual(list(reversed(row)), list(reversed(as_tuple))) |
| 163 | + self.assertIsInstance(row, Sequence) |
| 164 | + |
145 | 165 | def tearDown(self): |
146 | 166 | self.con.close() |
147 | 167 |
|
|
0 commit comments