示例#1
0
    def compiled(
        cls: Type[Expression],
        expr: Expression,
        schema: s_schema.Schema,
        *,
        options: Optional[qlcompiler.CompilerOptions] = None,
        as_fragment: bool = False,
    ) -> Expression:

        from edb.ir import ast as irast_

        if as_fragment:
            ir: irast_.Command = qlcompiler.compile_ast_fragment_to_ir(
                expr.qlast,
                schema=schema,
                options=options,
            )
        else:
            ir = qlcompiler.compile_ast_to_ir(
                expr.qlast,
                schema=schema,
                options=options,
            )

        assert isinstance(ir, irast_.Statement)

        return cls(
            text=expr.text,
            refs=so.ObjectSet.create(schema, ir.schema_refs),
            _qlast=expr.qlast,
            _irast=ir,
        )
示例#2
0
文件: expr.py 项目: haikyuu/edgedb
    def compiled(
        cls: Type[Expression],
        expr: Expression,
        schema: s_schema.Schema,
        *,
        as_fragment: bool = False,
        modaliases: Optional[Mapping[Optional[str], str]] = None,
        parent_object_type: Optional[so.ObjectMeta] = None,
        anchors: Optional[
            Mapping[Union[str, qlast_.SpecialAnchorT], so.Object]
        ] = None,
        path_prefix_anchor: Optional[qlast_.SpecialAnchorT] = None,
        allow_generic_type_output: bool = False,
        func_params: Optional[s_func.ParameterLikeList] = None,
        singletons: Sequence[s_types.Type] = (),
    ) -> Expression:

        from edb.edgeql import compiler as qlcompiler
        from edb.ir import ast as irast_

        if as_fragment:
            ir: irast_.Command = qlcompiler.compile_ast_fragment_to_ir(
                expr.qlast,
                schema=schema,
                modaliases=modaliases,
                anchors=anchors,
                path_prefix_anchor=path_prefix_anchor,
            )
        else:
            ir = qlcompiler.compile_ast_to_ir(
                expr.qlast,
                schema=schema,
                modaliases=modaliases,
                anchors=anchors,
                path_prefix_anchor=path_prefix_anchor,
                func_params=func_params,
                parent_object_type=parent_object_type,
                allow_generic_type_output=allow_generic_type_output,
                singletons=singletons,
            )

        assert isinstance(ir, irast_.Statement)

        return cls(
            text=expr.text,
            origtext=expr.origtext,
            refs=so.ObjectSet.create(schema, ir.schema_refs),
            _qlast=expr.qlast,
            _irast=ir,
        )
示例#3
0
    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
示例#4
0
    def compiled(cls,
                 expr,
                 schema,
                 *,
                 as_fragment=False,
                 modaliases=None,
                 parent_object_type=None,
                 anchors=None,
                 path_prefix_anchor=None,
                 allow_generic_type_output=False,
                 func_params=None,
                 singletons=None) -> Expression:

        from edb.edgeql import compiler as qlcompiler

        if as_fragment:
            ir = qlcompiler.compile_ast_fragment_to_ir(
                expr.qlast,
                schema=schema,
                modaliases=modaliases,
                anchors=anchors,
                path_prefix_anchor=path_prefix_anchor,
            )
        else:
            ir = qlcompiler.compile_ast_to_ir(
                expr.qlast,
                schema=schema,
                modaliases=modaliases,
                anchors=anchors,
                path_prefix_anchor=path_prefix_anchor,
                func_params=func_params,
                parent_object_type=parent_object_type,
                allow_generic_type_output=allow_generic_type_output,
                singletons=singletons,
            )

        return cls(
            text=expr.text,
            origtext=expr.origtext,
            refs=so.ObjectSet.create(schema, ir.schema_refs),
            _qlast=expr.qlast,
            _irast=ir,
        )