Example #1
0
 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);
 }
Example #3
0
 virtual public void VisitAfter(GroupBy groupBy)
 {
 }
Example #4
0
 virtual public void VisitBefore(GroupBy groupBy)
 {
 }
 public override void VisitAfter(GroupBy groupBy)
 {
 }
Example #6
0
 public override void VisitAfter(GroupBy groupBy)
 {
     --_clauseLevel;
 }
Example #7
0
 public override void VisitBefore(GroupBy groupBy)
 {
     ++_clauseLevel;
 }
 public void VisitAfter(GroupBy groupBy)
 {
     _visitor.VisitAfter(groupBy);
 }
 public void VisitBefore(GroupBy groupBy)
 {
     _visitor.VisitBefore(groupBy);
 }