Ejemplo n.º 1
0
 private static void CompareIndexDesc(TableLookupKeyDesc expected, TableLookupKeyDesc actual)
 {
     Assert.AreEqual(expected.Hashes.Count, actual.Hashes.Count);
     for (var i = 0; i < expected.Hashes.Count; i++)
     {
         CompareIndexDescHash(expected.Hashes[i], actual.Hashes[i]);
     }
     Assert.AreEqual(expected.Ranges.Count, actual.Ranges.Count);
     for (var i = 0; i < expected.Ranges.Count; i++)
     {
         CompareIndexDescRange(expected.Ranges[i], actual.Ranges[i]);
     }
 }
Ejemplo n.º 2
0
        public JoinExecTableLookupStrategy GetJoinLookupStrategy(
            String accessedByStmtName,
            int accessedByStmtId,
            Attribute[] accessedByStmtAnnotations,
            EventTable[] eventTables,
            TableLookupKeyDesc keyDescriptor,
            int lookupStreamNum)
        {
            var noopTable = (VirtualDWEventTable)eventTables[0];

            for (var i = 0; i < noopTable.HashAccess.Count; i++)
            {
                var hashKey = keyDescriptor.Hashes[i];
                noopTable.HashAccess[i].LookupValueType = hashKey.KeyExpr.ExprEvaluator.ReturnType;
            }
            for (var i = 0; i < noopTable.BtreeAccess.Count; i++)
            {
                var range      = keyDescriptor.Ranges[i];
                var op         = range.RangeType.GetStringOp().FromOpString();
                var rangeField = noopTable.BtreeAccess[i];
                rangeField.Operator = op;
                if (range is QueryGraphValueEntryRangeRelOp)
                {
                    rangeField.LookupValueType =
                        ((QueryGraphValueEntryRangeRelOp)range).Expression.ExprEvaluator.ReturnType;
                }
                else
                {
                    rangeField.LookupValueType =
                        ((QueryGraphValueEntryRangeIn)range).ExprStart.ExprEvaluator.ReturnType;
                }
            }

            var index =
                _dataExternal.GetLookup(
                    new VirtualDataWindowLookupContext(
                        accessedByStmtName, accessedByStmtId, accessedByStmtAnnotations, false, _namedWindowName,
                        noopTable.HashAccess, noopTable.BtreeAccess));

            CheckIndex(index);
            return(new JoinExecTableLookupStrategyVirtualDW(_namedWindowName, index, keyDescriptor, lookupStreamNum));
        }
        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++;
            }
        }