public SubordSortedTableLookupStrategyFactory(
     bool isNWOnTrigger,
     int numStreams,
     string expression,
     QueryGraphValueEntryRange range)
 {
     this._expression = expression;
     strategy = SortedAccessStrategyFactory.Make(isNWOnTrigger, -1, numStreams, range);
 }
Exemple #2
0
 public SortedTableLookupStrategy(
     int lookupStream,
     int numStreams,
     QueryGraphValueEntryRange rangeKeyPair,
     PropertySortedEventTable index)
 {
     this._index = index;
     this._strategy = SortedAccessStrategyFactory.Make(false, lookupStream, numStreams, rangeKeyPair);
 }
 public SortedTableLookupPlanFactory(
     int lookupStream,
     int indexedStream,
     TableLookupIndexReqKey[] indexNum,
     QueryGraphValueEntryRange rangeKeyPair)
     : base(lookupStream, indexedStream, indexNum)
 {
     this.rangeKeyPair = rangeKeyPair;
 }
Exemple #4
0
        public CompositeIndexQueryRange(
            bool isNWOnTrigger,
            int lookupStream,
            int numStreams,
            QueryGraphValueEntryRange rangeProp)
        {
            if (rangeProp.Type.IsRange()) {
                var rangeIn = (QueryGraphValueEntryRangeIn) rangeProp;
                var start = rangeIn.ExprStart;
                var includeStart = rangeProp.Type.IsIncludeStart();

                var end = rangeIn.ExprEnd;
                var includeEnd = rangeProp.Type.IsIncludeEnd();

                if (!rangeProp.Type.IsRangeInverted()) {
                    _strategy = new CompositeAccessStrategyRangeNormal(
                        isNWOnTrigger,
                        lookupStream,
                        numStreams,
                        start,
                        includeStart,
                        end,
                        includeEnd,
                        rangeIn.IsAllowRangeReversal);
                }
                else {
                    _strategy = new CompositeAccessStrategyRangeInverted(
                        isNWOnTrigger,
                        lookupStream,
                        numStreams,
                        start,
                        includeStart,
                        end,
                        includeEnd);
                }
            }
            else {
                var relOp = (QueryGraphValueEntryRangeRelOp) rangeProp;
                var key = relOp.Expression;
                if (rangeProp.Type == QueryGraphRangeEnum.GREATER_OR_EQUAL) {
                    _strategy = new CompositeAccessStrategyGE(isNWOnTrigger, lookupStream, numStreams, key);
                }
                else if (rangeProp.Type == QueryGraphRangeEnum.GREATER) {
                    _strategy = new CompositeAccessStrategyGT(isNWOnTrigger, lookupStream, numStreams, key);
                }
                else if (rangeProp.Type == QueryGraphRangeEnum.LESS_OR_EQUAL) {
                    _strategy = new CompositeAccessStrategyLE(isNWOnTrigger, lookupStream, numStreams, key);
                }
                else if (rangeProp.Type == QueryGraphRangeEnum.LESS) {
                    _strategy = new CompositeAccessStrategyLT(isNWOnTrigger, lookupStream, numStreams, key);
                }
                else {
                    throw new ArgumentException("Comparison operator " + rangeProp.Type + " not supported");
                }
            }
        }
Exemple #5
0
        public static SortedAccessStrategy Make(
            bool isNWOnTrigger,
            int lookupStream,
            int numStreams,
            QueryGraphValueEntryRange rangeKeyPair)
        {
            if (rangeKeyPair.Type.IsRange()) {
                QueryGraphValueEntryRangeIn rangeIn = (QueryGraphValueEntryRangeIn) rangeKeyPair;
                ExprEvaluator startExpr = rangeIn.ExprStart;
                ExprEvaluator endExpr = rangeIn.ExprEnd;
                bool includeStart = rangeKeyPair.Type.IsIncludeStart();

                bool includeEnd = rangeKeyPair.Type.IsIncludeEnd();
                if (!rangeKeyPair.Type.IsRangeInverted()) {
                    return new SortedAccessStrategyRange(
                        isNWOnTrigger,
                        lookupStream,
                        numStreams,
                        startExpr,
                        includeStart,
                        endExpr,
                        includeEnd,
                        rangeIn.IsAllowRangeReversal);
                }
                else {
                    return new SortedAccessStrategyRangeInverted(
                        isNWOnTrigger,
                        lookupStream,
                        numStreams,
                        startExpr,
                        includeStart,
                        endExpr,
                        includeEnd);
                }
            }
            else {
                QueryGraphValueEntryRangeRelOp relOp = (QueryGraphValueEntryRangeRelOp) rangeKeyPair;
                ExprEvaluator keyExpr = relOp.Expression;
                if (rangeKeyPair.Type == QueryGraphRangeEnum.GREATER_OR_EQUAL) {
                    return new SortedAccessStrategyGE(isNWOnTrigger, lookupStream, numStreams, keyExpr);
                }
                else if (rangeKeyPair.Type == QueryGraphRangeEnum.GREATER) {
                    return new SortedAccessStrategyGT(isNWOnTrigger, lookupStream, numStreams, keyExpr);
                }
                else if (rangeKeyPair.Type == QueryGraphRangeEnum.LESS_OR_EQUAL) {
                    return new SortedAccessStrategyLE(isNWOnTrigger, lookupStream, numStreams, keyExpr);
                }
                else if (rangeKeyPair.Type == QueryGraphRangeEnum.LESS) {
                    return new SortedAccessStrategyLT(isNWOnTrigger, lookupStream, numStreams, keyExpr);
                }
                else {
                    throw new ArgumentException("Comparison operator " + rangeKeyPair.Type + " not supported");
                }
            }
        }
