~therve/storm/update-multi-tables

« back to all changes in this revision

Viewing changes to storm/databases/postgres.py

  • Committer: Thomas Herv√©
  • Date: 2010-12-11 13:09:59 UTC
  • Revision ID: thomas@canonical.com-20101211130959-ffllw6svpc7utcq9
Reduce duplication

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
    Undef, Expr, SetExpr, Select, Insert, Update, Alias, And, Eq, FuncExpr,
43
43
    SQLRaw, Sequence, Like, SQLToken, COLUMN, COLUMN_NAME, COLUMN_PREFIX,
44
44
    TABLE, compile, compile_select, compile_insert, compile_set_expr,
45
 
    compile_like, compile_sql_token, build_tables, EXPR)
 
45
    compile_like, compile_sql_token, compile_update,
 
46
    _MULTIPLE_UPDATE_WITH_FROM)
46
47
from storm.variables import Variable, ListVariable
47
48
from storm.database import Database, Connection, Result
48
49
from storm.exceptions import (
184
185
 
185
186
 
186
187
@compile.when(Update)
187
 
def compile_update(compile, update, state):
188
 
    map = update.map
189
 
    state.push("context", COLUMN_NAME)
190
 
    sets = ["%s=%s" % (compile(col, state, token=True),
191
 
                       compile(map[col], state))
192
 
            for col in map]
193
 
    state.context = TABLE
194
 
    tokens = ["UPDATE ", build_tables(compile, update.table,
195
 
                                      update.default_table, state),
196
 
              " SET ", ", ".join(sets)]
197
 
    where = None
198
 
    if update.where is not Undef:
199
 
        state.context = EXPR
200
 
        where = compile(update.where, state, raw=True)
201
 
    if state.auto_tables:
202
 
        tables = set(
203
 
            compile(table, state, token=True) for table in state.auto_tables)
204
 
        tables.remove(tokens[1])
205
 
        if tables:
206
 
            tokens.append(" FROM ")
207
 
            tokens.append(", ".join(tables))
208
 
    if where is not None:
209
 
        tokens.append(" WHERE ")
210
 
        tokens.append(where)
211
 
    state.pop()
212
 
    return "".join(tokens)
 
188
def compile_postgres_update(compile, update, state):
 
189
    return compile_update(compile, update, state,
 
190
                          multi_tables=_MULTIPLE_UPDATE_WITH_FROM)
213
191
 
214
192
 
215
193
@compile.when(Sequence)