예제 #1
0
    def as_inherited_ref_ast(cls, schema, context, name, parent):
        refctx = cls.get_referrer_context(context)
        astnode_cls = cls.referenced_astnode

        if sn.Name.is_qualified(name):
            nref = qlast.ObjectRef(
                name=name.name,
                module=name.module,
            )
        else:
            nref = qlast.ObjectRef(
                name=name,
                module=refctx.op.classname.module,
            )

        args = []

        parent_args = parent.get_args(schema)
        if parent_args:
            for arg_expr in parent.get_args(schema):
                arg = edgeql.parse_fragment(arg_expr.text)
                args.append(arg)

        subj_expr = parent.get_subjectexpr(schema)
        if subj_expr is not None:
            subj_expr_ql = edgeql.parse_fragment(subj_expr.text)
        else:
            subj_expr_ql = None

        astnode = astnode_cls(name=nref, args=args, subjectexpr=subj_expr_ql)

        return astnode
예제 #2
0
    def as_inherited_ref_ast(
        cls,
        schema: s_schema.Schema,
        context: sd.CommandContext,
        name: str,
        parent: so.Object,
    ) -> qlast.ObjectDDL:
        assert isinstance(parent, Constraint)
        astnode_cls = cls.referenced_astnode
        nref = cls.get_inherited_ref_name(schema, context, parent, name)
        args = []

        parent_args = parent.get_args(schema)
        if parent_args:
            parent_args = parent.get_args(schema)
            assert parent_args is not None
            for arg_expr in parent_args:
                arg = edgeql.parse_fragment(arg_expr.text)
                args.append(arg)

        subj_expr = parent.get_subjectexpr(schema)
        if subj_expr is not None:
            subj_expr_ql = edgeql.parse_fragment(subj_expr.text)
        else:
            subj_expr_ql = None

        astnode = astnode_cls(name=nref, args=args, subjectexpr=subj_expr_ql)

        return astnode
예제 #3
0
    def as_inherited_ref_ast(
        cls,
        schema: s_schema.Schema,
        context: sd.CommandContext,
        name: sn.Name,
        parent: so.Object,
    ) -> qlast.ObjectDDL:
        assert isinstance(parent, Constraint)
        astnode_cls = cls.referenced_astnode
        nref = cls.get_inherited_ref_name(schema, context, parent, name)
        args = []

        parent_args = parent.get_args(schema)
        if parent_args:
            parent_args = parent.get_args(schema)
            assert parent_args is not None
            for arg_expr in parent_args:
                arg = edgeql.parse_fragment(arg_expr.text)
                args.append(arg)

        subj_expr = parent.get_subjectexpr(schema)
        if (subj_expr is None
                # Don't include subjectexpr if it was inherited from an
                # abstract constraint. (Constraints will view it as
                # not-inherited if it was copied from an implicit base.)
                or 'subjectexpr' in parent.get_inherited_fields(schema)):
            subj_expr_ql = None
        else:
            subj_expr_ql = edgeql.parse_fragment(subj_expr.text)

        astnode = astnode_cls(name=nref, args=args, subjectexpr=subj_expr_ql)

        return astnode
예제 #4
0
    def as_inherited_ref_ast(
        cls,
        schema: s_schema.Schema,
        context: sd.CommandContext,
        name: sn.Name,
        parent: so.Object,
    ) -> qlast.ObjectDDL:
        assert isinstance(parent, Constraint)
        astnode_cls = cls.referenced_astnode  # type: ignore
        nref = cls.get_inherited_ref_name(schema, context, parent, name)
        args = []

        parent_args = parent.get_args(schema)
        if parent_args:
            parent_args = parent.get_args(schema)
            assert parent_args is not None
            for arg_expr in parent_args:
                arg = edgeql.parse_fragment(arg_expr.text)
                args.append(arg)

        subj_expr = parent.get_subjectexpr(schema)
        if (subj_expr is None
                # Don't include subjectexpr if it was inherited from an
                # abstract constraint.
                or parent.get_nearest_generic_parent(schema).get_subjectexpr(
                    schema) is not None):
            subj_expr_ql = None
        else:
            subj_expr_ql = edgeql.parse_fragment(subj_expr.text)

        astnode = astnode_cls(name=nref, args=args, subjectexpr=subj_expr_ql)

        return cast(qlast.ObjectDDL, astnode)
예제 #5
0
    def as_inherited_ref_ast(cls, schema, context, name, parent):
        astnode_cls = cls.referenced_astnode
        nref = cls.get_inherited_ref_name(schema, context, parent, name)
        args = []

        parent_args = parent.get_args(schema)
        if parent_args:
            for arg_expr in parent.get_args(schema):
                arg = edgeql.parse_fragment(arg_expr.text)
                args.append(arg)

        subj_expr = parent.get_subjectexpr(schema)
        if subj_expr is not None:
            subj_expr_ql = edgeql.parse_fragment(subj_expr.text)
        else:
            subj_expr_ql = None

        astnode = astnode_cls(name=nref, args=args, subjectexpr=subj_expr_ql)

        return astnode
예제 #6
0
파일: indexes.py 프로젝트: syyunn/edgedb
    def as_inherited_ref_ast(cls, schema, context, name, parent):
        nref = cls.get_inherited_ref_name(schema, context, parent, name)
        astnode_cls = cls.referenced_astnode
        expr = parent.get_expr(schema)
        if expr is not None:
            expr_ql = edgeql.parse_fragment(expr.origtext)
        else:
            expr_ql = None

        return astnode_cls(
            name=nref,
            expr=expr_ql,
        )
예제 #7
0
    def as_inherited_ref_ast(cls, schema, context, name, parent):
        astnode_cls = cls.referenced_astnode
        expr = parent.get_expr(schema)
        if expr is not None:
            expr_ql = edgeql.parse_fragment(expr.origtext)
        else:
            expr_ql = None

        return astnode_cls(
            name=qlast.ObjectRef(
                name=name,
                module=parent.get_shortname(schema).module,
            ),
            expr=expr_ql,
        )
예제 #8
0
    def as_inherited_ref_ast(
        cls,
        schema: s_schema.Schema,
        context: sd.CommandContext,
        name: sn.Name,
        parent: referencing.ReferencedObject,
    ) -> qlast.ObjectDDL:
        assert isinstance(parent, Index)
        astnode_cls = cls.referenced_astnode

        expr = parent.get_expr(schema)
        if expr is None:
            expr_ql = None
        else:
            expr_ql = edgeql.parse_fragment(expr.text)

        return astnode_cls(name=qlast.ObjectRef(name='idx'), expr=expr_ql)
예제 #9
0
    def as_inherited_ref_ast(
        cls,
        schema: s_schema.Schema,
        context: sd.CommandContext,
        name: str,
        parent: referencing.ReferencedObject,
    ) -> qlast.ObjectDDL:
        assert isinstance(parent, Index)
        nref = cls.get_inherited_ref_name(schema, context, parent, name)
        astnode_cls = cls.referenced_astnode

        expr = parent.get_expr(schema)
        if expr is not None:
            expr_ql = edgeql.parse_fragment(expr.origtext)
        else:
            expr_ql = None

        return astnode_cls(
            name=nref,
            expr=expr_ql,
        )