Skip to content

Commit 9c791e1

Browse files
committed
WIP: Oracle named params.
1 parent 00988d4 commit 9c791e1

File tree

3 files changed

+247
-73
lines changed

3 files changed

+247
-73
lines changed

tests/test_2_named_to_named.py

Lines changed: 55 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -168,15 +168,15 @@ def test_1_named_dollar_to_pyformat_many(self):
168168
self.assertEqual(sql, dest_sql)
169169
self.assertEqual(many_params, dest_params)
170170

171-
def test_1_named_oracle_1_to_pyformat_mixed(self):
171+
def test_1_named_oracle_1_to_pyformat_1_no_quotes(self):
172172
"""
173173
Test converting from::
174174
175-
... WHERE name = :"name"
175+
... WHERE name = :name
176176
177177
to::
178178
179-
... WHERE name = %(name)s
179+
... WHERE name = %(NAME)s
180180
"""
181181
# Create instance.
182182
query = sqlparams.SQLParams('named_oracle', 'pyformat')
@@ -185,20 +185,17 @@ def test_1_named_oracle_1_to_pyformat_mixed(self):
185185
src_sql = """
186186
SELECT *
187187
FROM users
188-
WHERE id = :"ID" OR name = :Name AND race = :race;
188+
WHERE id = :ID OR name = :Name AND race = :race;
189189
"""
190-
src_params = {'id': 4, '"NAME"': "Fili", '"RACE"': "Dwarf"}
190+
src_params = {'id': 4, 'NAME': "Fili", 'Race': "dwarf"}
191191

192192
# Desired SQL and params.
193193
dest_sql = """
194194
SELECT *
195195
FROM users
196196
WHERE id = %(ID)s OR name = %(NAME)s AND race = %(RACE)s;
197197
"""
198-
dest_params = {
199-
(__key.strip('"') if '"' in __key else __key.upper()): __val
200-
for __key, __val in src_params.items()
201-
}
198+
dest_params = {__key.upper(): __val for __key, __val in src_params.items()}
202199

203200
# Format SQL with params.
204201
sql, params = query.format(src_sql, src_params)
@@ -207,15 +204,15 @@ def test_1_named_oracle_1_to_pyformat_mixed(self):
207204
self.assertEqual(sql, dest_sql)
208205
self.assertEqual(params, dest_params)
209206

210-
def test_1_named_oracle_1_to_pyformat_no_quotes(self):
207+
def test_1_named_oracle_1_to_pyformat_2_quotes(self):
211208
"""
212209
Test converting from::
213210
214-
... WHERE name = :name
211+
... WHERE name = :"name"
215212
216213
to::
217214
218-
... WHERE name = %(NAME)s
215+
... WHERE name = %(name)s
219216
"""
220217
# Create instance.
221218
query = sqlparams.SQLParams('named_oracle', 'pyformat')
@@ -224,17 +221,19 @@ def test_1_named_oracle_1_to_pyformat_no_quotes(self):
224221
src_sql = """
225222
SELECT *
226223
FROM users
227-
WHERE id = :ID OR name = :Name AND race = :race;
224+
WHERE id = :"ID" OR name = :"Name" AND race = :"race";
228225
"""
229-
src_params = {'id': 4, 'name': "Fili", 'race': "dwarf"}
226+
src_params = {'"ID"': 4, '"Name"': "Fili", '"race"': "dwarf"}
230227

231228
# Desired SQL and params.
232229
dest_sql = """
233230
SELECT *
234231
FROM users
235-
WHERE id = %(ID)s OR name = %(NAME)s AND race = %(RACE)s;
232+
WHERE id = %(ID)s OR name = %(Name)s AND race = %(race)s;
236233
"""
237-
dest_params = {__key.upper(): __val for __key, __val in src_params.items()}
234+
dest_params = {
235+
__key.strip('"'): __val for __key, __val in src_params.items()
236+
}
238237

239238
# Format SQL with params.
240239
sql, params = query.format(src_sql, src_params)
@@ -243,7 +242,7 @@ def test_1_named_oracle_1_to_pyformat_no_quotes(self):
243242
self.assertEqual(sql, dest_sql)
244243
self.assertEqual(params, dest_params)
245244

