Ejemplo n.º 1
0
def ptr_default_to_col_default(schema, ptr, expr):
    try:
        # NOTE: This code currently will only be invoked for scalars.
        # Blindly cast the default expression into the ptr target
        # type, validation of the expression type is not the concern
        # of this function.
        eql = ql_parser.parse(expr.text)
        eql = ql_astutils.ensure_qlstmt(
            qlast.TypeCast(
                type=ql_astutils.type_to_ql_typeref(
                    ptr.get_target(schema), schema=schema),
                expr=eql,
            )
        )
        ir = ql_compiler.compile_ast_to_ir(eql, schema)
    except errors.SchemaError:
        # Reference errors mean that is is a non-constant default
        # referring to a not-yet-existing objects.
        return None

    if not ir_utils.is_const(ir):
        return None

    sql_expr = compiler.compile_ir_to_sql_tree(ir, singleton_mode=True)
    sql_text = codegen.SQLSourceGenerator.to_source(sql_expr)

    return sql_text
Ejemplo n.º 2
0
    def get_ir_default(self, *, schema: s_schema.Schema) -> irast.Base:
        from edb.ir import utils as irutils

        defexpr = self.get_default(schema)
        defexpr = expr.Expression.compiled(
            defexpr, as_fragment=True, schema=schema)
        ir = defexpr.irast
        if not irutils.is_const(ir.expr):
            raise ValueError('expression not constant')
        return ir
Ejemplo n.º 3
0
    def get_ir_default(self, *, schema: s_schema.Schema) -> irast.Base:
        from edb.ir import ast as irast
        from edb.ir import utils as irutils

        defexpr = self.get_default(schema)
        assert defexpr is not None
        defexpr = expr.Expression.compiled(
            defexpr, as_fragment=True, schema=schema)
        ir = defexpr.irast
        assert isinstance(ir, (Function, irast.Statement))
        if not irutils.is_const(ir.expr):
            raise ValueError('expression not constant')
        return ir
Ejemplo n.º 4
0
def ptr_default_to_col_default(schema, ptr, expr):
    try:
        ir = ql_compiler.compile_to_ir(expr.text, schema)
    except errors.SchemaError:
        # Referene errors mean that is is a non-constant default
        # referring to a not-yet-existing objects.
        return None

    if not ir_utils.is_const(ir):
        return None

    sql_expr = compiler.compile_ir_to_sql_tree(ir, singleton_mode=True)
    sql_text = codegen.SQLSourceGenerator.to_source(sql_expr)

    return sql_text
Ejemplo n.º 5
0
    def get_ir_default(self, *, schema):
        if self.get_default(schema) is None:
            return None

        from edb.edgeql import compiler as ql_compiler
        from edb.ir import utils as irutils

        ql_default = self.get_ql_default(schema)

        ir = ql_compiler.compile_ast_fragment_to_ir(
            ql_default,
            schema,
            location=f'default of the {self.get_name(schema)} parameter')

        if not irutils.is_const(ir.expr):
            raise ValueError('expression not constant')

        return ir