Exemple #1
0
def compile_sqlite_sign(element, compiler, **kw):
    args = list(element.clauses)
    if len(args) != 1:
        raise CompileError("Sign function takes exactly one argument.")
    return ("CASE WHEN {0} < 0 THEN -1 "
            "ELSE CASE WHEN {0} > 0 THEN 1 "
            "ELSE 0 END END".format(compiler.process(args[0])))
Exemple #2
0
        def check_match_clause(clause):
            left_tuple = []
            right_tuple = []
            match_operators = []
            if isinstance(clause.type, MatchType):
                left_tuple.append(clause.left)
                right_tuple.append(clause.right)
                match_operators.append(clause.operator)
            elif isinstance(clause, Function):
                if clause.name.lower() == "match":
                    if len(clause.clauses) == 2:
                        func_left, func_right = clause.clauses
                    elif len(clause.clauses) == 1:
                        func_left = None
                        func_right, = clause.clauses
                    else:
                        raise CompileError(
                            "Invalid arguments count for MATCH clause")

                    left_tuple.append(func_left)
                    right_tuple.append(func_right)
            elif isinstance(clause, ClauseList):
                for xclause in clause.clauses:
                    l, r, m = check_match_clause(xclause)
                    left_tuple.extend(l)
                    right_tuple.extend(r)
                    match_operators.extend(m)
            return left_tuple, right_tuple, match_operators
Exemple #3
0
    def _process_match(self, expr):
        def ensure_column(clause):
            if not isinstance(clause, ColumnClause):
                raise CompileError("Invalid source for MATCH clause.")

        negative = False

        # unpack MATCH clause
        if isinstance(expr, Grouping):
            expr = expr.element
        if isinstance(expr, UnaryExpression):
            if expr.operator not in (operator.inv, operator.not_):
                raise CompileError("Invalid unary operator for MATCH clause. "
                                   "MATCH clause only supports NOT operator.")
            negative = True
            expr = expr.element
        if isinstance(expr, Grouping):
            expr = expr.element
        if isinstance(expr, BooleanClauseList):
            if expr.operator is not operator.or_:
                raise CompileError(
                    "Invalid boolean operator for MATCH clause. "
                    "MATCH clause only supports OR operator.")
            expr = expr.clauses

        if isinstance(expr, (list, tuple)):
            for expr_column in expr:
                ensure_column(expr_column)
            columns = u"({0})".format(','.join(map(self.process, expr)))
        else:
            ensure_column(expr)
            columns = self.process(expr)

        if negative:
            columns = u"!{0}".format(columns)

        return columns
 def visit_primary_key_constraint(self, constraint):
     if constraint.name is None:
         raise CompileError("Can't create primary key without a name.")
     return DDLCompiler.visit_primary_key_constraint(self, constraint)
Exemple #5
0
 def ensure_column(clause):
     if not isinstance(clause, ColumnClause):
         raise CompileError("Invalid source for MATCH clause.")