public bool VisitExprOver(ExprOver expr, TCtx arg) { var res = this.Visit(expr, "Over", arg, out var argOut) && this.Accept("Partitions", expr.Partitions, argOut) && this.Accept("OrderBy", expr.OrderBy, argOut) && this.Accept("FrameClause", expr.FrameClause, argOut); this._visitor.EndVisitExpr(expr, arg); return(res); }
public bool VisitExprOver(ExprOver exprOver, IExpr?parent) { this.Builder.Append("OVER("); if (exprOver.Partitions != null) { this.AssertNotEmptyList(exprOver.Partitions, "Partition list cannot be empty"); this.Builder.Append("PARTITION BY "); this.AcceptListComaSeparated(exprOver.Partitions, exprOver); } if (exprOver.OrderBy != null) { if (exprOver.Partitions != null) { this.Builder.Append(' '); } this.Builder.Append("ORDER BY "); exprOver.OrderBy.Accept(this, exprOver); } if (exprOver.FrameClause != null) { this.Builder.Append(' '); exprOver.FrameClause.Accept(this, exprOver); } this.Builder.Append(")"); return(true); }
public static ExprOver WithFrameClause(this ExprOver original, ExprFrameClause?newFrameClause) => new ExprOver(partitions: original.Partitions, orderBy: original.OrderBy, frameClause: newFrameClause);
public static ExprOver WithOrderBy(this ExprOver original, ExprOrderBy?newOrderBy) => new ExprOver(partitions: original.Partitions, orderBy: newOrderBy, frameClause: original.FrameClause);
public static ExprOver WithPartitions(this ExprOver original, IReadOnlyList <ExprValue>?newPartitions) => new ExprOver(partitions: newPartitions, orderBy: original.OrderBy, frameClause: original.FrameClause);
public static ExprAnalyticFunction WithOver(this ExprAnalyticFunction original, ExprOver newOver) => new ExprAnalyticFunction(name: original.Name, arguments: original.Arguments, over: newOver);
public static ExprAnalyticFunction AnalyticFunction(string name, IReadOnlyList <ExprValue>?arguments, ExprOver over) => new ExprAnalyticFunction(new ExprFunctionName(true, name), arguments, over);