Revision 2263
Added by Aaron Marcuse-Kubitza over 12 years ago
lib/sql.py | ||
---|---|---|
479 | 479 |
query += ' FROM '+table0 |
480 | 480 |
|
481 | 481 |
# Add joins |
482 |
left_table = table0 |
|
483 |
for table, joins in tables: |
|
484 |
if not table_is_esc: table = esc_name_(table) |
|
482 |
tables = [sql_gen.join2sql_gen(v, table_is_esc) for v in tables] |
|
483 |
left_table = sql_gen.table2sql_gen(table0, table_is_esc) |
|
484 |
for join_ in tables: |
|
485 |
table = join_.table |
|
486 |
joins = join_.mapping |
|
485 | 487 |
|
486 | 488 |
left_join = False |
487 | 489 |
|
... | ... | |
494 | 496 |
# different values in a LEFT JOIN. |
495 | 497 |
# Use '~=' because it's OK to pass NULLs through. |
496 | 498 |
joins[right] = sql_gen.CompareCond(sql_gen.col2sql_gen(right, |
497 |
left_table, table_is_esc), '~=')
|
|
499 |
left_table), '~=') |
|
498 | 500 |
conds[(table, right)] = None # filter query by no match |
499 | 501 |
|
500 | 502 |
def join(entry): |
... | ... | |
506 | 508 |
# for None values, tuple is optional |
507 | 509 |
elif left_col is join_using: left_col = right_col |
508 | 510 |
|
509 |
return cond((sql_gen.col2sql_gen(right_col, table, table_is_esc), |
|
510 |
sql_gen.cond2sql_gen(left_col, left_table, table_is_esc, |
|
511 |
assume_col=True))) |
|
511 |
return cond((sql_gen.col2sql_gen(right_col, table), |
|
512 |
sql_gen.cond2sql_gen(left_col, left_table, assume_col=True))) |
|
512 | 513 |
|
513 | 514 |
# Create join condition and determine join type |
514 | 515 |
if reduce(operator.and_, (v is join_using for v in joins.itervalues())): |
... | ... | |
518 | 519 |
|
519 | 520 |
# Create join |
520 | 521 |
if left_join: query += ' LEFT' |
521 |
query += ' JOIN '+table+' '+join_cond |
|
522 |
query += ' JOIN '+table.to_str(db)+' '+join_cond
|
|
522 | 523 |
|
523 | 524 |
left_table = table |
524 | 525 |
|
Also available in: Unified diff
sql.py: mk_select(): joins: Convert all joins to sql_gen format using join2sql_gen()