|
199 | 199 | "mysql": "SELECT * FROM iris WHERE `Name` LIKE '%'",
|
200 | 200 | "postgresql": "SELECT * FROM iris WHERE \"Name\" LIKE '%'",
|
201 | 201 | },
|
| 202 | + "read_no_parameters_with_doublepercent": { |
| 203 | + "sqlite": "SELECT 1 %% 2 as x", |
| 204 | + "mysql": "SELECT 1 %% 2 as x", |
| 205 | + "postgresql": "SELECT 1 %% 2 as x", |
| 206 | + }, |
| 207 | + "read_parameters_with_percent": { |
| 208 | + "sqlite": "SELECT ? as x, 2 % 3 as y", |
| 209 | + "mysql": "SELECT %s as x, 2 % 3 as y", |
| 210 | + "postgresql": "SELECT %s as x, 2 % 3 as y", |
| 211 | + }, |
| 212 | + "read_parameters_with_doublepercent": { |
| 213 | + "sqlite": "SELECT ? as x, 2 %% 3 as y", |
| 214 | + "mysql": "SELECT %s as x, 2 %% 3 as y", |
| 215 | + "postgresql": "SELECT %s as x, 2 %% 3 as y", |
| 216 | + }, |
| 217 | + "read_named_parameters_with_doublepercent": { |
| 218 | + "sqlite": "SELECT :name as x, 2 %% 3 as y", |
| 219 | + "mysql": "SELECT %(name)s as x, 2 %% 3 as y", |
| 220 | + "postgresql": "SELECT %(name)s as x, 2 %% 3 as y", |
| 221 | + }, |
202 | 222 | "create_view": {
|
203 | 223 | "sqlite": """
|
204 | 224 | CREATE VIEW iris_view AS
|
@@ -435,6 +455,56 @@ def _read_sql_iris_no_parameter_with_percent(self):
|
435 | 455 | iris_frame = self.pandasSQL.read_query(query, params=None)
|
436 | 456 | self._check_iris_loaded_frame(iris_frame)
|
437 | 457 |
|
| 458 | + def _read_sql_parameter_with_percent(self): |
| 459 | + if self.flavor in {"postgresql", "mysql"}: |
| 460 | + pytest.xfail("dialect DBI does not support parameters and single % ops") |
| 461 | + query = SQL_STRINGS["read_parameters_with_percent"][self.flavor] |
| 462 | + frame = self.pandasSQL.read_query(query, params = [1]) |
| 463 | + tm.assert_frame_equal( |
| 464 | + frame, |
| 465 | + DataFrame({"x": [1], "y": [2]}) |
| 466 | + ) |
| 467 | + |
| 468 | + def _read_sql_iris_no_parameter_with_doublepercent(self): |
| 469 | + query = SQL_STRINGS["read_no_parameters_with_doublepercent"][self.flavor] |
| 470 | + frame = self.pandasSQL.read_query(query) |
| 471 | + tm.assert_frame_equal( |
| 472 | + frame, |
| 473 | + DataFrame({"x": [1]}) |
| 474 | + ) |
| 475 | + |
| 476 | + def _read_sql_no_parameter_with_declarative_percent(self): |
| 477 | + from sqlalchemy import sql |
| 478 | + query = sql.text("SELECT 1 % 2 as x") |
| 479 | + frame = self.pandasSQL.read_query(query) |
| 480 | + tm.assert_frame_equal( |
| 481 | + frame, |
| 482 | + DataFrame({"x": [1]}) |
| 483 | + ) |
| 484 | + |
| 485 | + @pytest.mark.xfail |
| 486 | + def _read_sql_parameter_with_doublepercent(self): |
| 487 | + if self.flavor == "sqlite": |
| 488 | + pytest.xfail("sqlite DBI does not use doublepercent syntax") |
| 489 | + |
| 490 | + query = SQL_STRINGS["read_parameters_with_doublepercent"][self.flavor] |
| 491 | + frame = self.pandasSQL.read_query(query, params = [1]) |
| 492 | + tm.assert_frame_equal( |
| 493 | + frame, |
| 494 | + DataFrame({"x": [1], "y": [2]}) |
| 495 | + ) |
| 496 | + |
| 497 | + def _read_sql_named_parameter_with_doublepercent(self): |
| 498 | + if self.flavor == "sqlite": |
| 499 | + pytest.xfail("sqlite DBI does not use doublepercent syntax") |
| 500 | + |
| 501 | + query = SQL_STRINGS["read_named_parameters_with_doublepercent"][self.flavor] |
| 502 | + frame = self.pandasSQL.read_query(query, params = {'name': 1}) |
| 503 | + tm.assert_frame_equal( |
| 504 | + frame, |
| 505 | + DataFrame({"x": [1], "y": [2]}) |
| 506 | + ) |
| 507 | + |
438 | 508 | def _to_sql(self, method=None):
|
439 | 509 | self.drop_table("test_frame1")
|
440 | 510 |
|
@@ -1286,6 +1356,25 @@ def test_read_sql_parameter(self):
|
1286 | 1356 | def test_read_sql_named_parameter(self):
|
1287 | 1357 | self._read_sql_iris_named_parameter()
|
1288 | 1358 |
|
| 1359 | + def test_read_sql_no_parameter_with_percent(self): |
| 1360 | + self._read_sql_iris_no_parameter_with_percent() |
| 1361 | + |
| 1362 | + @pytest.mark.xfail |
| 1363 | + def test_read_sql_no_parameter_with_doublepercent(self): |
| 1364 | + self._read_sql_iris_no_parameter_with_doublepercent() |
| 1365 | + |
| 1366 | + def test_read_sql_no_parameter_with_declarative_percent(self): |
| 1367 | + self._read_sql_no_parameter_with_declarative_percent() |
| 1368 | + |
| 1369 | + def test_read_sql_parameter_with_percent(self): |
| 1370 | + self._read_sql_parameter_with_percent() |
| 1371 | + |
| 1372 | + def test_read_sql_parameter_with_doublepercent(self): |
| 1373 | + self._read_sql_parameter_with_doublepercent() |
| 1374 | + |
| 1375 | + def test_read_sql_named_parameter_with_doublepercent(self): |
| 1376 | + self._read_sql_named_parameter_with_doublepercent() |
| 1377 | + |
1289 | 1378 | def test_to_sql(self):
|
1290 | 1379 | self._to_sql()
|
1291 | 1380 |
|
@@ -2169,6 +2258,15 @@ def test_read_sql_parameter(self):
|
2169 | 2258 | def test_read_sql_named_parameter(self):
|
2170 | 2259 | self._read_sql_iris_named_parameter()
|
2171 | 2260 |
|
| 2261 | + def test_read_sql_parameter_with_percent(self): |
| 2262 | + self._read_sql_parameter_with_percent() |
| 2263 | + |
| 2264 | + def test_read_sql_parameter_with_doublepercent(self): |
| 2265 | + self._read_sql_parameter_with_doublepercent() |
| 2266 | + |
| 2267 | + def test_read_sql_named_parameter_with_doublepercent(self): |
| 2268 | + self._read_sql_named_parameter_with_doublepercent() |
| 2269 | + |
2172 | 2270 | def test_to_sql(self):
|
2173 | 2271 | self._to_sql()
|
2174 | 2272 |
|
|
0 commit comments