Ejemplo n.º 1
0
def compile_tablejoin(compile, expr, state):
    if expr._nested:
        state.sql.append('(')
    if expr._left is not None:
        compile(expr._left, state)
    if expr._join_type:
        state.sql.append(SPACE)
        if expr._natural:
            state.sql.append('NATURAL ')
        state.sql.append(expr._join_type)
        state.sql.append(SPACE)
    state.push('context', CONTEXT.TABLE)
    compile(expr._table, state)
    state.pop()
    if expr._on is not None:
        state.sql.append(' ON ')
        state.push("context", CONTEXT.EXPR)
        compile(expr._on, state)
        state.pop()
    elif expr._using is not None:
        state.sql.append(' USING ')
        compile(expr._using, state)
    if expr._hint is not None:
        state.sql.append(SPACE)
        compile(expr._hint, state)
    if expr._nested:
        state.sql.append(')')
Ejemplo n.º 2
0
def compile_subfield(compile, expr, state):
    parent = expr.parent
    if True:  # get me from context
        parent = Parentheses(parent)
    compile(parent)
    state.sql.append('.')
    compile(expr.name, state)
Ejemplo n.º 3
0
def compile_cast(compile, expr, state):
    state.sql.append(expr.sql)
    state.sql.append('(')
    compile(expr.expr, state)
    state.sql.append(' AS ')
    state.sql.append(expr.type)
    state.sql.append(')')
Ejemplo n.º 4
0
def compile_like(compile, expr, state):
    compile_binary(compile, expr, state)
    if expr.escape is not Undef:
        state.sql.append(' ESCAPE ')
        compile(
            Value(expr.escape)
            if isinstance(expr.escape, string_types) else expr.escape, state)
Ejemplo n.º 5
0
def compile_tablejoin(compile, expr, state):
    if expr._nested:
        state.sql.append('(')
    if expr._left is not None:
        compile(expr._left, state)
    if expr._join_type:
        state.sql.append(SPACE)
        if expr._natural:
            state.sql.append('NATURAL ')
        state.sql.append(expr._join_type)
        state.sql.append(SPACE)
    state.push('context', CONTEXT.TABLE)
    compile(expr._table, state)
    state.pop()
    if expr._on is not None:
        state.sql.append(' ON ')
        state.push("context", CONTEXT.EXPR)
        compile(expr._on, state)
        state.pop()
    elif expr._using is not None:
        state.sql.append(' USING ')
        compile(expr._using, state)
    if expr._hint is not None:
        state.sql.append(SPACE)
        compile(expr._hint, state)
    if expr._nested:
        state.sql.append(')')
Ejemplo n.º 6
0
def compile_arrayitem(compile, expr, state):
    compile(expr.array)
    state.sql.append("[")
    state.sql.append("{0:d}".format(expr.key.start))
    if expr.key.stop is not None:
        state.sql.append(", ")
        state.sql.append("{0:d}".format(expr.key.stop))
    state.sql.append("]")
Ejemplo n.º 7
0
def compile_field(compile, expr, state):
    if expr._prefix is not None and state.context != CONTEXT.FIELD_NAME:
        state.auto_tables.append(expr._prefix)  # it's important to know the concrete alias of table.
        state.push("context", CONTEXT.FIELD_PREFIX)
        compile(expr._prefix, state)
        state.pop()
        state.sql.append('.')
    compile(expr._name, state)
Ejemplo n.º 8
0
def compile_exprlist(compile, expr, state):
    first = True
    for a in expr:
        if first:
            first = False
        else:
            state.sql.append(expr.sql)
        compile(a, state)
Ejemplo n.º 9
0
def compile_concat(compile, expr, state):
    if not expr.ws():
        return compile_exprlist(compile, expr, state)
    state.sql.append('concat_ws(')
    compile(expr.ws(), state)
    for a in expr:
        state.sql.append(expr.sql)
        compile(a, state)
    state.sql.append(')')
Ejemplo n.º 10
0
def compile_case(compile, expr, state):
    state.sql.append('CASE')
    if expr.expr is not Undef:
        state.sql.append(SPACE)
        compile(expr.expr, state)
    for clause, value in expr.cases:
        state.sql.append(' WHEN ')
        compile(clause, state)
        state.sql.append(' THEN ')
        compile(value, state)
    if expr.default is not Undef:
        state.sql.append(' ELSE ')
        compile(expr.default, state)
    state.sql.append(' END ')
Ejemplo n.º 11
0
def compile_delete(compile, expr, state):
    state.sql.append("DELETE FROM ")
    state.push("context", CONTEXT.TABLE)
    compile(expr.table, state)
    state.context = CONTEXT.EXPR
    if expr.where:
        state.sql.append(" WHERE ")
        compile(expr.where, state)
    if expr.order_by:
        state.sql.append(" ORDER BY ")
        compile(expr.order_by, state)
    if expr.limit is not None:
        state.sql.append(" LIMIT ")
        compile(expr.limit, state)
    state.pop()
Ejemplo n.º 12
0
def compile_raw(compile, expr, state):
    compile(expr._raw, state)
    if expr._limit is not None:
        state.sql.append(" LIMIT ")
        compile(expr._limit, state)
    if expr._offset:
        state.sql.append(" OFFSET ")
        compile(expr._offset, state)
Ejemplo n.º 13
0
def compile_ternary(compile, expr, state):
    compile(expr.first, state)
    state.sql.append(SPACE)
    state.sql.append(expr.sql)
    state.sql.append(SPACE)
    compile(expr.second, state)
    state.sql.append(SPACE)
    state.sql.append(expr.second_sql)
    state.sql.append(SPACE)
    compile(expr.third, state)
