|
18 | 18 | #
|
19 | 19 | from __future__ import annotations
|
20 | 20 |
|
| 21 | +from collections import namedtuple |
21 | 22 | from unittest import mock
|
22 | 23 | from unittest.mock import patch
|
23 | 24 |
|
@@ -58,139 +59,160 @@ def get_cursor_descriptions(fields: list[str]) -> list[tuple[str]]:
|
58 | 59 | return [(field,) for field in fields]
|
59 | 60 |
|
60 | 61 |
|
| 62 | +# Serializable Row object similar to the one returned by the Hook |
| 63 | +SerializableRow = namedtuple("Row", ["id", "value"]) # type: ignore[name-match] |
| 64 | + |
| 65 | + |
61 | 66 | @pytest.mark.parametrize(
|
62 |
| - "return_last, split_statements, sql, cursor_calls," |
| 67 | + "return_last, split_statements, sql, cursor_calls, return_tuple," |
63 | 68 | "cursor_descriptions, cursor_results, hook_descriptions, hook_results, ",
|
64 | 69 | [
|
65 | 70 | pytest.param(
|
66 | 71 | True,
|
67 | 72 | False,
|
68 | 73 | "select * from test.test",
|
69 | 74 | ["select * from test.test"],
|
| 75 | + False, |
70 | 76 | [["id", "value"]],
|
71 | 77 | ([Row(id=1, value=2), Row(id=11, value=12)],),
|
72 | 78 | [[("id",), ("value",)]],
|
73 |
| - [[1, 2], [11, 12]], |
| 79 | + [Row(id=1, value=2), Row(id=11, value=12)], |
74 | 80 | id="The return_last set and no split statements set on single query in string",
|
75 | 81 | ),
|
76 | 82 | pytest.param(
|
77 | 83 | False,
|
78 | 84 | False,
|
79 | 85 | "select * from test.test;",
|
80 | 86 | ["select * from test.test"],
|
| 87 | + False, |
81 | 88 | [["id", "value"]],
|
82 | 89 | ([Row(id=1, value=2), Row(id=11, value=12)],),
|
83 | 90 | [[("id",), ("value",)]],
|
84 |
| - [[1, 2], [11, 12]], |
| 91 | + [Row(id=1, value=2), Row(id=11, value=12)], |
85 | 92 | id="The return_last not set and no split statements set on single query in string",
|
86 | 93 | ),
|
87 | 94 | pytest.param(
|
88 | 95 | True,
|
89 | 96 | True,
|
90 | 97 | "select * from test.test;",
|
91 | 98 | ["select * from test.test"],
|
| 99 | + False, |
92 | 100 | [["id", "value"]],
|
93 | 101 | ([Row(id=1, value=2), Row(id=11, value=12)],),
|
94 | 102 | [[("id",), ("value",)]],
|
95 |
| - [[1, 2], [11, 12]], |
| 103 | + [Row(id=1, value=2), Row(id=11, value=12)], |
96 | 104 | id="The return_last set and split statements set on single query in string",
|
97 | 105 | ),
|
98 | 106 | pytest.param(
|
99 | 107 | False,
|
100 | 108 | True,
|
101 | 109 | "select * from test.test;",
|
102 | 110 | ["select * from test.test"],
|
| 111 | + False, |
103 | 112 | [["id", "value"]],
|
104 | 113 | ([Row(id=1, value=2), Row(id=11, value=12)],),
|
105 | 114 | [[("id",), ("value",)]],
|
106 |
| - [[[1, 2], [11, 12]]], |
| 115 | + [[Row(id=1, value=2), Row(id=11, value=12)]], |
107 | 116 | id="The return_last not set and split statements set on single query in string",
|
108 | 117 | ),
|
109 | 118 | pytest.param(
|
110 | 119 | True,
|
111 | 120 | True,
|
112 | 121 | "select * from test.test;select * from test.test2;",
|
113 | 122 | ["select * from test.test", "select * from test.test2"],
|
| 123 | + False, |
114 | 124 | [["id", "value"], ["id2", "value2"]],
|
115 | 125 | ([Row(id=1, value=2), Row(id=11, value=12)], [Row(id=3, value=4), Row(id=13, value=14)]),
|
116 | 126 | [[("id2",), ("value2",)]],
|
117 |
| - [[3, 4], [13, 14]], |
| 127 | + [Row(id=3, value=4), Row(id=13, value=14)], |
118 | 128 | id="The return_last set and split statements set on multiple queries in string",
|
119 | 129 | ),
|
120 | 130 | pytest.param(
|
121 | 131 | False,
|
122 | 132 | True,
|
123 | 133 | "select * from test.test;select * from test.test2;",
|
124 | 134 | ["select * from test.test", "select * from test.test2"],
|
| 135 | + False, |
125 | 136 | [["id", "value"], ["id2", "value2"]],
|
126 | 137 | ([Row(id=1, value=2), Row(id=11, value=12)], [Row(id=3, value=4), Row(id=13, value=14)]),
|
127 | 138 | [[("id",), ("value",)], [("id2",), ("value2",)]],
|
128 |
| - [[[1, 2], [11, 12]], [[3, 4], [13, 14]]], |
| 139 | + [ |
| 140 | + [Row(id=1, value=2), Row(id=11, value=12)], |
| 141 | + [Row(id=3, value=4), Row(id=13, value=14)], |
| 142 | + ], |
129 | 143 | id="The return_last not set and split statements set on multiple queries in string",
|
130 | 144 | ),
|
131 | 145 | pytest.param(
|
132 | 146 | True,
|
133 | 147 | True,
|
134 | 148 | ["select * from test.test;"],
|
135 | 149 | ["select * from test.test"],
|
| 150 | + False, |
136 | 151 | [["id", "value"]],
|
137 | 152 | ([Row(id=1, value=2), Row(id=11, value=12)],),
|
138 | 153 | [[("id",), ("value",)]],
|
139 |
| - [[[1, 2], [11, 12]]], |
| 154 | + [[Row(id=1, value=2), Row(id=11, value=12)]], |
140 | 155 | id="The return_last set on single query in list",
|
141 | 156 | ),
|
142 | 157 | pytest.param(
|
143 | 158 | False,
|
144 | 159 | True,
|
145 | 160 | ["select * from test.test;"],
|
146 | 161 | ["select * from test.test"],
|
| 162 | + False, |
147 | 163 | [["id", "value"]],
|
148 | 164 | ([Row(id=1, value=2), Row(id=11, value=12)],),
|
149 | 165 | [[("id",), ("value",)]],
|
150 |
| - [[[1, 2], [11, 12]]], |
| 166 | + [[Row(id=1, value=2), Row(id=11, value=12)]], |
151 | 167 | id="The return_last not set on single query in list",
|
152 | 168 | ),
|
153 | 169 | pytest.param(
|
154 | 170 | True,
|
155 | 171 | True,
|
156 | 172 | "select * from test.test;select * from test.test2;",
|
157 | 173 | ["select * from test.test", "select * from test.test2"],
|
| 174 | + False, |
158 | 175 | [["id", "value"], ["id2", "value2"]],
|
159 | 176 | ([Row(id=1, value=2), Row(id=11, value=12)], [Row(id=3, value=4), Row(id=13, value=14)]),
|
160 | 177 | [[("id2",), ("value2",)]],
|
161 |
| - [[3, 4], [13, 14]], |
| 178 | + [Row(id=3, value=4), Row(id=13, value=14)], |
162 | 179 | id="The return_last set on multiple queries in list",
|
163 | 180 | ),
|
164 | 181 | pytest.param(
|
165 | 182 | False,
|
166 | 183 | True,
|
167 | 184 | "select * from test.test;select * from test.test2;",
|
168 | 185 | ["select * from test.test", "select * from test.test2"],
|
| 186 | + False, |
169 | 187 | [["id", "value"], ["id2", "value2"]],
|
170 | 188 | ([Row(id=1, value=2), Row(id=11, value=12)], [Row(id=3, value=4), Row(id=13, value=14)]),
|
171 | 189 | [[("id",), ("value",)], [("id2",), ("value2",)]],
|
172 |
| - [[[1, 2], [11, 12]], [[3, 4], [13, 14]]], |
| 190 | + [ |
| 191 | + [Row(id=1, value=2), Row(id=11, value=12)], |
| 192 | + [Row(id=3, value=4), Row(id=13, value=14)], |
| 193 | + ], |
173 | 194 | id="The return_last not set on multiple queries not set",
|
174 | 195 | ),
|
175 | 196 | pytest.param(
|
176 | 197 | True,
|
177 | 198 | False,
|
178 | 199 | "select * from test.test",
|
179 | 200 | ["select * from test.test"],
|
| 201 | + True, |
180 | 202 | [["id", "value"]],
|
181 | 203 | (Row(id=1, value=2),),
|
182 | 204 | [[("id",), ("value",)]],
|
183 |
| - [1, 2], |
| 205 | + SerializableRow(1, 2), |
184 | 206 | id="The return_last set and no split statements set on single query in string",
|
185 | 207 | ),
|
186 | 208 | ],
|
187 | 209 | )
|
188 | 210 | def test_query(
|
189 |
| - databricks_hook, |
190 | 211 | return_last,
|
191 | 212 | split_statements,
|
192 | 213 | sql,
|
193 | 214 | cursor_calls,
|
| 215 | + return_tuple, |
194 | 216 | cursor_descriptions,
|
195 | 217 | cursor_results,
|
196 | 218 | hook_descriptions,
|
@@ -227,6 +249,7 @@ def test_query(
|
227 | 249 | cursors.append(cur)
|
228 | 250 | connections.append(conn)
|
229 | 251 | mock_conn.side_effect = connections
|
| 252 | + databricks_hook = DatabricksSqlHook(sql_endpoint_name="Test", return_tuple=return_tuple) |
230 | 253 | results = databricks_hook.run(
|
231 | 254 | sql=sql, handler=fetch_all_handler, return_last=return_last, split_statements=split_statements
|
232 | 255 | )
|
|
0 commit comments