コード例 #1
0
 def reduce_SET_NodeName_TURNSTILE_Expr(self, *kids):
     # if the expression is trivial (a literal or variable), it
     # should be treated as an eager expression
     eager = isinstance(kids[3].val, (qlast.Constant, qlast.Tuple))
     self.val = qlast.CreateAttributeValue(name=kids[1].val,
                                           value=kids[3].val,
                                           as_expr=not eager)
コード例 #2
0
ファイル: named.py プロジェクト: versada/edgedb
    def _set_attribute_ast(self, context, node, name, value):
        if isinstance(value, expr.ExpressionText):
            value = qlast.ExpressionText(expr=str(value))

        as_expr = isinstance(value, qlast.ExpressionText)
        name_ref = qlast.ObjectRef(
            name=name, module='')
        node.commands.append(qlast.CreateAttributeValue(
            name=name_ref, value=value, as_expr=as_expr))
コード例 #3
0
 def reduce_CreateViewShortStmt(self, *kids):
     r"""%reduce \
         CREATE VIEW NodeName TURNSTILE Expr \
     """
     self.val = qlast.CreateView(name=kids[2].val,
                                 commands=[
                                     qlast.CreateAttributeValue(
                                         name=qlast.ObjectRef(name='expr'),
                                         value=kids[4].val,
                                         as_expr=True)
                                 ])
コード例 #4
0
    def _get_ast(self, context):
        value = self.new_value

        new_value_empty = \
            (value is None or
                (isinstance(value, collections.Container) and not value))

        old_value_empty = \
            (self.old_value is None or
                (isinstance(self.old_value, collections.Container) and
                    not self.old_value))

        if new_value_empty and not old_value_empty:
            op = qlast.DropAttributeValue(
                name=qlast.ObjectRef(module='', name=self.property))
            return op

        if new_value_empty and old_value_empty:
            return

        if isinstance(value, s_expr.ExpressionText):
            value = edgeql.parse(str(value))
        elif utils.is_nontrivial_container(value):
            value = qlast.Tuple(elements=[
                qlast.Constant(value=el) for el in value
            ])
        elif isinstance(value, nlang.WordCombination):
            forms = value.as_dict()
            if len(forms) > 1:
                items = []
                for k, v in forms.items():
                    items.append((
                        qlast.Constant(value=k),
                        qlast.Constant(value=v)
                    ))
                value = qlast.Array(elements=[
                    qlast.Tuple(elements=[k, v]) for k, v in items
                ])
            else:
                value = qlast.Constant(value=str(value))
        else:
            value = qlast.Constant(value=value)

        as_expr = isinstance(value, qlast.ExpressionText)
        op = qlast.CreateAttributeValue(
            name=qlast.ObjectRef(module='', name=self.property),
            value=value, as_expr=as_expr)
        return op