|
11 | 11 | """
|
12 | 12 |
|
13 | 13 | from unittest import TestCase
|
| 14 | +import json |
14 | 15 |
|
15 | 16 | import responses
|
16 | 17 | from sqlalchemy import (
|
17 | 18 | BigInteger, Column, Integer, MetaData, String, Table,
|
18 |
| - column, select, |
| 19 | + column, select, types, |
19 | 20 | )
|
20 | 21 | from sqlalchemy.engine import make_url
|
21 | 22 |
|
@@ -215,6 +216,31 @@ def test_gets_columns_with_different_default_values(self):
|
215 | 216 | },
|
216 | 217 | ])
|
217 | 218 |
|
| 219 | + @responses.activate |
| 220 | + def test_gets_columns_with_big_decimal_type(self): |
| 221 | + table_name = 'some-table' |
| 222 | + url = f'{self.dialect._controller}/tables/{table_name}/schema' |
| 223 | + responses.get(url, json={ |
| 224 | + 'tables': [table_name], |
| 225 | + 'timeFieldSpec': {}, |
| 226 | + 'dimensionFieldSpecs': [{ |
| 227 | + 'name': 'price', |
| 228 | + 'dataType': 'BIG_DECIMAL', |
| 229 | + 'defaultNullValue': '0.00', |
| 230 | + }], |
| 231 | + }) |
| 232 | + |
| 233 | + columns = self.dialect.get_columns('conn', table_name) |
| 234 | + |
| 235 | + self.assertEqual(columns, [ |
| 236 | + { |
| 237 | + 'default': '0.00', |
| 238 | + 'name': 'price', |
| 239 | + 'nullable': True, |
| 240 | + 'type': types.Numeric, |
| 241 | + }, |
| 242 | + ]) |
| 243 | + |
218 | 244 | @responses.activate
|
219 | 245 | def test_gets_columns_with_time_spec(self):
|
220 | 246 | table_name = 'some-table'
|
@@ -269,18 +295,29 @@ def test_gets_unique_constraints(self):
|
269 | 295 |
|
270 | 296 | self.assertEqual(result, [])
|
271 | 297 |
|
272 |
| - def test_gets_view_definition(self): |
273 |
| - self.assertIsNone(self.dialect.get_view_definition('conn', 'table')) |
274 |
| - |
275 |
| - def test_cannot_rollback(self): |
276 |
| - self.assertIsNone(self.dialect.do_rollback('conn')) |
277 |
| - |
278 | 298 | def test_checks_unicode_returns(self):
|
279 | 299 | self.assertTrue(self.dialect._check_unicode_returns('conn'))
|
280 | 300 |
|
281 | 301 | def test_checks_unicode_description(self):
|
282 | 302 | self.assertTrue(self.dialect._check_unicode_description('conn'))
|
283 | 303 |
|
| 304 | + def test_json_deserializer(self): |
| 305 | + # Test with string input |
| 306 | + self.assertEqual(self.dialect._json_deserializer('{"key": "value"}'), {"key": "value"}) |
| 307 | + # Test with bytes input |
| 308 | + self.assertEqual(self.dialect._json_deserializer(b'{"key": "value"}'), {"key": "value"}) |
| 309 | + # Test with already parsed JSON |
| 310 | + self.assertEqual(self.dialect._json_deserializer({"key": "value"}), {"key": "value"}) |
| 311 | + # Test with non-JSON string - should raise JSONDecodeError |
| 312 | + with self.assertRaises(json.JSONDecodeError): |
| 313 | + self.dialect._json_deserializer("not json") |
| 314 | + |
| 315 | + def test_get_view_definition(self): |
| 316 | + self.assertIsNone(self.dialect.get_view_definition('conn', 'view_name')) |
| 317 | + |
| 318 | + def test_do_rollback(self): |
| 319 | + self.assertIsNone(self.dialect.do_rollback('conn')) |
| 320 | + |
284 | 321 |
|
285 | 322 | class PinotMultiStageDialectTest(PinotTestCase):
|
286 | 323 | def setUp(self) -> None:
|
|
0 commit comments