Project

General

Profile

« Previous | Next » 

Revision 2056

sql.py: mk_select(): Support literal values in the list of cols to select

View differences:

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