+2458
-984
lines changedFilter options
+2458
-984
lines changed Original file line number Diff line number Diff line change
@@ -22,57 +22,27 @@ public static void Start(SchemaBuilder sb, bool googleMapsChartScripts, string[]
22
22
23
23
public static Task<ResultTable> ExecuteChartAsync(ChartRequestModel request, CancellationToken token)
24
24
{
25
-
IDynamicQueryCore core = QueryLogic.Queries.GetQuery(request.QueryName).Core.Value;
26
-
27
-
return miExecuteChartAsync.GetInvoker(core.GetType().GetGenericArguments()[0])(request, core, token);
28
-
}
29
-
30
-
static GenericInvoker<Func<ChartRequestModel, IDynamicQueryCore, CancellationToken, Task<ResultTable>>> miExecuteChartAsync =
31
-
new((req, dq, token) => ExecuteChartAsync<int>(req, (DynamicQueryCore<int>)dq, token));
32
-
static async Task<ResultTable> ExecuteChartAsync<T>(ChartRequestModel request, DynamicQueryCore<T> dq, CancellationToken token)
33
-
{
34
-
using (ExecutionMode.UserInterface())
35
-
{
36
-
var result = await dq.ExecuteQueryAsync(new QueryRequest
37
-
{
38
-
GroupResults = request.HasAggregates(),
39
-
QueryName = request.QueryName,
40
-
Columns = request.GetQueryColumns(),
41
-
Filters = request.Filters,
42
-
Orders = request.GetQueryOrders(),
43
-
Pagination = request.MaxRows.HasValue ? new Pagination.Firsts(request.MaxRows.Value + 1) : new Pagination.All(),
44
-
}, token);
45
-
46
-
47
-
if (request.MaxRows.HasValue && result.Rows.Length == request.MaxRows.Value)
48
-
throw new InvalidOperationException($"The chart request for ${request.QueryName} exceeded the max rows ({request.MaxRows})");
49
-
50
-
return result;
51
-
}
25
+
return QueryLogic.Queries.ExecuteQueryAsync(request.ToQueryRequest(), token);
52
26
}
53
27
28
+
54
29
public static ResultTable ExecuteChart(ChartRequestModel request)
55
30
{
56
-
IDynamicQueryCore core = QueryLogic.Queries.GetQuery(request.QueryName).Core.Value;
31
+
return QueryLogic.Queries.ExecuteQuery(request.ToQueryRequest());
57
32
58
-
return miExecuteChart.GetInvoker(core.GetType().GetGenericArguments()[0])(request, core);
59
33
}
60
34
61
-
static GenericInvoker<Func<ChartRequestModel, IDynamicQueryCore, ResultTable>> miExecuteChart =
62
-
new((req, dq) => ExecuteChart<int>(req, (DynamicQueryCore<int>)dq));
63
-
static ResultTable ExecuteChart<T>(ChartRequestModel request, DynamicQueryCore<T> dq)
35
+
public static QueryRequest ToQueryRequest(this ChartRequestModel request)
64
36
{
65
-
using (ExecutionMode.UserInterface())
37
+
return new QueryRequest
66
38
{
67
-
return dq.ExecuteQuery(new QueryRequest
68
-
{
69
-
GroupResults = request.HasAggregates(),
70
-
QueryName = request.QueryName,
71
-
Columns = request.GetQueryColumns(),
72
-
Filters = request.Filters,
73
-
Orders = request.GetQueryOrders(),
74
-
Pagination = new Pagination.All(),
75
-
});
76
-
}
39
+
QueryName = request.QueryName,
40
+
GroupResults = request.HasAggregates(),
41
+
Columns = request.GetQueryColumns(),
42
+
Filters = request.Filters,
43
+
Orders = request.GetQueryOrders(),
44
+
Pagination = request.MaxRows.HasValue ? new Pagination.Firsts(request.MaxRows.Value + 1) : new Pagination.All(),
45
+
};
77
46
}
47
+
78
48
}
Original file line number Diff line number Diff line change
@@ -133,7 +133,7 @@ public static UserChartEntity RetrieveUserChart(this Lite<UserChartEntity> userC
133
133
}
134
134
}
135
135
136
-
internal static ChartRequestModel ToChartRequest(UserChartEntity userChart)
136
+
internal static ChartRequestModel ToChartRequest(this UserChartEntity userChart)
137
137
{
138
138
var cr = new ChartRequestModel(userChart.Query.ToQueryName())
139
139
{
Original file line number Diff line number Diff line change
@@ -74,7 +74,7 @@ public static void RegisterPublication(PredictorPublicationSymbol publication, P
74
74
return Trainings.TryGetC(lite)?.Context;
75
75
}
76
76
77
-
public static void Start(SchemaBuilder sb, Func<IFileTypeAlgorithm> predictorFileAlgorithm)
77
+
public static void Start(SchemaBuilder sb, IFileTypeAlgorithm predictorFileAlgorithm)
78
78
{
79
79
if (sb.NotDefined(MethodInfo.GetCurrentMethod()))
80
80
{
@@ -143,7 +143,7 @@ public static void Start(SchemaBuilder sb, Func<IFileTypeAlgorithm> predictorFil
143
143
e.AccuracyValidation,
144
144
});
145
145
146
-
FileTypeLogic.Register(PredictorFileType.PredictorFile, predictorFileAlgorithm());
146
+
FileTypeLogic.Register(PredictorFileType.PredictorFile, predictorFileAlgorithm);
147
147
148
148
SymbolLogic<PredictorAlgorithmSymbol>.Start(sb, () => Algorithms.Keys);
149
149
SymbolLogic<PredictorColumnEncodingSymbol>.Start(sb, () => Algorithms.Values.SelectMany(a => a.GetRegisteredEncodingSymbols()).Distinct());
Original file line number Diff line number Diff line change
@@ -72,21 +72,44 @@ public static QueryRequest ToQueryRequest(this UserQueryEntity userQuery)
72
72
return qr;
73
73
}
74
74
75
+
public static QueryRequest ToQueryRequestValue(this UserQueryEntity userQuery, QueryToken? valueToken = null)
76
+
{
77
+
var qn = userQuery.Query.ToQueryName();
78
+
79
+
if (valueToken == null)
80
+
{
81
+
var qd = QueryLogic.Queries.QueryDescription(qn);
82
+
valueToken = QueryUtils.Parse("Count", qd, SubTokensOptions.CanAggregate);
83
+
}
84
+
85
+
var qr = new QueryRequest()
86
+
{
87
+
QueryName = qn,
88
+
GroupResults = userQuery.GroupResults || valueToken is AggregateToken,
89
+
};
90
+
91
+
qr.Filters = userQuery.Filters.ToFilterList();
92
+
qr.Columns = new List<Column> { new Column(valueToken, null) };
93
+
qr.Orders = valueToken is AggregateToken ? new List<Order>() : userQuery.Orders.Select(qo => new Order(qo.Token.Token, qo.OrderType)).ToList();
94
+
95
+
qr.Pagination = userQuery.GetPagination() ?? new Pagination.All();
96
+
97
+
return qr;
98
+
}
99
+
75
100
static List<Column> MergeColumns(UserQueryEntity uq)
76
101
{
77
102
QueryDescription qd = QueryLogic.Queries.QueryDescription(uq.Query.ToQueryName());
78
103
79
-
switch (uq.ColumnsMode)
104
+
var result = uq.ColumnsMode switch
80
105
{
81
-
case ColumnOptionsMode.Add:
82
-
return qd.Columns.Where(cd => !cd.IsEntity).Select(cd => new Column(cd, qd.QueryName)).Concat(uq.Columns.Select(co => ToColumn(co))).ToList();
83
-
case ColumnOptionsMode.Remove:
84
-
return qd.Columns.Where(cd => !cd.IsEntity && !uq.Columns.Any(co => co.Token.TokenString == cd.Name)).Select(cd => new Column(cd, qd.QueryName)).ToList();
85
-
case ColumnOptionsMode.Replace:
86
-
return uq.Columns.Select(co => ToColumn(co)).ToList();
87
-
default:
88
-
throw new InvalidOperationException("{0} is not a valid ColumnOptionMode".FormatWith(uq.ColumnsMode));
89
-
}
106
+
ColumnOptionsMode.Add => qd.Columns.Where(cd => !cd.IsEntity).Select(cd => new Column(cd, qd.QueryName)).Concat(uq.Columns.Select(co => ToColumn(co))).ToList(),
107
+
ColumnOptionsMode.Remove => qd.Columns.Where(cd => !cd.IsEntity && !uq.Columns.Any(co => co.Token.TokenString == cd.Name)).Select(cd => new Column(cd, qd.QueryName)).ToList(),
108
+
ColumnOptionsMode.Replace => uq.Columns.Select(co => ToColumn(co)).ToList(),
109
+
_ => throw new InvalidOperationException("{0} is not a valid ColumnOptionMode".FormatWith(uq.ColumnsMode))
110
+
};
111
+
112
+
return result;
90
113
}
91
114
92
115
private static Column ToColumn(QueryColumnEmbedded co)
Original file line number Diff line number Diff line change
@@ -213,21 +213,6 @@ public override IQueryable<Entity> GetEntitiesFull(QueryEntitiesRequest request)
213
213
return result.TryTake(request.Count);
214
214
}
215
215
216
-
public override DQueryable<object> GetDQueryable(DQueryableRequest request)
217
-
{
218
-
request.Columns.Insert(0, new _EntityColumn(EntityColumnFactory().BuildColumnDescription(), QueryName));
219
-
220
-
DQueryable<T> query = Query
221
-
.ToDQueryable(GetQueryDescription())
222
-
.SelectMany(request.Multiplications)
223
-
.OrderBy(request.Orders)
224
-
.Where(request.Filters)
225
-
.Select(request.Columns)
226
-
.TryTake(request.Count);
227
-
228
-
return new DQueryable<object>(query.Query, query.Context);
229
-
}
230
-
231
216
public override Expression? Expression
232
217
{
233
218
get { return Query.Expression; }
Original file line number Diff line number Diff line change
@@ -69,7 +69,6 @@ public interface IDynamicQueryCore
69
69
70
70
IQueryable<Lite<Entity>> GetEntitiesLite(QueryEntitiesRequest request);
71
71
IQueryable<Entity> GetEntitiesFull(QueryEntitiesRequest request);
72
-
DQueryable<object> GetDQueryable(DQueryableRequest request);
73
72
}
74
73
75
74
@@ -130,7 +129,6 @@ public abstract class DynamicQueryCore<T> : IDynamicQueryCore
130
129
131
130
public abstract IQueryable<Lite<Entity>> GetEntitiesLite(QueryEntitiesRequest request);
132
131
public abstract IQueryable<Entity> GetEntitiesFull(QueryEntitiesRequest request);
133
-
public abstract DQueryable<object> GetDQueryable(DQueryableRequest request);
134
132
135
133
136
134
protected virtual ColumnDescriptionFactory[] InitializeColumns()
@@ -1122,22 +1120,27 @@ public static ResultTable ToResultTable<T>(this DEnumerableCount<T> collection,
1122
1120
{
1123
1121
object[] array = collection.Collection as object[] ?? collection.Collection.ToArray();
1124
1122
1125
-
var columnAccesors = req.Columns.Select(c => (
1126
-
column: c,
1127
-
lambda: Expression.Lambda(c.Token.BuildExpression(collection.Context), collection.Context.Parameter)
1128
-
)).ToList();
1123
+
var isMultiKeyGrupping = req.GroupResults && req.Columns.Count(col => col.Token is not AggregateToken) >= 2;
1129
1124
1130
-
return ToResultTable(array, columnAccesors, collection.TotalElements, req.Pagination);
1131
-
}
1125
+
var rows = collection.Collection.ToArray();
1132
1126
1133
-
public static ResultTable ToResultTable(object[] result, List<(Column column, LambdaExpression lambda)> columnAccesors, int? totalElements, Pagination pagination)
1134
-
{
1135
-
var columnValues = columnAccesors.Select(c => new ResultColumn(
1136
-
c.column,
1137
-
miGetValues.GetInvoker(c.column.Type)(result, c.lambda.Compile()))
1138
-
).ToArray();
1127
+
var columnAccesors = req.Columns.Select(c =>
1128
+
{
1129
+
var expression = Expression.Lambda(c.Token.BuildExpression(collection.Context), collection.Context.Parameter);
1130
+
1131
+
var lambda = expression.Compile();
1132
+
1133
+
var values = miGetValues.GetInvoker(c.Token.Type)(rows, lambda);
1134
+
1135
+
var rc = new ResultColumn(c, values);
1136
+
1137
+
if (c.Token.Type.IsLite() || isMultiKeyGrupping && c.Token is not AggregateToken)
1138
+
rc.CompressUniqueValues = true;
1139
+
1140
+
return rc;
1141
+
}).ToArray();
1139
1142
1140
-
return new ResultTable(columnValues, totalElements, pagination);
1143
+
return new ResultTable(columnAccesors, collection.TotalElements, req.Pagination);
1141
1144
}
1142
1145
1143
1146
static readonly GenericInvoker<Func<object[], Delegate, Array>> miGetValues = new((objs, del) => GetValues<int>(objs, (Func<object, int>)del));
Original file line number Diff line number Diff line change
@@ -162,11 +162,6 @@ public IQueryable<Entity> GetEntitiesFull(QueryEntitiesRequest request)
162
162
return Execute(ExecuteType.GetEntities, request.QueryName, null, dqb => dqb.Core.Value.GetEntitiesFull(request));
163
163
}
164
164
165
-
public DQueryable<object> GetDQueryable(DQueryableRequest request)
166
-
{
167
-
return Execute(ExecuteType.GetDQueryable, request.QueryName, null, dqb => dqb.Core.Value.GetDQueryable(request));
168
-
}
169
-
170
165
public event Func<object, bool, bool>? AllowQuery;
171
166
172
167
public bool QueryAllowed(object queryName, bool fullScreen)
Original file line number Diff line number Diff line change
@@ -95,7 +95,7 @@ public override async Task<ResultTable> ExecuteQueryGroupAsync(QueryRequest requ
95
95
{
96
96
req.Columns.Add(new Column(request.ValueToken, request.ValueToken.NiceName()));
97
97
var result = await Execute(req, GetQueryDescription(), cancellationToken);
98
-
return result.SelectOne(request.ValueToken).Unique(UniqueType.Single);
98
+
return result.SelectOne(request.ValueToken).Unique(UniqueType.SingleOrDefault);
99
99
}
100
100
}
101
101
@@ -129,11 +129,6 @@ public override IQueryable<Lite<Entity>> GetEntitiesLite(QueryEntitiesRequest re
129
129
throw new NotImplementedException();
130
130
}
131
131
132
-
public override DQueryable<object> GetDQueryable(DQueryableRequest request)
133
-
{
134
-
throw new NotImplementedException();
135
-
}
136
-
137
132
public override IQueryable<Entity> GetEntitiesFull(QueryEntitiesRequest request)
138
133
{
139
134
throw new NotImplementedException();
Original file line number Diff line number Diff line change
@@ -625,6 +625,7 @@ public static string GetDefaultValue(ITable table, IColumn column, Replacements
625
625
column.DbType.IsString() ? "''" :
626
626
column.DbType.IsDate() ? "GetDate()" :
627
627
column.DbType.IsGuid() ? "NEWID()" :
628
+
column.DbType.IsTime() ? "'00:00'" :
628
629
"?");
629
630
630
631
string defaultValue = rep.Interactive ? SafeConsole.AskString($"Default value for '{table.Name.Name}.{column.Name}'? ([Enter] for {typeDefault} or 'force' if there are no {(forNewColumn ? "rows" : "nulls")}) ", stringValidator: str => null) : "";
You can’t perform that action at this time.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4