Revision 2565
Added by Aaron Marcuse-Kubitza over 12 years ago
lib/sql.py | ||
---|---|---|
897 | 897 |
@return sql_gen.Col Where the output pkeys are made available |
898 | 898 |
''' |
899 | 899 |
out_table = sql_gen.as_Table(out_table) |
900 |
for in_table_col in mapping.itervalues(): |
|
901 |
assert isinstance(in_table_col, sql_gen.Col) |
|
900 |
mapping = sql_gen.ColDict(mapping) |
|
902 | 901 |
if into == None: |
903 | 902 |
into = out_table.name |
904 | 903 |
if is_func: into += '()' |
... | ... | |
989 | 988 |
sql_gen.ColValueCond(in_col, value)) |
990 | 989 |
|
991 | 990 |
# Do inserts and selects |
992 |
join_cols = {}
|
|
991 |
join_cols = sql_gen.ColDict()
|
|
993 | 992 |
insert_out_pkeys = sql_gen.Table(into.name+'-insert_out_pkeys') |
994 | 993 |
insert_in_pkeys = sql_gen.Table(into.name+'-insert_in_pkeys') |
995 | 994 |
while True: |
... | ... | |
1021 | 1020 |
log_exc(e) |
1022 | 1021 |
|
1023 | 1022 |
old_join_cols = join_cols.copy() |
1024 |
join_cols.update(util.dict_subset(mapping, e.cols)) |
|
1023 |
join_cols.update(util.dict_subset_right_join(mapping, e.cols))
|
|
1025 | 1024 |
log_debug('Ignoring existing rows, comparing on these columns:\n' |
1026 | 1025 |
+strings.as_inline_table(join_cols, ustr=col_ustr)) |
1027 | 1026 |
assert join_cols != old_join_cols # avoid infinite loops |
Also available in: Unified diff
sql.py: put_table(): Make mapping and join_cols a sql_gen.ColDict so that literal values will always be turned into sql_gen.Col objects. DuplicateKeyException: Use dict_subset_right_join() instead of dict_subset() so that all columns in a constraint are included in joins on out_table (such as for a relational function with omitted arguments).