private static IOrderedEnumerable <Row> Order( IOrderedEnumerable <Row> seq, ExpressionWithSortOrder element, Scope scope) { object Func(Row x) => Evaluate(element.Expression, new RowArgument(x), scope); return(element.SortOrder == SortOrder.Descending ? seq.ThenByDescending(Func) : seq.ThenBy(Func)); }
public QsiOrderExpressionNode VisitExpressionWithSortOrder(ExpressionWithSortOrder expressionWithSortOrder) { return(TreeHelper.Create <QsiOrderExpressionNode>(n => { n.Expression.SetValue(ExpressionVisitor.VisitScalarExpression(expressionWithSortOrder.Expression)); n.Order = expressionWithSortOrder.SortOrder == SortOrder.Descending ? QsiSortOrder.Descending : QsiSortOrder.Ascending; SqlServerTree.PutFragmentSpan(n, expressionWithSortOrder); })); }
internal gsOrderByTerm GetOrderByTerm(ExpressionWithSortOrder orderByElement) { gsOrderByTerm orderByTerm; gsSelectColumn selCol = gsScalarExpressionParserFactory.CreateParser(orderByElement.Expression, null).Parse(); orderByTerm = new gsOrderByTerm() { Direction = orderByElement.SortOrder.ToOrderByDirection(), Field = selCol.ColumnName }; orderByTerm.Table = selCol.Table; return(orderByTerm); }
/// <summary> /// ソート順をインスタンス化します。 /// </summary> public OrderByItem(string expression) { if (!string.IsNullOrEmpty(expression)) { try { var tokens = TransactSQL._Parser.GetTokenStream(new StringReader(expression), out IList <ParseError> errors).ToList(); if (errors.Count > 0) { throw new ArgumentException("指定された SQL 文の解析に失敗しました。"); } var lastToken = tokens.Where(token => token.TokenType != TSqlTokenType.EndOfFile).LastOrDefault(); var sortOrder = SortOrder.NotSpecified; if (lastToken != null) { var upperLastToken = lastToken.Text.ToUpper(); if (upperLastToken == "ASC") { sortOrder = SortOrder.Ascending; tokens.Remove(lastToken); } else if (upperLastToken == "DESC") { sortOrder = SortOrder.Descending; tokens.Remove(lastToken); } } var scalarSql = tokens.ConvertAll(token => token.Text).Aggregate((partialPhrase, word) => $"{partialPhrase}{word}"); var expressionWithSortOrder = new ExpressionWithSortOrder() { Expression = TransactSQL._Parser.ParseExpression(new StringReader(scalarSql), out errors), SortOrder = sortOrder }; if (errors.Count > 0) { throw new ArgumentException("指定された SQL 文の解析に失敗しました。"); } ExpressionWithSortOrder = expressionWithSortOrder; } catch (InvalidCastException) { throw new ArgumentException("指定された SQL 文の解析に失敗しました。"); } } }
private void ProcessOrderExpression(ExpressionWithSortOrder Expression) { string SubExpressionType = FragmentTypeParser.GetFragmentType(Expression.Expression); switch (SubExpressionType) { case "IntegerLiteral": _smells.SendFeedBack(7, Expression); break; case "CastCall": var CastCall = (CastCall) Expression.Expression; if (FragmentTypeParser.GetFragmentType(CastCall.Parameter) == "ColumnReferenceExpression") { _smells.SendFeedBack(6, Expression); } break; } }
private void ProcessOrderExpression(ExpressionWithSortOrder Expression) { string SubExpressionType = FragmentTypeParser.GetFragmentType(Expression.Expression); switch (SubExpressionType) { case "IntegerLiteral": _smells.SendFeedBack(7, Expression); break; case "CastCall": var CastCall = (CastCall)Expression.Expression; if (FragmentTypeParser.GetFragmentType(CastCall.Parameter) == "ColumnReferenceExpression") { _smells.SendFeedBack(6, Expression); } break; } }
public override void ExplicitVisit(ExpressionWithSortOrder node) { base.ExplicitVisit(node); ReplaceExpression(node, n => n.Expression); }
public override void Visit(ExpressionWithSortOrder node) { this.action(node); }
public override void ExplicitVisit(ExpressionWithSortOrder fragment) { _fragments.Add(fragment); }
/// <summary> /// KzLib.SqlServer.TransactSql.ScriptDom.AddWhereBooleanExpressionVisitor をインスタンス化します。 /// </summary> /// <param name="expressionWithSortOrder">追加するソート順</param> public AddExpressionWithSortOrderVisitor(ExpressionWithSortOrder expressionWithSortOrder) { ExpressionWithSortOrder = expressionWithSortOrder; }
/// <summary> /// ソート順をインスタンス化します。 /// </summary> internal OrderByItem(ExpressionWithSortOrder expressionWithSortOrder) { ExpressionWithSortOrder = expressionWithSortOrder; }