public class NStreamQueryPlanBuilder extends Object
Modifier and Type | Class and Description |
---|---|
static class |
NStreamQueryPlanBuilder.BestChainResult
Encapsulates the chain information.
|
Constructor and Description |
---|
NStreamQueryPlanBuilder() |
Modifier and Type | Method and Description |
---|---|
protected static QueryPlan |
build(QueryGraph queryGraph,
EventType[] typesPerStream,
HistoricalViewableDesc historicalViewableDesc,
DependencyGraph dependencyGraph,
HistoricalStreamIndexList[] historicalStreamIndexLists,
boolean hasForceNestedIter,
String[][][] indexedStreamsUniqueProps,
TableMetadata[] tablesPerStream) |
protected static int[] |
buildDefaultNestingOrder(int numStreams,
int forStream)
Returns default nesting order for a given number of streams for a certain stream.
|
protected static NStreamQueryPlanBuilder.BestChainResult |
computeBestPath(int lookupStream,
QueryGraph queryGraph,
DependencyGraph dependencyGraph)
Compute a best chain or path for lookups to take for the lookup stream passed in and the query
property relationships.
|
protected static int |
computeNavigableDepth(int lookupStream,
int[] nextStreams,
QueryGraph queryGraph)
Given a chain of streams to look up and indexing information, compute the index within the
chain of the first non-index lookup.
|
static TableLookupPlan |
createLookupPlan(QueryGraph queryGraph,
int currentLookupStream,
int indexedStream,
QueryPlanIndex indexSpecs,
EventType[] typesPerStream,
TableMetadata indexedStreamTableMeta)
Create the table lookup plan for a from-stream to look up in an indexed stream
using the columns supplied in the query graph and looking at the actual indexes available
and their index number.
|
protected static QueryPlanNode |
createStreamPlan(int lookupStream,
int[] bestChain,
QueryGraph queryGraph,
QueryPlanIndex[] indexSpecsPerStream,
EventType[] typesPerStream,
boolean[] isHistorical,
HistoricalStreamIndexList[] historicalStreamIndexLists,
TableMetadata[] tablesPerStream)
Walks the chain of lookups and constructs lookup strategy and plan specification based
on the index specifications.
|
protected static boolean |
isDependencySatisfied(int lookupStream,
int[] permutation,
DependencyGraph dependencyGraph)
Determine if the proposed permutation of lookups passes dependencies
|
protected static QueryPlan build(QueryGraph queryGraph, EventType[] typesPerStream, HistoricalViewableDesc historicalViewableDesc, DependencyGraph dependencyGraph, HistoricalStreamIndexList[] historicalStreamIndexLists, boolean hasForceNestedIter, String[][][] indexedStreamsUniqueProps, TableMetadata[] tablesPerStream)
protected static QueryPlanNode createStreamPlan(int lookupStream, int[] bestChain, QueryGraph queryGraph, QueryPlanIndex[] indexSpecsPerStream, EventType[] typesPerStream, boolean[] isHistorical, HistoricalStreamIndexList[] historicalStreamIndexLists, TableMetadata[] tablesPerStream)
lookupStream
- - the stream to construct the query plan forbestChain
- - the chain that the lookup follows to make best use of indexesqueryGraph
- - the repository for key properties to indexesindexSpecsPerStream
- - specifications of indexestypesPerStream
- - event types for each streamisHistorical
- - indicator for each stream if it is a historical streams or nothistoricalStreamIndexLists
- - index management, populated for the query plantablesPerStream
- tablespublic static TableLookupPlan createLookupPlan(QueryGraph queryGraph, int currentLookupStream, int indexedStream, QueryPlanIndex indexSpecs, EventType[] typesPerStream, TableMetadata indexedStreamTableMeta)
queryGraph
- - contains properties joining the 2 streamscurrentLookupStream
- - stream to use key values fromindexedStream
- - stream to look up inindexSpecs
- - index specification defining indexes to be created for streamtypesPerStream
- - event types for each streamindexedStreamTableMeta
- table infoprotected static NStreamQueryPlanBuilder.BestChainResult computeBestPath(int lookupStream, QueryGraph queryGraph, DependencyGraph dependencyGraph)
NumberSetPermutationEnumeration
until a path is found in which all streams can be accessed via an index.
If not such path is found, the method returns the path with the greatest depth, ie. where
the first one or more streams are index accesses.
If no depth other then zero is found, returns the default nesting order.lookupStream
- - stream to start look upqueryGraph
- - navigability between streamsdependencyGraph
- - dependencies between historical streamsprotected static boolean isDependencySatisfied(int lookupStream, int[] permutation, DependencyGraph dependencyGraph)
lookupStream
- stream to initiatepermutation
- permutation of lookupsdependencyGraph
- dependenciesprotected static int computeNavigableDepth(int lookupStream, int[] nextStreams, QueryGraph queryGraph)
lookupStream
- - stream to start lookup fornextStreams
- - list of stream numbers next in lookupqueryGraph
- - indexing informationprotected static int[] buildDefaultNestingOrder(int numStreams, int forStream)
numStreams
- - number of streamsforStream
- - stream to generate a nesting order for