Ejemplo n.º 14
0
def compile_set(compile, expr, state):
    state.push("context", CONTEXT.SELECT)
    if expr._all:
        op = ' {0} ALL '.format(expr.sql)
    else:
        op = ' {0} '.format(expr.sql)
    # TODO: add tests for nested sets.
    state.precedence += 0.5  # to correct handle sub-set with limit, offset
    compile(expr._exprs.join(op), state)
    state.precedence -= 0.5
    if expr._order_by:
        # state.context = CONTEXT.FIELD_NAME
        state.context = CONTEXT.EXPR
        state.sql.append(" ORDER BY ")
        compile(expr._order_by, state)
    if expr._limit is not None:
        state.sql.append(" LIMIT ")
        compile(expr._limit, state)
    if expr._offset:
        state.sql.append(" OFFSET ")
        compile(expr._offset, state)
    if expr._for_update:
        state.sql.append(" FOR UPDATE")
    state.pop()
Ejemplo n.º 15
0
def compile_alias(compile, expr, state):
    if state.context == CONTEXT.FIELD:
        compile(expr.expr, state)
        state.sql.append(' AS ')
    compile(expr.sql, state)
Ejemplo n.º 16
0
def compile_table(compile, expr, state):
    compile(expr._name, state)
Ejemplo n.º 17
0
def compile_list(compile, expr, state):
    compile(Parentheses(ExprList(*expr).join(", ")), state)
Ejemplo n.º 18
0
def compile_tablealias(compile, expr, state):
    if expr._table is not None and state.context == CONTEXT.TABLE:
        compile(expr._table, state)
        state.sql.append(' AS ')
    compile(expr._name, state)
Ejemplo n.º 19
0
def compile_tablealias(compile, expr, state):
    if expr._table is not None and state.context == CONTEXT.TABLE:
        compile(expr._table, state)
        state.sql.append(' AS ')
    compile(expr._name, state)
Ejemplo n.º 20
0
def compile_escapeforlike(compile, expr, state):
    escaped = expr.expr
    for k, v in expr.escape_map:
        escaped = func.Replace(escaped, Value(k), Value(v))
    compile(escaped, state)
Ejemplo n.º 21
0
def compile_omitparentheses(compile, expr, state):
    state.precedence = 0
    compile(expr.expr, state)
Ejemplo n.º 22
0
def compile_update(compile, expr, state):
    state.push("context", CONTEXT.TABLE)
    state.sql.append("UPDATE ")
    if expr.ignore:
        state.sql.append("IGNORE ")
    compile(expr.table, state)
    state.sql.append(" SET ")
    first = True
    for field, value in zip(expr.fields, expr.values):
        if first:
            first = False
        else:
            state.sql.append(", ")
        state.context = CONTEXT.FIELD_NAME
        compile(field, state)
        state.context = CONTEXT.EXPR
        state.sql.append(" = ")
        compile(value, state)
    state.context = CONTEXT.EXPR
    if expr.where:
        state.sql.append(" WHERE ")
        compile(expr.where, state)
    if expr.order_by:
        state.sql.append(" ORDER BY ")
        compile(expr.order_by, state)
    if expr.limit is not None:
        state.sql.append(" LIMIT ")
        compile(expr.limit, state)
    state.pop()
Ejemplo n.º 23
0
def compile_postfix(compile, expr, state):
    compile(expr.expr, state)
    state.sql.append(SPACE)
    state.sql.append(expr.sql)
Ejemplo n.º 24
0
def compile_unary(compile, expr, state):
    state.sql.append(expr.sql)
    compile(expr.expr, state)
Ejemplo n.º 25
0
def compile_fieldproxy(compile, expr, state):
    compile(expr.id._prefix, state)
Ejemplo n.º 26
0
def compile_type(compile, model, state):
    """ Any class can be used as Table """
    compile(model_registry[model], state)
Ejemplo n.º 27
0
def compile_fieldproxy(compile, expr, state):
    compile(expr.id._prefix, state)
Ejemplo n.º 28
0
def qn(name, compile):
    return compile(Name(name))[0]
Ejemplo n.º 29
0
def expr_repr(expr):
    return "<{0}: {1}, {2!r}>".format(type(expr).__name__, *compile(expr))
Ejemplo n.º 30
0
def compile_callable(compile, expr, state):
    compile(expr.expr, state)
    state.sql.append('(')
    compile(expr.args, state)
    state.sql.append(')')
Ejemplo n.º 31
0
def compile_namedcallable(compile, expr, state):
    state.sql.append(expr.sql)
    state.sql.append('(')
    compile(expr.args, state)
    state.sql.append(')')
Ejemplo n.º 32
0
def compile_type(compile, model, state):
    """ Any class can be used as Table """
    compile(model_registry[model], state)
Ejemplo n.º 33
0
def compile_prefix(compile, expr, state):
    state.sql.append(expr.sql)
    state.sql.append(SPACE)
    compile(expr.expr, state)
Ejemplo n.º 34
0
def compile_table(compile, expr, state):
    compile(expr._name, state)
Ejemplo n.º 35
0
def compile_binary(compile, expr, state):
    compile(expr.left, state)
    state.sql.append(SPACE)
    state.sql.append(expr.sql)
    state.sql.append(SPACE)
    compile(expr.right, state)
Ejemplo n.º 36
0
def compile_param(compile, expr, state):
    compile(expr.params, state)
Ejemplo n.º 37
0
def qn(name, compile):
    return compile(Name(name))[0]
Ejemplo n.º 38
0
def compile_parentheses(compile, expr, state):
    state.precedence += MAX_PRECEDENCE
    compile(expr.expr, state)