Пример #1
0
 public override void ResetState()
 {
     currentRecord = null;
     inputOperator.ResetState();
     outputBuffer.Clear();
     this.Open();
 }
Пример #2
0
        public override FieldObject Evaluate(RawRecord record)
        {
            this.container.ResetTableCache(record);
            subqueryOp.ResetState();
            RawRecord firstResult = subqueryOp.Next();

            subqueryOp.Close();

            return(firstResult == null ? null : firstResult.RetriveData(0));
        }
Пример #3
0
        public override bool Evaluate(RawRecord r)
        {
            this.container.ResetTableCache(r);
            subqueryOp.ResetState();
            RawRecord firstResult = subqueryOp.Next();

            subqueryOp.Close();

            return(firstResult != null);
        }
Пример #4
0
        public override bool Evaluate(RawRecord r)
        {
            constantSourceOp.ConstantSource = r;
            subqueryOp.ResetState();
            RawRecord firstResult = subqueryOp.Next();

            subqueryOp.Close();

            return(firstResult != null);
        }
Пример #5
0
        public override FieldObject Evaluate(RawRecord record)
        {
            constantSourceOp.ConstantSource = record;
            subqueryOp.ResetState();
            RawRecord firstResult = subqueryOp.Next();

            subqueryOp.Close();

            //return firstResult == null ? null : firstResult.RetriveData(0).ToString();
            return(firstResult == null ? null : firstResult.RetriveData(0));
        }
Пример #6
0
        public FieldObject Terminate()
        {
            Dictionary <FieldObject, FieldObject> resultCollection = new Dictionary <FieldObject, FieldObject>(groupedStates.Count);

            if (elementPropertyProjectionIndex >= 0)
            {
                foreach (FieldObject key in groupedStates.Keys)
                {
                    List <FieldObject> projectFields = new List <FieldObject>();
                    foreach (var rawRecord in groupedStates[key])
                    {
                        FieldObject fo = rawRecord[elementPropertyProjectionIndex];
                        if (fo is PropertyField)
                        {
                            PropertyField pf = fo as PropertyField;
                            projectFields.Add(new StringField(pf.PropertyValue, pf.JsonDataType));
                        }
                        else
                        {
                            projectFields.Add(fo);
                        }
                    }
                    resultCollection[key] = new CollectionField(projectFields);
                }
            }
            else
            {
                foreach (KeyValuePair <FieldObject, List <RawRecord> > pair in groupedStates)
                {
                    FieldObject      key = pair.Key;
                    List <RawRecord> aggregatedRecords = pair.Value;
                    groupedSourceOp.ResetState();
                    aggregateOp.ResetState();

                    foreach (RawRecord record in aggregatedRecords)
                    {
                        tempSourceOp.ConstantSource = record;
                        groupedSourceOp.Next();
                    }

                    RawRecord aggregateTraversalRecord = aggregateOp.Next();

                    FieldObject aggregateResult = aggregateTraversalRecord?.RetriveData(0);
                    if (aggregateResult == null)
                    {
                        return(null);
                    }

                    resultCollection[key] = aggregateResult;
                }
            }

            return(new MapField(resultCollection));
        }
Пример #7
0
        public override RawRecord Next()
        {
            while (this.State())
            {
                if (this.inputBatch.Any())
                {
                    RawRecord subTraversalRecord;
                    while (flatMapTraversal.State() && (subTraversalRecord = flatMapTraversal.Next()) != null)
                    {
                        int       subTraversalRecordIndex = int.Parse(subTraversalRecord[0].ToValue);
                        RawRecord resultRecord            = inputBatch[subTraversalRecordIndex].GetRange(1);
                        resultRecord.Append(subTraversalRecord.GetRange(1));
                        return(resultRecord);
                    }
                }

                this.inputBatch.Clear();
                RawRecord inputRecord;
                while (this.inputBatch.Count < this.batchSize && this.inputOp.State() && (inputRecord = inputOp.Next()) != null)
                {
                    RawRecord batchRawRecord = new RawRecord();
                    batchRawRecord.Append(new StringField(this.inputBatch.Count.ToString(), JsonDataType.Int));
                    batchRawRecord.Append(inputRecord);

                    inputBatch.Add(batchRawRecord);
                }

                if (!inputBatch.Any())
                {
                    this.Close();
                    return(null);
                }

                this.container.ResetTableCache(inputBatch);
                flatMapTraversal.ResetState();
            }

            return(null);
        }
 public override void ResetState()
 {
     InputOperator.ResetState();
     Open();
 }
Пример #9
0
 public override void ResetState()
 {
     Open();
     tableCache.Clear();
     TableInput.ResetState();
 }
Пример #10
0
 public override void ResetState()
 {
     inputOp.ResetState();
     groupedStates.Clear();
     Open();
 }
Пример #11
0
        public override RawRecord Next()
        {
            if (!State())
            {
                return(null);
            }

            RawRecord r = null;

            while (inputOp.State() && (r = inputOp.Next()) != null)
            {
                FieldObject groupByKey = groupByKeyFieldIndex >= 0
                    ? new StringField(r[groupByKeyFieldIndex].ToValue)
                    : groupByKeyFunction.Evaluate(r);

                if (!groupedStates.ContainsKey(groupByKey))
                {
                    groupedStates.Add(groupByKey, new List <RawRecord>());
                }
                groupedStates[groupByKey].Add(r);
            }

            Dictionary <FieldObject, FieldObject> resultCollection = new Dictionary <FieldObject, FieldObject>(groupedStates.Count);

            if (elementPropertyProjectionIndex >= 0)
            {
                foreach (FieldObject key in groupedStates.Keys)
                {
                    List <FieldObject> projectFields = new List <FieldObject>();
                    foreach (var rawRecord in groupedStates[key])
                    {
                        FieldObject fo = rawRecord[elementPropertyProjectionIndex];
                        if (fo is PropertyField)
                        {
                            PropertyField pf = fo as PropertyField;
                            projectFields.Add(new StringField(pf.PropertyValue, pf.JsonDataType));
                        }
                        else
                        {
                            projectFields.Add(fo);
                        }
                    }
                    resultCollection[key] = new CollectionField(projectFields);
                }
            }
            else
            {
                foreach (KeyValuePair <FieldObject, List <RawRecord> > pair in groupedStates)
                {
                    FieldObject      key = pair.Key;
                    List <RawRecord> aggregatedRecords = pair.Value;
                    groupedSourceOp.ResetState();
                    aggregateOp.ResetState();

                    foreach (RawRecord record in aggregatedRecords)
                    {
                        tempSourceOp.ConstantSource = record;
                        groupedSourceOp.Next();
                    }

                    RawRecord aggregateTraversalRecord = aggregateOp.Next();

                    FieldObject aggregateResult = aggregateTraversalRecord?.RetriveData(0);
                    if (aggregateResult == null)
                    {
                        Close();
                        return(null);
                    }

                    resultCollection[key] = aggregateResult;
                }
            }

            RawRecord resultRecord = new RawRecord();

            for (int i = 0; i < carryOnCount; i++)
            {
                resultRecord.Append((FieldObject)null);
            }

            resultRecord.Append(new MapField(resultCollection));

            Close();
            return(resultRecord);
        }
Пример #12
0
 public override void ResetState()
 {
     //GroupState.Init();
     inputOp.ResetState();
     Open();
 }