def _apply_field_ast(self, schema, context, node, op): objtype = context.get(LinkSourceCommandContext) if op.property == 'required': # Due to how SDL is processed the underlying AST may be an # AlterConcreteLink, which requires different handling. if isinstance(node, qlast.CreateConcreteLink): node.is_required = op.new_value else: node.commands.append( qlast.SetSpecialField( name='required', value=op.new_value, )) elif op.property == 'cardinality': node.cardinality = op.new_value elif op.property == 'target' and objtype: # Due to how SDL is processed the underlying AST may be an # AlterConcreteLink, which requires different handling. if isinstance(node, qlast.CreateConcreteLink): if not node.target: expr = self.get_attribute_value('expr') if expr is not None: node.target = expr.qlast else: t = op.new_value node.target = utils.typeref_to_ast(schema, t) else: node.commands.append( qlast.SetLinkType( type=utils.typeref_to_ast(schema, op.new_value))) elif op.property == 'on_target_delete': node.commands.append(qlast.OnTargetDelete(cascade=op.new_value)) else: super()._apply_field_ast(schema, context, node, op)
def _apply_field_ast(self, schema, context, node, op): objtype = context.get(LinkSourceCommandContext) if op.property == 'required': if isinstance(node, qlast.CreateConcreteLink): node.is_required = op.new_value else: node.commands.append( qlast.SetSpecialField( name=qlast.ObjectRef(name='required'), value=op.new_value, ) ) elif op.property == 'cardinality': node.cardinality = op.new_value elif op.property == 'target' and objtype: if isinstance(node, qlast.CreateConcreteLink): if not node.target: t = op.new_value node.target = utils.typeref_to_ast(schema, t) else: node.commands.append( qlast.SetLinkType( type=utils.typeref_to_ast(schema, op.new_value) ) ) else: super()._apply_field_ast(schema, context, node, op)
def _apply_field_ast( self, schema: s_schema.Schema, context: sd.CommandContext, node: qlast.DDLOperation, op: sd.AlterObjectProperty, ) -> None: if op.property == 'target': if op.new_value: node.commands.append( qlast.SetLinkType(type=qlast.ObjectRef( name=op.new_value.classname.name, # type: ignore module=op.new_value.classname.module # type: ignore ))) else: super()._apply_field_ast(schema, context, node, op)
def _apply_field_ast( self, schema: s_schema.Schema, context: sd.CommandContext, node: qlast.DDLOperation, op: sd.AlterObjectProperty, ) -> None: objtype = self.get_referrer_context(context) if op.property == 'required': # Due to how SDL is processed the underlying AST may be an # AlterConcreteLink, which requires different handling. if isinstance(node, qlast.CreateConcreteLink): assert isinstance(op.new_value, bool) node.is_required = op.new_value else: node.commands.append( qlast.SetSpecialField( name='required', value=op.new_value, ) ) elif op.property == 'cardinality': node.cardinality = op.new_value elif op.property == 'target' and objtype: # Due to how SDL is processed the underlying AST may be an # AlterConcreteLink, which requires different handling. if isinstance(node, qlast.CreateConcreteLink): if not node.target: expr = self.get_attribute_value('expr') if expr is not None: node.target = expr.qlast else: t = op.new_value assert isinstance(t, (so.Object, so.ObjectShell)) node.target = utils.typeref_to_ast(schema, t) else: assert isinstance(op.new_value, (so.Object, so.ObjectShell)) node.commands.append( qlast.SetLinkType( type=utils.typeref_to_ast(schema, op.new_value) ) ) elif op.property == 'on_target_delete': node.commands.append(qlast.OnTargetDelete(cascade=op.new_value)) else: super()._apply_field_ast(schema, context, node, op)
def _apply_field_ast( self, schema: s_schema.Schema, context: sd.CommandContext, node: qlast.DDLOperation, op: sd.AlterObjectProperty, ) -> None: if op.property == 'target': if op.new_value: assert isinstance(op.new_value, so.ObjectShell) node.commands.append( qlast.SetLinkType(type=utils.typeref_to_ast( schema, op.new_value), ), ) elif op.property == 'required': node.commands.append( qlast.SetSpecialField( name='required', value=op.new_value, ), ) else: super()._apply_field_ast(schema, context, node, op)
def reduce_SETTYPE_FullTypeExpr(self, *kids): self.val = qlast.SetLinkType(type=kids[1].val)