def serialize_expr_to_json( expr: pgast.BaseExpr, *, path_id: irast.PathId, nested: bool=False, env: context.Environment) -> pgast.BaseExpr: val: pgast.BaseExpr if isinstance(expr, pgast.TupleVar): val = tuple_var_as_json_object(expr, path_id=path_id, env=env) elif isinstance(expr, (pgast.RowExpr, pgast.ImplicitRowExpr)): val = pgast.FuncCall( name=_get_json_func('build_array', env=env), args=expr.args, null_safe=True, ser_safe=True,) elif path_id.is_collection_path() and not expr.ser_safe: val = coll_as_json_object(expr, styperef=path_id.target, env=env) elif not nested: val = pgast.FuncCall( name=_get_json_func('to', env=env), args=[expr], null_safe=True, ser_safe=True) else: val = expr return val
def get_path_output_alias(path_id: irast.PathId, aspect: str, *, env: context.Environment) -> str: rptr = path_id.rptr() if rptr is not None: alias_base = rptr.shortname.name elif path_id.is_collection_path(): alias_base = path_id.target.collection else: _, _, alias_base = path_id.target_name_hint.rpartition('::') return env.aliases.get(f'{alias_base}_{aspect}')