|
3 | 3 |
|
4 | 4 | import pytest |
5 | 5 |
|
6 | | -from DIRAC.Core.Utilities.MySQL import MySQL |
| 6 | +from DIRAC.Core.Utilities.MySQL import MySQL, _quotedList |
7 | 7 |
|
8 | 8 |
|
9 | 9 | class TestCheckIdentifierValid: |
@@ -254,3 +254,44 @@ class TestCheckTypeInvalid: |
254 | 254 | def test_invalid(self, value_type): |
255 | 255 | result = MySQL._checkType(value_type) |
256 | 256 | assert not result["OK"] |
| 257 | + |
| 258 | + |
| 259 | +class TestQuotedList: |
| 260 | + """Test quotedList escapes/rejects things correctly.""" |
| 261 | + |
| 262 | + @pytest.mark.parametrize( |
| 263 | + "value,allowFuncs,expected", |
| 264 | + [ |
| 265 | + # Simple cases |
| 266 | + ([""], None, None), |
| 267 | + (["myfield"], None, "`myfield`"), |
| 268 | + (["myField"], None, "`myField`"), |
| 269 | + (["abc", "def", "ghi"], None, "`abc`, `def`, `ghi`"), |
| 270 | + (["bad#name"], None, None), |
| 271 | + (["abc", "--invalid"], None, None), |
| 272 | + # Qualified names |
| 273 | + (["abc.def"], None, "`abc`.`def`"), |
| 274 | + (["`abc`.`def`"], None, "`abc`.`def`"), |
| 275 | + (["abc", "tbl.def"], None, "`abc`, `tbl`.`def`"), |
| 276 | + (["`abc`.`--bad`"], None, None), |
| 277 | + (["a.b.c"], None, None), # Only one qualifier is allowed |
| 278 | + # Function handling |
| 279 | + (["date(myfield)"], ["DATE"], "DATE(`myfield`)"), |
| 280 | + (["DATE(myfield)"], ["DATE"], "DATE(`myfield`)"), |
| 281 | + (["date(myfield)"], ["date"], "DATE(`myfield`)"), |
| 282 | + (["date(--bad)"], ["DATE"], None), |
| 283 | + (["date(myfield)"], None, None), |
| 284 | + (["date(tbl.myfield)"], ["DATE"], "DATE(`tbl`.`myfield`)"), |
| 285 | + (["date(`tbl`.`myfield`)"], ["DATE"], "DATE(`tbl`.`myfield`)"), |
| 286 | + (["rand()"], ["RAND"], "RAND()"), |
| 287 | + (["RAND()"], ["rand"], "RAND()"), |
| 288 | + (["RAND()"], ["RAND"], "RAND()"), |
| 289 | + (["RAND())"], ["RAND"], None), |
| 290 | + (["OTHER()"], ["RAND"], None), |
| 291 | + (["RAND()", "DATE(mycol)", "plain"], ["RAND", "DATE"], "RAND(), DATE(`mycol`), `plain`"), |
| 292 | + (["RAND()", "OTH(mycol)", "plain"], ["RAND", "DATE"], None), |
| 293 | + ], |
| 294 | + ) |
| 295 | + def test_quotedList(self, value, allowFuncs, expected): |
| 296 | + res = _quotedList(value, allowFuncs) |
| 297 | + assert res == expected |
0 commit comments