def _apply_rebase_ast(self, context: sd.CommandContext, node: qlast.ObjectDDL, op: Any) -> Any: rebase = next(iter(self.get_subcommands(type=RebaseInheritingObject))) dropped = rebase.removed_bases added = rebase.added_bases if dropped: node.commands.append( qlast.AlterDropInherit(bases=[ qlast.ObjectRef(module=b.classname.module, name=b.classname.name) for b in dropped ])) for bases, pos in added: if isinstance(pos, tuple): pos_node = qlast.Position(position=pos[0], ref=qlast.ObjectRef( module=pos[1].classname.module, name=pos[1].classname.name)) else: pos_node = qlast.Position(position=pos) node.commands.append( qlast.AlterAddInherit(bases=[ qlast.ObjectRef(module=b.classname.module, name=b.classname.name) for b in bases ], position=pos_node))
def _apply_rebase_ast(self, context, node, op): from . import inheriting parent_ctx = context.get(CommandContextToken) parent_op = parent_ctx.op rebase = next( iter( parent_op.get_subcommands( type=inheriting.RebaseInheritingObject))) dropped = rebase.removed_bases added = rebase.added_bases if dropped: node.commands.append( qlast.AlterDropInherit(bases=[ qlast.ObjectRef(module=b.classname.module, name=b.classname.name) for b in dropped ])) for bases, pos in added: if isinstance(pos, tuple): pos_node = qlast.Position(position=pos[0], ref=qlast.ObjectRef( module=pos[1].classname.module, name=pos[1].classname.name)) else: pos_node = qlast.Position(position=pos) node.commands.append( qlast.AlterAddInherit(bases=[ qlast.ObjectRef(module=b.classname.module, name=b.classname.name) for b in bases ], position=pos_node))
def _get_ast( self, schema: s_schema.Schema, context: sd.CommandContext, *, parent_node: Optional[qlast.DDLOperation] = None, ) -> Optional[qlast.DDLOperation]: assert parent_node is not None dropped = self._get_bases_for_ast(schema, context, self.removed_bases) if dropped: parent_node.commands.append( qlast.AlterDropInherit(bases=[ cast(qlast.TypeName, utils.typeref_to_ast(schema, b)) for b in dropped ], )) for bases, pos in self.added_bases: bases = self._get_bases_for_ast(schema, context, bases) if not bases: continue if isinstance(pos, tuple): typ = utils.typeref_to_ast(schema, pos[1]) assert isinstance(typ, qlast.TypeName) assert isinstance(typ.maintype, qlast.ObjectRef) pos_node = qlast.Position( position=pos[0], ref=typ.maintype, ) else: pos_node = qlast.Position(position=pos) parent_node.commands.append( qlast.AlterAddInherit( bases=[ cast(qlast.TypeName, utils.typeref_to_ast(schema, b)) for b in bases ], position=pos_node, )) return None
def reduce_DROP_EXTENDING_ShortNodeNameList(self, *kids): self.val = qlast.AlterDropInherit( bases=[qlast.TypeName(maintype=b) for b in kids[2].val])
def reduce_DROP_EXTENDING_TypeNameList(self, *kids): self.val = qlast.AlterDropInherit(bases=kids[2].val)