SelectCommand_GroupBy.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace FastReport.FastQueryBuilder
  5. {
  6. class SelectCommand_GroupBy : ParserBase
  7. {
  8. public override bool CanParse(SqlParser parser)
  9. {
  10. return parser.Token.Type == SqlTokenType.Keyword && parser.Token.Text == "group by";
  11. }
  12. public override void Parse(SqlParser parser)
  13. {
  14. SqlToken token = parser.NextToken();
  15. while(token.Type != SqlTokenType.EOF)
  16. {
  17. if (token.Type == SqlTokenType.Keyword)
  18. break;
  19. SqlParser.FieldStruct field = ReadField(parser, ref token);
  20. parser.Groups.Add(field);
  21. if (token.Type == SqlTokenType.Punctuation && token.Text == ",")
  22. token = parser.NextToken();
  23. }
  24. }
  25. public SqlParser.FieldStruct ReadField(SqlParser parser, ref SqlToken token)
  26. {
  27. string table = null;
  28. string variable = null;
  29. if (token.Type != SqlTokenType.Name)
  30. parser.ThrowFormat(token, "name");
  31. table = token.Text;
  32. token = parser.NextToken();
  33. if (token.Type != SqlTokenType.Punctuation || token.Text != ".")
  34. parser.ThrowFormat(token, ".");
  35. token = parser.NextToken();
  36. if (token.Type != SqlTokenType.Name)
  37. parser.ThrowFormat(token, "name");
  38. variable = token.Text;
  39. token = parser.NextToken();
  40. SqlParser.FieldStruct result = new SqlParser.FieldStruct();
  41. result.Table = table;
  42. result.Name = variable;
  43. return result;
  44. }
  45. }
  46. }