Exemple #6
0
        public CompositeIndexQueryRange(bool isNWOnTrigger, int lookupStream, int numStreams, SubordPropRangeKey subqRangeKey, Type coercionType, IList <String> expressionTexts)
        {
            QueryGraphValueEntryRange rangeProp = subqRangeKey.RangeInfo;

            if (rangeProp.RangeType.IsRange())
            {
                var rangeIn = (QueryGraphValueEntryRangeIn)rangeProp;
                var start   = rangeIn.ExprStart.ExprEvaluator;
                expressionTexts.Add(ExprNodeUtility.ToExpressionStringMinPrecedenceSafe(rangeIn.ExprStart));
                var includeStart = rangeProp.RangeType.IsIncludeStart();

                var end = rangeIn.ExprEnd.ExprEvaluator;
                expressionTexts.Add(ExprNodeUtility.ToExpressionStringMinPrecedenceSafe(rangeIn.ExprEnd));
                var includeEnd = rangeProp.RangeType.IsIncludeEnd();

                if (!rangeProp.RangeType.IsRangeInverted())
                {
                    _strategy = new CompositeAccessStrategyRangeNormal(
                        isNWOnTrigger, lookupStream, numStreams, start, includeStart, end, includeEnd, coercionType,
                        ((QueryGraphValueEntryRangeIn)rangeProp).IsAllowRangeReversal);
                }
                else
                {
                    _strategy = new CompositeAccessStrategyRangeInverted(
                        isNWOnTrigger, lookupStream, numStreams, start, includeStart, end, includeEnd, coercionType);
                }
            }
            else
            {
                var relOp = (QueryGraphValueEntryRangeRelOp)rangeProp;
                var key   = relOp.Expression.ExprEvaluator;
                expressionTexts.Add(ExprNodeUtility.ToExpressionStringMinPrecedenceSafe(relOp.Expression));
                if (rangeProp.RangeType == QueryGraphRangeEnum.GREATER_OR_EQUAL)
                {
                    _strategy = new CompositeAccessStrategyGE(isNWOnTrigger, lookupStream, numStreams, key, coercionType);
                }
                else if (rangeProp.RangeType == QueryGraphRangeEnum.GREATER)
                {
                    _strategy = new CompositeAccessStrategyGT(isNWOnTrigger, lookupStream, numStreams, key, coercionType);
                }
                else if (rangeProp.RangeType == QueryGraphRangeEnum.LESS_OR_EQUAL)
                {
                    _strategy = new CompositeAccessStrategyLE(isNWOnTrigger, lookupStream, numStreams, key, coercionType);
                }
                else if (rangeProp.RangeType == QueryGraphRangeEnum.LESS)
                {
                    _strategy = new CompositeAccessStrategyLT(isNWOnTrigger, lookupStream, numStreams, key, coercionType);
                }
                else
                {
                    throw new ArgumentException("Comparison operator " + rangeProp.RangeType + " not supported");
                }
            }
        }
        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++;
            }
        }
 /// <summary>
 /// Ctor.
 /// </summary>
 /// <param name="lookupStream">The lookup stream.</param>
 /// <param name="property">The property.</param>
 public HistoricalIndexLookupStrategySorted(int lookupStream, QueryGraphValueEntryRange property)
 {
     _strategy = SortedAccessStrategyFactory.Make(false, lookupStream, -1, property, null);
 }
Exemple #9
0
 public static SortedAccessStrategy Make(bool isNWOnTrigger, int lookupStream, int numStreams, QueryGraphValueEntryRange rangeKeyPair, Type coercionType)
 {
     return(Make(isNWOnTrigger, lookupStream, numStreams, new SubordPropRangeKey(rangeKeyPair, coercionType)));
 }
Exemple #10
0
 public SubordPropRangeKey(QueryGraphValueEntryRange rangeInfo, Type coercionType)
 {
     RangeInfo    = rangeInfo;
     CoercionType = coercionType;
 }
 private static void CompareIndexDescRange(QueryGraphValueEntryRange expected, QueryGraphValueEntryRange actual)
 {
     Assert.AreEqual(expected.ToQueryPlan(), actual.ToQueryPlan());
 }
Exemple #12
0
 /// <summary>
 /// Ctor.
 /// </summary>
 /// <param name="lookupStream">The lookup stream.</param>
 /// <param name="numStreams">The num streams.</param>
 /// <param name="rangeKeyPair">The range key pair.</param>
 /// <param name="coercionType">Type of the coercion.</param>
 /// <param name="index">index to look up in</param>
 public SortedTableLookupStrategy(int lookupStream, int numStreams, QueryGraphValueEntryRange rangeKeyPair, Type coercionType, PropertySortedEventTable index)
 {
     _rangeKeyPair = rangeKeyPair;
     _index        = index;
     _strategy     = SortedAccessStrategyFactory.Make(false, lookupStream, numStreams, rangeKeyPair, coercionType);
 }