246-
def test_1_named_oracle_1_to_pyformat_quotes(self):
245+
def test_1_named_oracle_1_to_pyformat_3_mixed(self):
247246
"""
248247
Test converting from::
249248
@@ -260,18 +259,19 @@ def test_1_named_oracle_1_to_pyformat_quotes(self):
260259
src_sql = """
261260
SELECT *
262261
FROM users
263-
WHERE id = :"ID" OR name = :"Name" AND race = :"race";
262+
WHERE id = :"ID" OR name = :"Name" AND race = :race;
264263
"""
265-
src_params = {'"ID"': 4, '"Name"': "Fili", '"race"': "dwarf"}
264+
src_params = {'id': 4, '"Name"': "Fili", '"RACE"': "Dwarf"}
266265

267266
# Desired SQL and params.
268267
dest_sql = """
269268
SELECT *
270269
FROM users
271-
WHERE id = %(ID)s OR name = %(Name)s AND race = %(race)s;
270+
WHERE id = %(ID)s OR name = %(Name)s AND race = %(RACE)s;
272271
"""
273272
dest_params = {
274-
__key.strip('"'): __val for __key, __val in src_params.items()
273+
(__key.strip('"') if '"' in __key else __key.upper()): __val
274+
for __key, __val in src_params.items()
275275
}
276276

277277
# Format SQL with params.
@@ -281,11 +281,11 @@ def test_1_named_oracle_1_to_pyformat_quotes(self):
281281
self.assertEqual(sql, dest_sql)
282282
self.assertEqual(params, dest_params)
283283

284-
def test_1_named_oracle_2_to_pyformat_many_mixed(self):
284+
def test_1_named_oracle_2_to_pyformat_1_many_no_quotes(self):
285285
"""
286286
Test converting many from::
287287
288-
... WHERE name = :"name"
288+
... WHERE name = :name
289289
290290
to::
291291
@@ -295,15 +295,17 @@ def test_1_named_oracle_2_to_pyformat_many_mixed(self):
295295
query = sqlparams.SQLParams('named_oracle', 'pyformat')
296296

297297
# Source SQL and params.
298+
# - WARNING: Only the first row is scanned for the in-parameter names. All
299+
# subsequent rows must have the exact same in-parameter names.
298300
src_sql = """
299301
SELECT *
300302
FROM users
301-
WHERE id = :"ID" OR name = :Name AND race = :race;
303+
WHERE id = :ID OR name = :Name AND race = :race;
302304
"""
303305
src_params = [
304-
{'id': 6, '"NAME"': "Nori", '"RACE"': "dwarf"},
305-
{'id': 2, '"NAME"': "Balin", '"RACE"': "dwarf"},
306-
{'id': 10, '"NAME"': "Bifur", '"RACE"': "dwarf"},
306+
{'id': 6, 'NAME': "Nori", 'Race': "dwarf"},
307+
{'id': 2, 'NAME': "Balin", 'Race': "dwarf"},
308+
{'id': 10, 'NAME': "Bifur", 'Race': "dwarf"},
307309
]
308310

309311
# Desired SQL and params.
@@ -312,10 +314,10 @@ def test_1_named_oracle_2_to_pyformat_many_mixed(self):
312314
FROM users
313315
WHERE id = %(ID)s OR name = %(NAME)s AND race = %(RACE)s;
314316
"""
315-
dest_params = [{
316-
(__key.strip('"') if '"' in __key else __key.upper()): __val
317-
for __key, __val in __row.items()
318-
} for __row in src_params]
317+
dest_params = [
318+
{__key.upper(): __val for __key, __val in __row.items()}
319+
for __row in src_params
320+
]
319321

320322
# Format SQL with params.
321323
sql, many_params = query.formatmany(src_sql, src_params)
@@ -324,11 +326,11 @@ def test_1_named_oracle_2_to_pyformat_many_mixed(self):
324326
self.assertEqual(sql, dest_sql)
325327
self.assertEqual(many_params, dest_params)
326328

327-
def test_1_named_oracle_2_to_pyformat_many_no_quotes(self):
329+
def test_1_named_oracle_2_to_pyformat_2_many_quotes(self):
328330
"""
329331
Test converting many from::
330332
331-
... WHERE name = :name
333+
... WHERE name = :"name"
332334
333335
to::
334336
@@ -338,25 +340,27 @@ def test_1_named_oracle_2_to_pyformat_many_no_quotes(self):
338340
query = sqlparams.SQLParams('named_oracle', 'pyformat')
339341

