Example #1
0
    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))
Example #2
0
    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))
Example #3
0
    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
Example #4
0
File: ddl.py Project: alipqb/edgedb
 def reduce_LAST(self, *kids):
     self.val = qlast.Position(position='LAST')
Example #5
0
File: ddl.py Project: alipqb/edgedb
 def reduce_FIRST(self, *kids):
     self.val = qlast.Position(position='FIRST')
Example #6
0
File: ddl.py Project: alipqb/edgedb
 def reduce_AFTER_NodeName(self, *kids):
     self.val = qlast.Position(ref=kids[1].val, position='AFTER')
Example #7
0
File: ddl.py Project: alipqb/edgedb
 def reduce_BEFORE_NodeName(self, *kids):
     self.val = qlast.Position(ref=kids[1].val, position='BEFORE')