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)
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))
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) ])
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