Project

General

Profile

« Previous | Next » 

Revision 2565

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).

View differences:

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