def reduce_Insert(self, *kids): r'%reduce INSERT OptionallyAliasedExpr OptUnlessConflictClause' subj = kids[1].val.expr subj_alias = kids[1].val.alias # check that the insert subject is either a path or a shape if isinstance(subj, qlast.Shape): objtype = subj.expr shape = subj.elements else: objtype = subj shape = [] unless_conflict = kids[2].val if not isinstance(objtype, qlast.Path): raise EdgeQLSyntaxError( "insert expression must be an object type reference", context=subj.context) self.val = qlast.InsertQuery( subject=objtype, subject_alias=subj_alias, shape=shape, unless_conflict=unless_conflict, )
def compile_ConfigInsert( expr: qlast.ConfigInsert, *, ctx: context.ContextLevel) -> irast.Set: info = _validate_op(expr, ctx=ctx) if not expr.system: raise errors.UnsupportedFeatureError( f'CONFIGURE SESSION INSERT is not supported' ) level = 'SYSTEM' if expr.system else 'SESSION' subject = ctx.env.get_track_schema_object( f'cfg::{expr.name.name}', default=None) if subject is None: raise errors.ConfigurationError( f'{expr.name.name!r} is not a valid configuration item', context=expr.context, ) insert_stmt = qlast.InsertQuery( subject=qlast.Path( steps=[ qlast.ObjectRef( name=expr.name.name, module='cfg', ) ] ), shape=expr.shape, ) for el in expr.shape: if isinstance(el.compexpr, qlast.InsertQuery): _inject_tname(el.compexpr, ctx=ctx) with ctx.newscope() as subctx: subctx.expr_exposed = True subctx.modaliases = ctx.modaliases.copy() subctx.modaliases[None] = 'cfg' subctx.special_computables_in_mutation_shape |= {'_tname'} insert_ir = dispatch.compile(insert_stmt, ctx=subctx) insert_ir_set = setgen.ensure_set(insert_ir, ctx=subctx) assert isinstance(insert_ir_set.expr, irast.InsertStmt) insert_subject = insert_ir_set.expr.subject _validate_config_object(insert_subject, level=level, ctx=subctx) return setgen.ensure_set( irast.ConfigInsert( name=info.param_name, cardinality=info.cardinality, system=expr.system, requires_restart=info.requires_restart, backend_setting=info.backend_setting, expr=insert_subject, context=expr.context, ), ctx=ctx, )