QueryDef.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. using System;
  2. using InABox.Core;
  3. namespace InABox.Clients
  4. {
  5. public class QueryDef : IQueryDef
  6. {
  7. public QueryDef(Type type)
  8. {
  9. Type = type;
  10. }
  11. public QueryDef(Type type, IFilter? filter = null, IColumns? columns = null, ISortOrder? sort = null, CoreRange? range = null)
  12. {
  13. Type = type;
  14. Filter = filter;
  15. Columns = columns;
  16. SortOrder = sort;
  17. Range = range;
  18. }
  19. public Type Type { get; private set; }
  20. public IFilter? Filter { get; set; }
  21. public IColumns? Columns { get; set; }
  22. public ISortOrder? SortOrder { get; set; }
  23. public CoreRange? Range { get; set; }
  24. }
  25. public class QueryDef<T> : IQueryDef where T : Entity, IRemotable, IPersistent, new()
  26. {
  27. public QueryDef(Filter<T>? filter = null, Columns<T>? columns = null, SortOrder<T>? sortorder = null, CoreRange? range = null)
  28. {
  29. Filter = filter;
  30. Columns = columns;
  31. SortOrder = sortorder;
  32. Range = range;
  33. }
  34. public Type Type => typeof(T);
  35. public Filter<T>? Filter { get; }
  36. public Columns<T>? Columns { get; }
  37. public SortOrder<T>? SortOrder { get; }
  38. public CoreRange? Range { get; set; }
  39. IFilter? IQueryDef.Filter => Filter;
  40. IColumns? IQueryDef.Columns => Columns;
  41. ISortOrder? IQueryDef.SortOrder => SortOrder;
  42. }
  43. public class KeyedQueryDef : QueryDef, IKeyedQueryDef
  44. {
  45. public string Key { get; }
  46. public KeyedQueryDef(string key, Type type, IFilter? filter = null, IColumns? columns = null, ISortOrder? sortOrder = null, CoreRange? range = null) : base(type)
  47. {
  48. Key = key;
  49. Filter = filter;
  50. Columns = columns;
  51. SortOrder = sortOrder;
  52. Range = range;
  53. }
  54. }
  55. public class KeyedQueryDef<T> : QueryDef<T>, IKeyedQueryDef where T : Entity, IRemotable, IPersistent, new()
  56. {
  57. public string Key { get; }
  58. public KeyedQueryDef(
  59. string key,
  60. Filter<T>? filter = null,
  61. Columns<T>? columns = null,
  62. SortOrder<T>? sortorder = null,
  63. CoreRange? range = null)
  64. : base(filter, columns, sortorder, range)
  65. {
  66. Key = key;
  67. }
  68. public KeyedQueryDef(
  69. Filter<T>? filter = null,
  70. Columns<T>? columns = null,
  71. SortOrder<T>? sortorder = null,
  72. CoreRange? range = null): base(filter, columns, sortorder, range)
  73. {
  74. Key = typeof(T).Name;
  75. }
  76. }
  77. /*public class HeadQueryDef<T> : IQueryDef where T : Entity, new()
  78. {
  79. public HeadQueryDef(Filter<T> filter, Columns<T> columns, SortOrder<T> sortorder)
  80. {
  81. Type = typeof(T);
  82. Filter = filter;
  83. Columns = columns;
  84. SortOrder = sortorder;
  85. }
  86. public Type Type { get; set; }
  87. public object Filter { get; set; }
  88. public object Columns { get; set; }
  89. public object SortOrder { get; set; }
  90. }
  91. public interface IChildQueryDef : IQueryDef { }
  92. public class ChildQueryDef<T> : IChildQueryDef where T : Entity, new()
  93. {
  94. public ChildQueryDef(Filter<T> filter, Columns<T> columns, SortOrder<T> sortorder)
  95. {
  96. Type = typeof(T);
  97. Filter = filter;
  98. Columns = columns;
  99. SortOrder = sortorder;
  100. }
  101. public Type Type { get; set; }
  102. public object Filter { get; set; }
  103. public object Columns { get; set; }
  104. public object SortOrder { get; set; }
  105. }*/
  106. }