public JoinExecTableLookupStrategyVirtualDW(String namedWindowName, VirtualDataWindowLookup externalIndex, TableLookupKeyDesc keyDescriptor, int lookupStream)
        {
            _namedWindowName = namedWindowName;
            _externalIndex   = externalIndex;
            _evaluators      = new ExternalEvaluator[keyDescriptor.Hashes.Count + keyDescriptor.Ranges.Count];
            _eventsPerStream = new EventBean[lookupStream + 1];
            _lookupStream    = lookupStream;

            var count = 0;

            foreach (var hashKey in keyDescriptor.Hashes)
            {
                var evaluator = hashKey.KeyExpr.ExprEvaluator;
                _evaluators[count] = new ExternalEvaluatorHashRelOp(evaluator);
                count++;
            }
            foreach (var rangeKey in keyDescriptor.Ranges)
            {
                if (rangeKey.RangeType.IsRange())
                {
                    var range          = (QueryGraphValueEntryRangeIn)rangeKey;
                    var evaluatorStart = range.ExprStart.ExprEvaluator;
                    var evaluatorEnd   = range.ExprEnd.ExprEvaluator;
                    _evaluators[count] = new ExternalEvaluatorBtreeRange(evaluatorStart, evaluatorEnd);
                }
                else
                {
                    var relOp     = (QueryGraphValueEntryRangeRelOp)rangeKey;
                    var evaluator = relOp.Expression.ExprEvaluator;
                    _evaluators[count] = new ExternalEvaluatorHashRelOp(evaluator);
                }
                count++;
            }
        }
Beispiel #2
0
 private void CheckIndex(VirtualDataWindowLookup index)
 {
     if (index == null)
     {
         throw new EPException(
                   "Exception obtaining index lookup from virtual data window, the implementation has returned a null index");
     }
 }
        public JoinExecTableLookupStrategyVirtualDW(
            string namedWindowName,
            VirtualDataWindowLookup externalIndex,
            TableLookupPlan tableLookupPlan)
        {
            this.namedWindowName = namedWindowName;
            this.externalIndex = externalIndex;
            lookupStream = tableLookupPlan.LookupStream;

            var hashKeys = tableLookupPlan.VirtualDWHashEvals;
            if (hashKeys == null) {
                hashKeys = new ExprEvaluator[0];
            }

            var rangeKeys = tableLookupPlan.VirtualDWRangeEvals;
            if (rangeKeys == null) {
                rangeKeys = new QueryGraphValueEntryRange[0];
            }

            evaluators = new ExternalEvaluator[hashKeys.Length + rangeKeys.Length];
            eventsPerStream = new EventBean[lookupStream + 1];

            var count = 0;
            foreach (var hashKey in hashKeys) {
                evaluators[count] = new ExternalEvaluatorHashRelOp(hashKey);
                count++;
            }

            foreach (var rangeKey in rangeKeys) {
                if (rangeKey.Type.IsRange()) {
                    var range = (QueryGraphValueEntryRangeIn) rangeKey;
                    var evaluatorStart = range.ExprStart;
                    var evaluatorEnd = range.ExprEnd;
                    evaluators[count] = new ExternalEvaluatorBtreeRange(evaluatorStart, evaluatorEnd);
                }
                else {
                    var relOp = (QueryGraphValueEntryRangeRelOp) rangeKey;
                    var evaluator = relOp.Expression;
                    evaluators[count] = new ExternalEvaluatorHashRelOp(evaluator);
                }

                count++;
            }
        }
Beispiel #4
0
        public SubordTableLookupStrategyVDW(
            VirtualDWViewFactory factory,
            SubordTableLookupStrategyFactoryVDW subordTableFactory,
            VirtualDataWindowLookup externalIndex)
        {
            this.factory = factory;
            this.externalIndex = externalIndex;
            nwOnTrigger = subordTableFactory.IsNwOnTrigger;

            var hashKeys = subordTableFactory.HashEvals;
            var hashCoercionTypes = subordTableFactory.HashCoercionTypes;
            var rangeKeys = subordTableFactory.RangeEvals;
            var rangeCoercionTypes = subordTableFactory.RangeCoercionTypes;

            evaluators = new ExternalEvaluator[hashKeys.Length + rangeKeys.Length];
            eventsLocal = new EventBean[subordTableFactory.NumOuterStreams + 1];

            var count = 0;
            foreach (var hashKey in hashKeys) {
                evaluators[count] = new ExternalEvaluatorHashRelOp(hashKeys[count], hashCoercionTypes[count]);
                count++;
            }

            for (var i = 0; i < rangeKeys.Length; i++) {
                var rangeKey = rangeKeys[i];
                if (rangeKey.Type.IsRange()) {
                    var range = (QueryGraphValueEntryRangeIn) rangeKey;
                    var evaluatorStart = range.ExprStart;
                    var evaluatorEnd = range.ExprEnd;
                    evaluators[count] = new ExternalEvaluatorBtreeRange(
                        evaluatorStart,
                        evaluatorEnd,
                        rangeCoercionTypes[i]);
                }
                else {
                    var relOp = (QueryGraphValueEntryRangeRelOp) rangeKey;
                    var evaluator = relOp.Expression;
                    evaluators[count] = new ExternalEvaluatorHashRelOp(evaluator, rangeCoercionTypes[i]);
                }

                count++;
            }
        }
        public SubordTableLookupStrategyVirtualDW(
            String namedWindowName,
            VirtualDataWindowLookup externalIndex,
            IList <SubordPropHashKey> hashKeys,
            CoercionDesc hashKeyCoercionTypes,
            IList <SubordPropRangeKey> rangeKeys,
            CoercionDesc rangeKeyCoercionTypes,
            bool nwOnTrigger,
            int numOuterStreams)
        {
            _namedWindowName = namedWindowName;
            _externalIndex   = externalIndex;
            _evaluators      = new ExternalEvaluator[hashKeys.Count + rangeKeys.Count];
            _nwOnTrigger     = nwOnTrigger;
            _eventsLocal     = new EventBean[numOuterStreams + 1];

            var count = 0;

            foreach (var hashKey in hashKeys)
            {
                var evaluator = hashKey.HashKey.KeyExpr.ExprEvaluator;
                _evaluators[count] = new ExternalEvaluatorHashRelOp(evaluator, hashKeyCoercionTypes.CoercionTypes[count]);
                count++;
            }
            for (var i = 0; i < rangeKeys.Count; i++)
            {
                SubordPropRangeKey rangeKey = rangeKeys[i];
                if (rangeKey.RangeInfo.RangeType.IsRange())
                {
                    var range          = (QueryGraphValueEntryRangeIn)rangeKey.RangeInfo;
                    var evaluatorStart = range.ExprStart.ExprEvaluator;
                    var evaluatorEnd   = range.ExprEnd.ExprEvaluator;
                    _evaluators[count] = new ExternalEvaluatorBtreeRange(evaluatorStart, evaluatorEnd, rangeKeyCoercionTypes.CoercionTypes[i]);
                }
                else
                {
                    var relOp     = (QueryGraphValueEntryRangeRelOp)rangeKey.RangeInfo;
                    var evaluator = relOp.Expression.ExprEvaluator;
                    _evaluators[count] = new ExternalEvaluatorHashRelOp(evaluator, rangeKeyCoercionTypes.CoercionTypes[i]);
                }
                count++;
            }
        }