@@ -36,7 +36,7 @@ public ArangoTransform(DataSourceLoadOptionsBase loadOption, ArangoTransformSett
36
36
loadOption . Take = settings . MaxTake ;
37
37
}
38
38
39
-
39
+
40
40
public bool HasGrouping { get ; }
41
41
public SummaryInfo [ ] MergedGroupSummary { get ; set ; }
42
42
public SummaryInfo [ ] MergedTotalSummary { get ; set ; }
@@ -72,7 +72,7 @@ public async Task<DxLoadResult> ExecuteAsync<T>(IArangoContext arango,
72
72
queryBuilder . AppendLine ( _settings . Preamble ) ;
73
73
74
74
queryBuilder . AppendLine ( $ "FOR { _settings . IteratorVar } IN { collection } ") ;
75
-
75
+
76
76
if ( ! string . IsNullOrWhiteSpace ( _settings . PreFilter ) )
77
77
queryBuilder . AppendLine ( _settings . PreFilter ) ;
78
78
@@ -81,7 +81,7 @@ public async Task<DxLoadResult> ExecuteAsync<T>(IArangoContext arango,
81
81
if ( _settings . Filter != null )
82
82
queryBuilder . AppendLine ( " && " + _settings . Filter ) ;
83
83
84
-
84
+
85
85
if ( ! string . IsNullOrWhiteSpace ( _settings . PostFilter ) )
86
86
queryBuilder . AppendLine ( _settings . PostFilter ) ;
87
87
@@ -106,18 +106,18 @@ public async Task<DxLoadResult> ExecuteAsync<T>(IArangoContext arango,
106
106
107
107
var query = queryBuilder . ToString ( ) ;
108
108
109
-
109
+
110
110
if ( HasGrouping )
111
111
{
112
112
var res = await arango . Query . ExecuteAsync < JObject > ( handle , query , Parameter ,
113
113
cancellationToken : cancellationToken ) ;
114
114
115
115
var groupData = BuildGrouping ( this , res ) ;
116
-
116
+
117
117
var dxRes = new DxLoadResult
118
118
{
119
119
Data = groupData ,
120
- TotalCount = _loadOption . RequireTotalCount ? groupData . Sum ( x=> x . Count ?? 0 ) : - 1 ,
120
+ TotalCount = _loadOption . RequireTotalCount ? groupData . Sum ( x => x . Count ?? 0 ) : - 1 ,
121
121
GroupCount = _loadOption . RequireGroupCount ? groupData . Count : - 1 ,
122
122
} ;
123
123
@@ -127,7 +127,6 @@ public async Task<DxLoadResult> ExecuteAsync<T>(IArangoContext arango,
127
127
{
128
128
try
129
129
{
130
-
131
130
if ( x . StartsWith ( "SUM" ) || x . StartsWith ( "COUNT" ) )
132
131
return groupData . Sum ( y => y . Summary [ idx ] ?? 0m ) ;
133
132
if ( x . StartsWith ( "MAX" ) )
@@ -138,17 +137,15 @@ public async Task<DxLoadResult> ExecuteAsync<T>(IArangoContext arango,
138
137
{
139
138
return groupData . Average ( y => ( y . Summary [ idx ] ?? 0m ) ) ;
140
139
}
141
-
140
+
142
141
143
142
return 0m ;
144
143
}
145
144
catch ( Exception )
146
145
{
147
- return ( decimal ? ) 0m ;
146
+ return ( decimal ? ) 0m ;
148
147
}
149
148
} ) . ToArray ( ) ;
150
-
151
-
152
149
}
153
150
154
151
@@ -169,10 +166,10 @@ public async Task<DxLoadResult> ExecuteAsync<T>(IArangoContext arango,
169
166
summaryQueryBuilder . AppendLine ( _settings . Preamble ) ;
170
167
171
168
summaryQueryBuilder . AppendLine ( $ "FOR { _settings . IteratorVar } IN { collection } ") ;
172
-
169
+
173
170
if ( ! string . IsNullOrWhiteSpace ( _settings . PreFilter ) )
174
171
summaryQueryBuilder . AppendLine ( _settings . PreFilter ) ;
175
-
172
+
176
173
summaryQueryBuilder . AppendLine ( "FILTER " + FilterExpression ) ;
177
174
178
175
if ( _settings . Filter != null )
@@ -221,8 +218,6 @@ public bool Transform(out string error)
221
218
} )
222
219
. Select ( x => x . First ( ) )
223
220
. ToArray ( ) ;
224
-
225
-
226
221
}
227
222
228
223
if ( _loadOption . TotalSummary ? . Any ( ) == true )
@@ -235,9 +230,8 @@ public bool Transform(out string error)
235
230
} )
236
231
. Select ( x => x . First ( ) )
237
232
. ToArray ( ) ;
238
-
239
233
}
240
-
234
+
241
235
#endregion
242
236
243
237
// TODO: Recursive
@@ -290,7 +284,7 @@ public bool Transform(out string error)
290
284
291
285
if ( _settings . RestrictGroups != null )
292
286
if ( _loadOption . Group . Any ( x => ! _settings . RestrictGroups
293
- . Contains ( x . Selector . FirstCharOfPropertiesToUpper ( ) ) ) )
287
+ . Contains ( x . Selector . FirstCharOfPropertiesToUpper ( ) ) ) )
294
288
{
295
289
error = "restricted group selector" ;
296
290
return false ;
@@ -302,7 +296,6 @@ public bool Transform(out string error)
302
296
FilterExpression = Filter ( ) ;
303
297
304
298
305
-
306
299
foreach ( var a in _extractedFilters . GroupBy ( x => x . Item1 ) )
307
300
{
308
301
var subfilters = a . GroupBy ( y => y . Item2 )
@@ -334,7 +327,7 @@ public bool Transform(out string error)
334
327
private static IList GetRootFilter ( IList loadOptionsFilter )
335
328
{
336
329
if ( loadOptionsFilter != null && loadOptionsFilter . Count == 1 )
337
- return GetRootFilter ( ( JArray ) loadOptionsFilter [ 0 ] ) ;
330
+ return GetRootFilter ( ( JArray ) loadOptionsFilter [ 0 ] ) ;
338
331
339
332
return loadOptionsFilter ;
340
333
}
@@ -353,13 +346,12 @@ private string PropertyName(string name, string iteratorVar = null)
353
346
354
347
if ( iteratorVar == string . Empty )
355
348
return name ;
356
-
349
+
357
350
var nameLambda = _settings . PropertyTransform ;
358
351
359
352
if ( nameLambda != null )
360
353
return _settings . PropertyTransform ( name , _settings ) ;
361
354
362
-
363
355
364
356
return $ "{ iteratorVar ?? _settings . IteratorVar } .{ name } ";
365
357
}
@@ -378,9 +370,13 @@ private string Aggregate()
378
370
var groups = _loadOption . Group . Where ( x => x . GroupInterval != "hour" && x . GroupInterval != "minute" )
379
371
. Select ( g =>
380
372
{
381
- var selector = PropertyName ( _settings . ValidPropertyName ( g . Selector ) . FirstCharOfPropertiesToUpper ( ) , string . Empty ) ;
373
+ var selector =
374
+ PropertyName ( _settings . ValidPropertyName ( g . Selector ) . FirstCharOfPropertiesToUpper ( ) ,
375
+ string . Empty ) ;
382
376
383
- var selectorRight = _settings ? . PropertyTransform != null ? _settings . PropertyTransform ( selector , _settings ) : $ "{ _settings . IteratorVar } .{ selector } ";
377
+ var selectorRight = _settings ? . PropertyTransform != null
378
+ ? _settings . PropertyTransform ( selector , _settings )
379
+ : $ "{ _settings . IteratorVar } .{ selector } ";
384
380
var selectorLeft = selector . Replace ( "." , "" ) ;
385
381
386
382
if ( g . GroupInterval == "year" )
@@ -467,7 +463,7 @@ private string Aggregate()
467
463
sb . AppendLine ( "AGGREGATE" ) ;
468
464
sb . AppendLine ( string . Join ( ", " , aggregates . Distinct ( ) ) ) ;
469
465
470
- var projection = new List < string > { "TotalCount" } ;
466
+ var projection = new List < string > { "TotalCount" } ;
471
467
472
468
foreach ( var group in Groups )
473
469
projection . Add ( group ) ;
@@ -521,7 +517,9 @@ private string Sort()
521
517
if ( _loadOption . Sort != null )
522
518
sortingInfos . AddRange ( _loadOption . Sort . Where ( x => x . Selector != null ) . ToList ( ) ) ;
523
519
else
524
- return _settings . StableSort ? $ "SORT { _settings . SortIteratorVar ?? _settings . IteratorVar } ._key" : string . Empty ;
520
+ return _settings . StableSort
521
+ ? $ "SORT { _settings . SortIteratorVar ?? _settings . IteratorVar } ._key"
522
+ : string . Empty ;
525
523
526
524
527
525
var sort = "SORT " + string . Join ( ", " ,
@@ -542,7 +540,7 @@ private string Sort()
542
540
return (item[0] is IList);
543
541
}*/
544
542
545
-
543
+
546
544
private string GetMatchingFilter ( IList dxFilter , bool not = false )
547
545
{
548
546
if ( dxFilter == null )
@@ -551,45 +549,45 @@ private string GetMatchingFilter(IList dxFilter, bool not = false)
551
549
if ( dxFilter . Count == 0 )
552
550
return "true" ;
553
551
554
- if ( dxFilter . Count >= 2 )
552
+ if ( dxFilter . Count == 1 )
553
+ return GetMatchingFilter ( ( JArray ) dxFilter [ 0 ] , not ) ;
554
+
555
+ if ( dxFilter . Count == 2 )
555
556
{
556
- if ( dxFilter . Count == 2 )
557
+ if ( ( dxFilter [ 0 ] is JValue v && v . Value is string s && s == "!"
558
+ || dxFilter [ 0 ] is string s2 && s2 == "!" ) && dxFilter [ 1 ] is JArray )
557
559
{
558
- if ( ( dxFilter [ 0 ] is JValue v && v . Value is string s && s == "!"
559
- || dxFilter [ 0 ] is string s2 && s2 == "!" ) && dxFilter [ 1 ] is JArray )
560
- {
561
- var r = GetMatchingFilter ( ( JArray ) dxFilter [ 1 ] , true ) ;
562
- return $ "!({ r } )";
563
- }
560
+ var r = GetMatchingFilter ( ( JArray ) dxFilter [ 1 ] , true ) ;
561
+ return $ "!({ r } )";
562
+ }
564
563
565
- dxFilter . Add ( dxFilter [ 1 ] ) ;
564
+ dxFilter . Add ( dxFilter [ 1 ] ) ;
566
565
567
- if ( dxFilter [ 0 ] is JArray )
568
- dxFilter [ 1 ] = JToken . FromObject ( "and" ) ;
569
- else
570
- dxFilter [ 1 ] = JToken . FromObject ( "=" ) ;
571
- }
566
+ if ( dxFilter [ 0 ] is JArray )
567
+ dxFilter [ 1 ] = JToken . FromObject ( "and" ) ;
572
568
else
569
+ dxFilter [ 1 ] = JToken . FromObject ( "=" ) ;
570
+ }
571
+ else
572
+ {
573
+ // [["X","=","A"],["X","=","B"],["X","=","C"]]
574
+ var newDxFilterList = new List < object > ( ) ;
575
+ int i = 0 ;
576
+ foreach ( var element in dxFilter )
573
577
{
574
- // [["X","=","A"],["X","=","B"],["X","=","C"]]
575
- var newDxFilterList = new List < object > ( ) ;
576
- int i = 0 ;
577
- foreach ( var element in dxFilter )
578
- {
579
- newDxFilterList . Add ( element ) ;
580
-
581
- if ( element is JArray && i != dxFilter . Count - 1 )
582
- {
583
- if ( ( dxFilter [ i + 1 ] is JArray ) )
584
- newDxFilterList . Add ( JToken . FromObject ( "and" ) ) ;
585
- }
586
-
578
+ newDxFilterList . Add ( element ) ;
587
579
588
- ++ i ;
580
+ if ( element is JArray && i != dxFilter . Count - 1 )
581
+ {
582
+ if ( ( dxFilter [ i + 1 ] is JArray ) )
583
+ newDxFilterList . Add ( JToken . FromObject ( "and" ) ) ;
589
584
}
590
585
591
- dxFilter = newDxFilterList ;
586
+
587
+ ++ i ;
592
588
}
589
+
590
+ dxFilter = newDxFilterList ;
593
591
}
594
592
595
593
//if (IsCriteria(dxFilter))
@@ -616,7 +614,6 @@ private string GetMatchingFilter(IList dxFilter, bool not = false)
616
614
//}
617
615
618
616
619
-
620
617
var op = dxFilter [ 1 ] ;
621
618
622
619
string opString ;
@@ -683,7 +680,7 @@ private string GetMatchingFilter(IList dxFilter, bool not = false)
683
680
for ( var i = 0 ; i < dxFilter . Count ; i ++ )
684
681
if ( i % 2 == 0 )
685
682
{
686
- logicalResult += GetMatchingFilter ( ( JArray ) dxFilter [ i ] , not ) ;
683
+ logicalResult += GetMatchingFilter ( ( JArray ) dxFilter [ i ] , not ) ;
687
684
if ( i + 1 != dxFilter . Count ) logicalResult += $ " { opString } ";
688
685
}
689
686
@@ -708,7 +705,6 @@ private string GetMatchingFilter(IList dxFilter, bool not = false)
708
705
else
709
706
property = PropertyName ( realPropertyName ) ;
710
707
711
-
712
708
713
709
string boundParam = null ;
714
710
@@ -820,10 +816,10 @@ private string GetMatchingFilter(IList dxFilter, bool not = false)
820
816
break ;
821
817
}
822
818
case JArray ja :
823
- {
824
- returnValue = $@ "{ property } IN { CreateParameter ( ja ) } ";
825
- break ;
826
- }
819
+ {
820
+ returnValue = $@ "{ property } IN { CreateParameter ( ja ) } ";
821
+ break ;
822
+ }
827
823
default :
828
824
{
829
825
var type = rawValue . GetType ( ) ;
@@ -898,7 +894,7 @@ public List<DxGroupResult> BuildGrouping(ArangoTransform aq, List<JObject> list,
898
894
}
899
895
catch ( Exception )
900
896
{
901
- return ( decimal ? ) 0m ;
897
+ return ( decimal ? ) 0m ;
902
898
}
903
899
} ) . ToArray ( ) ;
904
900
}
@@ -923,7 +919,7 @@ public List<DxGroupResult> BuildGrouping(ArangoTransform aq, List<JObject> list,
923
919
}
924
920
catch ( Exception )
925
921
{
926
- return ( decimal ? ) 0m ;
922
+ return ( decimal ? ) 0m ;
927
923
}
928
924
} ) . ToArray ( ) ;
929
925
}
0 commit comments