public override void VisitAfter(GroupBy groupBy) { for (int i = 0; i < groupBy.Count; ++i) { if (IsPlaceHolderExpr(groupBy[i])) { groupBy[i] = Place((PlaceHolderExpr)groupBy[i]); } } }
private bool FindInGroupByItems(GroupBy groupBy, ResultInfo resultInfo, int resultInfoIndex) { foreach (var groupByExpr in groupBy) { if (groupByExpr.GetType() == typeof(Column)) { var groupByColumn = (Column)groupByExpr; // SELECT句がGroupByキーか判定するため、SELECT句がColumn型であり、かつそのColumnの // テーブル別名と列名がGROUPBYキーと一致するかを調べる if (resultInfo.SourceInfo != null) { if (resultInfo.SourceInfo.IsDirectSource(groupByColumn, _ignoreCase)) { return(true); } } } else if (groupByExpr.GetType() == typeof(UNumericLiteral) && ((UNumericLiteral)groupByExpr).TryParseToLong() > 0) { if (((UNumericLiteral)groupByExpr).TryParseToLong() == resultInfoIndex + 1) { return(true); } } else { // GroupBy句がExpressionの場合、SELECTに同等な論理式が存在すればTrueを返す // 暫定的に同じ文字列か否かで判定する var stringifier1 = new CompactStringifier(1024); var stringifier2 = new CompactStringifier(1024); groupByExpr.Accept(stringifier1); if (resultInfo.Node != null) { resultInfo.Node.Accept(stringifier2); } var groupByExprStr = stringifier1.ToString(); var selectItemStr = stringifier2.ToString(); if (string.Compare(groupByExprStr, selectItemStr, _ignoreCase) == 0) { return(true); } } } return(false); }
virtual public void VisitAfter(GroupBy groupBy) { }
virtual public void VisitBefore(GroupBy groupBy) { }
public override void VisitAfter(GroupBy groupBy) { }
public override void VisitAfter(GroupBy groupBy) { --_clauseLevel; }
public override void VisitBefore(GroupBy groupBy) { ++_clauseLevel; }
public void VisitAfter(GroupBy groupBy) { _visitor.VisitAfter(groupBy); }
public void VisitBefore(GroupBy groupBy) { _visitor.VisitBefore(groupBy); }