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