340342
# Source SQL and params.
343+
# - WARNING: Only the first row is scanned for the in-parameter names. All
344+
# subsequent rows must have the exact same in-parameter names.
341345
src_sql = """
342346
SELECT *
343347
FROM users
344-
WHERE id = :ID OR name = :Name AND race = :race;
348+
WHERE id = :"ID" OR name = :"Name" AND race = :"race";
345349
"""
346350
src_params = [
347-
{'id': 6, 'name': "Nori", 'race': "dwarf"},
348-
{'id': 2, 'name': "Balin", 'race': "dwarf"},
349-
{'id': 10, 'name': "Bifur", 'race': "dwarf"},
351+
{'"ID"': 6, '"Name"': "Nori", '"race"': "dwarf"},
352+
{'"ID"': 2, '"Name"': "Balin", '"race"': "dwarf"},
353+
{'"ID"': 10, '"Name"': "Bifur", '"race"': "dwarf"},
350354
]
351355

352356
# Desired SQL and params.
353357
dest_sql = """
354358
SELECT *
355359
FROM users
356-
WHERE id = %(ID)s OR name = %(NAME)s AND race = %(RACE)s;
360+
WHERE id = %(ID)s OR name = %(Name)s AND race = %(race)s;
357361
"""
358362
dest_params = [
359-
{__key.upper(): __val for __key, __val in __row.items()}
363+
{__key.strip('"'): __val for __key, __val in __row.items()}
360364
for __row in src_params
361365
]
362366

@@ -367,7 +371,7 @@ def test_1_named_oracle_2_to_pyformat_many_no_quotes(self):
367371
self.assertEqual(sql, dest_sql)
368372
self.assertEqual(many_params, dest_params)
369373

370-
def test_1_named_oracle_2_to_pyformat_many_quotes(self):
374+
def test_1_named_oracle_2_to_pyformat_3_many_mixed(self):
371375
"""
372376
Test converting many from::
373377
@@ -381,27 +385,29 @@ def test_1_named_oracle_2_to_pyformat_many_quotes(self):
381385
query = sqlparams.SQLParams('named_oracle', 'pyformat')
382386

383387
# Source SQL and params.
388+
# - WARNING: Only the first row is scanned for the in-parameter names. All
389+
# subsequent rows must have the exact same in-parameter names.
384390
src_sql = """
385391
SELECT *
386392
FROM users
387-
WHERE id = :"ID" OR name = :"Name" AND race = :"race";
393+
WHERE id = :"ID" OR name = :"Name" AND race = :race;
388394
"""
389395
src_params = [
390-
{'"ID"': 6, '"Name"': "Nori", '"race"': "dwarf"},
391-
{'"ID"': 2, '"Name"': "Balin", '"race"': "dwarf"},
392-
{'"ID"': 10, '"Name"': "Bifur", '"race"': "dwarf"},
396+
{'id': 6, '"Name"': "Nori", '"RACE"': "dwarf"},
397+
{'id': 2, '"Name"': "Balin", '"RACE"': "dwarf"},
398+
{'id': 10, '"Name"': "Bifur", '"RACE"': "dwarf"},
393399
]
394400

395401
# Desired SQL and params.
396402
dest_sql = """
397403
SELECT *
398404
FROM users
399-
WHERE id = %(ID)s OR name = %(Name)s AND race = %(race)s;
405+
WHERE id = %(ID)s OR name = %(Name)s AND race = %(RACE)s;
400406
"""
401-
dest_params = [
402-
{__key.strip('"'): __val for __key, __val in __row.items()}
403-
for __row in src_params
404-
]
407+
dest_params = [{
408+
(__key.strip('"') if '"' in __key else __key.upper()): __val
409+
for __key, __val in __row.items()
410+
} for __row in src_params]
405411

406412
# Format SQL with params.
407413
sql, many_params = query.formatmany(src_sql, src_params)

0 commit comments

Comments
 (0)