SqlGenerator_AggregateHandlers.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using Ant.Core;
  2. using Ant.DbExpressions;
  3. using System;
  4. using System.Collections;
  5. using System.Collections.Generic;
  6. using System.Collections.ObjectModel;
  7. using System.Linq;
  8. using System.Reflection;
  9. using System.Text;
  10. namespace Ant.MySql
  11. {
  12. partial class SqlGenerator : DbExpressionVisitor<DbExpression>
  13. {
  14. static Dictionary<string, Action<DbAggregateExpression, SqlGenerator>> InitAggregateHandlers()
  15. {
  16. var aggregateHandlers = new Dictionary<string, Action<DbAggregateExpression, SqlGenerator>>();
  17. aggregateHandlers.Add("Count", Aggregate_Count);
  18. aggregateHandlers.Add("LongCount", Aggregate_LongCount);
  19. aggregateHandlers.Add("Sum", Aggregate_Sum);
  20. aggregateHandlers.Add("Max", Aggregate_Max);
  21. aggregateHandlers.Add("Min", Aggregate_Min);
  22. aggregateHandlers.Add("Average", Aggregate_Average);
  23. var ret = Utils.Clone(aggregateHandlers);
  24. return ret;
  25. }
  26. static void Aggregate_Count(DbAggregateExpression exp, SqlGenerator generator)
  27. {
  28. Aggregate_Count(generator);
  29. }
  30. static void Aggregate_LongCount(DbAggregateExpression exp, SqlGenerator generator)
  31. {
  32. Aggregate_LongCount(generator);
  33. }
  34. static void Aggregate_Sum(DbAggregateExpression exp, SqlGenerator generator)
  35. {
  36. Aggregate_Sum(generator, exp.Parameters.First(), exp.Method.ReturnType);
  37. }
  38. static void Aggregate_Max(DbAggregateExpression exp, SqlGenerator generator)
  39. {
  40. Aggregate_Max(generator, exp.Parameters.First(), exp.Method.ReturnType);
  41. }
  42. static void Aggregate_Min(DbAggregateExpression exp, SqlGenerator generator)
  43. {
  44. Aggregate_Min(generator, exp.Parameters.First(), exp.Method.ReturnType);
  45. }
  46. static void Aggregate_Average(DbAggregateExpression exp, SqlGenerator generator)
  47. {
  48. Aggregate_Average(generator, exp.Parameters.First(), exp.Method.ReturnType);
  49. }
  50. }
  51. }