4using System.Threading.Tasks;
17 private readonly KeyValuePair<string, ScriptNode>[] additionalFields;
18 private readonly
bool[] additionalFieldAsynchronous;
21 private readonly
int count;
23 private object current =
null;
33 KeyValuePair<string, int>[] AdditionalFields,
ScriptNode[] Columns)
35 this.e = ItemEnumerator;
38 this.count = AdditionalFields.Length;
40 this.additionalFieldAsynchronous =
new bool[this.count];
41 this.additionalFields =
new KeyValuePair<string, ScriptNode>[this.count];
43 for (
int i = 0; i < this.count; i++)
45 KeyValuePair<string, int> P = AdditionalFields[i];
48 this.additionalFields[i] =
new KeyValuePair<string, ScriptNode>(P.Key, Node);
82 KeyValuePair<string, ScriptNode> P;
85 if (!await this.e.MoveNextAsync())
88 this.current = this.e.Current;
90 if (this.objectVariables is
null)
93 this.objectVariables.Object = this.e.Current;
97 for (i = 0; i < this.count; i++)
99 P = this.additionalFields[i];
101 if (this.additionalFieldAsynchronous[i])
102 GenObj[P.Key] = await P.Value.EvaluateAsync(this.objectVariables);
104 GenObj[P.Key] = P.Value.Evaluate(this.objectVariables);
109 for (i = 0; i < this.count; i++)
111 P = this.additionalFields[i];
113 if (this.additionalFieldAsynchronous[i])
114 GroupObj[P.Key] = await P.Value.EvaluateAsync(this.objectVariables);
116 GroupObj[P.Key] = P.Value.Evaluate(this.objectVariables);
122 Array.Empty<
ScriptNode>(),
this.objectVariables);
124 for (i = 0; i < this.count; i++)
126 P = this.additionalFields[i];
128 if (this.additionalFieldAsynchronous[i])
129 Obj[P.Key] = await P.Value.EvaluateAsync(this.objectVariables);
131 Obj[P.Key] = P.Value.Evaluate(this.objectVariables);
Generic object. Contains a sequence of properties.
Base class for all nodes in a parsed script tree.
virtual bool IsAsynchronous
If the node (or its decendants) include asynchronous evaluation. Asynchronous nodes should be evaluat...
Enumerator that adds fields to enumerated items.
async Task< bool > MoveNextAsync()
Advances the enumerator to the next element of the collection.
void Reset()
IEnumerator.Reset
FieldAggregatorEnumerator(IResultSetEnumerator ItemEnumerator, Variables Variables, KeyValuePair< string, int >[] AdditionalFields, ScriptNode[] Columns)
Enumerator that adds fields to enumerated items.
bool MoveNext()
IEnumerator.MoveNext
object Current
IEnumerator.Current
void Dispose()
IDisposable.Dispose"/>
Represents a collection of objects grouped together useing a GROUP BY construct.
Basic interface for all types of elements.
Interface for result-set enumerators.