Revision 2056
Added by Aaron Marcuse-Kubitza almost 13 years ago
lib/sql.py | ||
---|---|---|
290 | 290 |
if fields != None: map(check_name, fields) |
291 | 291 |
map(check_name, conds.keys()) |
292 | 292 |
|
293 |
params = [] |
|
294 |
|
|
295 |
def parse_col(field): |
|
296 |
'''Parses fields''' |
|
297 |
if isinstance(field, tuple): # field is literal values |
|
298 |
value, col = field |
|
299 |
sql_ = '%s' |
|
300 |
params.append(value) |
|
301 |
if col != None: sql_ += ' AS '+esc_name(db, col) |
|
302 |
else: sql_ = esc_name(db, field) # field is col name |
|
303 |
return sql_ |
|
293 | 304 |
def cond(entry): |
305 |
'''Parses conditions''' |
|
294 | 306 |
col, value = entry |
295 | 307 |
cond_ = esc_name(db, col)+' ' |
296 | 308 |
if value == None: cond_ += 'IS' |
297 | 309 |
else: cond_ += '=' |
298 | 310 |
cond_ += ' %s' |
299 | 311 |
return cond_ |
312 |
|
|
300 | 313 |
query = 'SELECT ' |
301 | 314 |
if fields == None: query += '*' |
302 |
else: query += ', '.join([esc_name(db, field) for field in fields])
|
|
315 |
else: query += ', '.join(map(parse_col, fields))
|
|
303 | 316 |
query += ' FROM '+table |
304 | 317 |
|
305 | 318 |
missing = True |
306 | 319 |
if conds != {}: |
307 | 320 |
query += ' WHERE '+' AND '.join(map(cond, conds.iteritems())) |
321 |
params += conds.values() |
|
308 | 322 |
missing = False |
309 | 323 |
if limit != None: query += ' LIMIT '+str(limit); missing = False |
310 | 324 |
if start != None: |
... | ... | |
313 | 327 |
if missing: warnings.warn(DbWarning( |
314 | 328 |
'SELECT statement missing a WHERE, LIMIT, or OFFSET clause: '+query)) |
315 | 329 |
|
316 |
return (query, conds.values())
|
|
330 |
return (query, params)
|
|
317 | 331 |
|
318 | 332 |
def select(db, *args, **kw_args): |
319 | 333 |
'''For params, see mk_select() and run_query()''' |
Also available in: Unified diff
sql.py: mk_select(): Support literal values in the list of cols to select