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]); } }
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++; } }