Class XMLOptTrace
java.lang.Object
org.apache.derby.impl.sql.compile.XMLOptTrace
- All Implemented Interfaces:
OptTrace
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final class///////////////////////////////////////////////////////////////////// -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate ContextManagerprivate XMLOptTrace.QueryBlockprivate Elementprivate intprivate Document/////////////////////////////////////////////////////////////////////private LanguageConnectionContextprivate intprivate Stack<XMLOptTrace.QueryBlock> private Elementprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final String(package private) static final String(package private) static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final Stringprivate static final String/////////////////////////////////////////////////////////////////////private static final Stringprivate static final Stringprivate static final String -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate ElementcreateElement(Element parent, String tag, String content) Create an element and add it to a parentprivate voidformatCost(Element costElement, CostEstimate raw) Format a CostEstimate as subelements of a parentprivate voidformatJoinOrder(Element parent, int[] proposedJoinOrder) Format a join order listprivate ElementformatPlanCost(Element parent, String type, int[] planOrder, int planType, CostEstimate raw) Turn a CostEstimate for a join order into a human-readable elementprivate StringformatPlanSummary(int[] planOrder, int planType) Produce a string representation of the plan being considered now.private voidformatSelectivity(Element parent, String tag, int count, double selectivity) Format selectivity subelementprivate ElementformatSkip(Element parent, String skipTag, String reason) Create an element explaining that we're skipping some processingprivate StringformatTimestamp(long timestamp) Turn a timestamp into a human-readable stringprivate OptimizablegetOptimizable(int tableNumber) Get the Optimizable with the given tableNumberprivate TableNamegetOptimizableName(Optimizable optimizable) Get the name of an optimizableprivate booleanisBaseTable(Optimizable optimizable) Return true if the optimizable is a base tableprivate booleanisComplete(int[] joinOrder) Return true if the join order has been completely filled inprivate booleanisFromTable(Optimizable optimizable) Return true if the optimizable is a FromTableprivate TableNamemakeTableName(String schemaName, String unqualifiedName, ContextManager cm) Make a TableNameprivate voidPrint an exception to the log filevoidprintToWriter(PrintWriter out) Print the trace so far.voidtraceAddingUnorderedOptimizable(int predicateCount) Say that we're adding an unordered optimizable.voidtraceChangingAccessPathForTable(int tableNumber) Say that we're considering a different access path for a table.voidtraceCheapestPlanSoFar(int planType, CostEstimate currentCost) Report the cost of the cheapest plan so far.voidSay that we have a complete join order.voidtraceCompositeSelectivityFromStatistics(double statCompositeSelectivity) Report the selectivity calculated from SYSSTATISTICS.voidtraceConsideringConglomerate(ConglomerateDescriptor cd, int tableNumber) Report that we are considering a conglomerate for a table.voidtraceConsideringJoinStrategy(JoinStrategy js, int tableNumber) Say that we're considering a particular join strategy on a particular table.voidSay that we're setting the lock mode to MODE_RECORD because the start and stop positions are all constant.voidtraceCostIncludingCompositeSelectivityFromStats(CostEstimate cost, int tableNumber) Report the cost based on selectivities coming out of SYSSTATISTICS.voidtraceCostIncludingExtra1stColumnSelectivity(CostEstimate cost, int tableNumber) Report the cost of a scan given the selectivity of an extra first column.voidtraceCostIncludingExtraNonQualifierSelectivity(CostEstimate cost, int tableNumber) Report the cost if we include an extra non-qualifier.voidtraceCostIncludingExtraQualifierSelectivity(CostEstimate cost, int tableNumber) Report the cost if we include an extra qualifier.voidtraceCostIncludingExtraStartStop(CostEstimate cost, int tableNumber) Report the cost if we include an extra start/stop.voidtraceCostIncludingStatsForIndex(CostEstimate cost, int tableNumber) Report the cost based on index statistics.voidtraceCostOfConglomerateScan(int tableNumber, ConglomerateDescriptor cd, CostEstimate costEstimate, int numExtraFirstColumnPreds, double extraFirstColumnSelectivity, int numExtraStartStopPreds, double extraStartStopSelectivity, int startStopPredCount, double statStartStopSelectivity, int numExtraQualifiers, double extraQualifierSelectivity, int numExtraNonQualifiers, double extraNonQualifierSelectivity) Report the cost of a conglomerate scan.voidtraceCostOfNoncoveringIndex(CostEstimate cost, int tableNumber) Report the cost of using a non-covering index.voidtraceCostOfNScans(int tableNumber, double rowCount, CostEstimate cost) Report the cost of scanning a table a certain number of timesvoidtraceCostWithoutSortAvoidance(CostEstimate currentCost) Report the cost without a sort.voidtraceCostWithSortAvoidance(CostEstimate currentSortAvoidanceCost) Report the cost with sort avoidance.voidtraceCurrentPlanAvoidsSort(CostEstimate bestCost, CostEstimate currentSortAvoidanceCost) Say that the current plan avoids a sort.voidEnd tracing the optimization of a query block.voidtraceEstimatingCostOfConglomerate(ConglomerateDescriptor cd, int tableNumber) Report the cost of using a particular conglomerate to scan a table.voidtraceHashKeyColumns(int[] hashKeyColumns) Report the columns being tracedvoidSay that the user specified an impossible join order.voidtraceJoinOrderConsideration(int joinPosition, int[] proposedJoinOrder, JBitSet assignedTableMap) Say that we're considering a join order.voidtraceLookingForSpecifiedIndex(String indexName, int tableNumber) Say that we're looking for an index specified by optimizer hints.voidtraceModifyingAccessPaths(int optimizerID) Say that we're modifying access paths.voidtraceNextAccessPath(String baseTable, int predicateCount) Report that we are advancing to the next access path for the table.voidSay that we couldn't find a best plan.voidtraceNoMoreConglomerates(int tableNumber) Say that we have exhausted the conglomerate possibilities for a table.voidtraceNonCoveringIndexCost(double cost, int tableNumber) Say that we're considering a non-covering index.voidSay that we're setting the lock mode to MODE_TABLE because there is no start/stop position.voidSay that we're starting to optimize a join nodevoidtraceRememberingBestAccessPath(AccessPath accessPath, int tableNumber, int planType) Report that we've found a best access path.voidtraceRememberingBestAccessPathSubstring(AccessPath ap, int tableNumber) Report the best access path for the table so far.voidtraceRememberingBestJoinOrder(int joinPosition, int[] bestJoinOrder, int planType, CostEstimate planCost, JBitSet assignedTableMap) Say that we are remembering the current plan as the best join order so far.voidtraceRememberingBestSortAvoidanceAccessPathSubstring(AccessPath ap, int tableNumber) Report the best sort-avoiding access path for this table so far.voidtraceRememberingBestUnknownAccessPathSubstring(AccessPath ap, int tableNumber) Report an optimizer failure, e.g., while optimizing an outer joinvoidtraceRememberingJoinStrategy(JoinStrategy joinStrategy, int tableNumber) Say that we've found a new best join strategy for the table.voidSay that we're considering scanning a heap even though we have a unique key match.voidtraceShortCircuiting(boolean timeExceeded, Optimizable thisOpt, int joinPosition) Say that we short-circuited a join order.voidtraceSingleMatchedRowCost(double cost, int tableNumber) Report the cost of a scan which will match exactly one row.voidSay we won't consider a hash join because there are no hash key columns.voidtraceSkippingBecauseTooMuchMemory(int maxMemoryPerTable) Say that we are skipping a plan because it consumes too much memory.voidtraceSkippingJoinOrder(int nextOptimizable, int joinPosition, int[] proposedJoinOrder, JBitSet assignedTableMap) Say that we're skipping the join order starting with the next optimizable.voidSay that we won't consider a hash join because the result can't be materializedvoidtraceSortCost(CostEstimate sortCost, CostEstimate currentCost) Report the sort cost.voidtraceSortNeededForOrdering(int planType, RequiredRowOrdering requiredRowOrdering) Report that this plan needs a sortvoidtraceStartQueryBlock(long timeOptimizationStarted, int optimizerID, OptimizableList optimizableList) Start optimizer tracing for a query block.voidtraceStartStatement(String statementText) /////////////////////////////////////////////////////////////////////voidtraceTimeout(long currentTime, CostEstimate bestCost) Say that the optimizer ran out of time.voidSay that we have optimized the user-specified join order.voidSay that there's nothing to optimizer.
-
Field Details
-
STMT
/////////////////////////////////////////////////////////////////////- See Also:
-
STMT_ID
- See Also:
-
STMT_TEXT
- See Also:
-
QBLOCK
- See Also:
-
QBLOCK_OPTIMIZER_ID
- See Also:
-
QBLOCK_START_TIME
- See Also:
-
QBLOCK_ID
- See Also:
-
QBLOCK_OPTIMIZABLE
- See Also:
-
QBLOCK_OPT_TABLE_NUMBER
- See Also:
-
QBLOCK_TIMEOUT
- See Also:
-
QBLOCK_VACUOUS
- See Also:
-
QBLOCK_SORT_COST
- See Also:
-
QBLOCK_TOTAL_COST
- See Also:
-
QBLOCK_NO_BEST_PLAN
- See Also:
-
QBLOCK_SKIP
- See Also:
-
JO
- See Also:
-
JO_COMPLETE
- See Also:
-
JO_SLOT
- See Also:
-
DECORATION
- See Also:
-
DECORATION_CONGLOM_NAME
- See Also:
-
DECORATION_KEY
- See Also:
-
DECORATION_TABLE_NAME
- See Also:
-
DECORATION_JOIN_STRATEGY
- See Also:
-
DECORATION_SKIP
- See Also:
-
DECORATION_CONGLOM_COST
- See Also:
-
DECORATION_FIRST_COLUMN_SELECTIVITY
- See Also:
-
DECORATION_EXTRA_START_STOP_SELECTIVITY
- See Also:
-
DECORATION_START_STOP_SELECTIVITY
- See Also:
-
DECORATION_EXTRA_QUALIFIERS
- See Also:
-
DECORATION_EXTRA_NON_QUALIFIERS
- See Also:
-
SKIP_REASON
- See Also:
-
PC
- See Also:
-
PC_TYPE
- See Also:
-
PC_COMPLETE
- See Also:
-
PC_AVOID_SORT
- See Also:
-
PC_SUMMARY
- See Also:
-
CE_ESTIMATED_COST
- See Also:
-
CE_ROW_COUNT
- See Also:
-
CE_SINGLE_SCAN_ROW_COUNT
- See Also:
-
SEL_COUNT
- See Also:
-
SEL_SELECTIVITY
- See Also:
-
TABLE_FUNCTION_FLAG
- See Also:
-
PLAN_COST_VTI
- See Also:
-
PLAN_COST_VIEW
- See Also:
-
_doc
///////////////////////////////////////////////////////////////////// -
_root
-
_currentStatement
-
_currentStatementID
private int _currentStatementID -
_currentQueryBlock
-
_maxQueryID
private int _maxQueryID -
_queryBlockStack
-
_cm
-
_lcc
-
-
Constructor Details
-
XMLOptTrace
0-arg constructor required by OptTrace contract- Throws:
ParserConfigurationException
-
-
Method Details
-
traceStartStatement
/////////////////////////////////////////////////////////////////////- Specified by:
traceStartStatementin interfaceOptTrace
-
traceStartQueryBlock
public void traceStartQueryBlock(long timeOptimizationStarted, int optimizerID, OptimizableList optimizableList) Description copied from interface:OptTraceStart optimizer tracing for a query block.- Specified by:
traceStartQueryBlockin interfaceOptTrace
-
traceEndQueryBlock
public void traceEndQueryBlock()Description copied from interface:OptTraceEnd tracing the optimization of a query block.- Specified by:
traceEndQueryBlockin interfaceOptTrace
-
traceTimeout
Description copied from interface:OptTraceSay that the optimizer ran out of time.- Specified by:
traceTimeoutin interfaceOptTrace
-
traceVacuous
public void traceVacuous()Description copied from interface:OptTraceSay that there's nothing to optimizer.- Specified by:
traceVacuousin interfaceOptTrace
-
traceCompleteJoinOrder
public void traceCompleteJoinOrder()Description copied from interface:OptTraceSay that we have a complete join order.- Specified by:
traceCompleteJoinOrderin interfaceOptTrace
-
traceSortCost
Description copied from interface:OptTraceReport the sort cost.- Specified by:
traceSortCostin interfaceOptTrace
-
traceNoBestPlan
public void traceNoBestPlan()Description copied from interface:OptTraceSay that we couldn't find a best plan.- Specified by:
traceNoBestPlanin interfaceOptTrace
-
traceModifyingAccessPaths
public void traceModifyingAccessPaths(int optimizerID) Description copied from interface:OptTraceSay that we're modifying access paths.- Specified by:
traceModifyingAccessPathsin interfaceOptTrace
-
traceShortCircuiting
Description copied from interface:OptTraceSay that we short-circuited a join order.- Specified by:
traceShortCircuitingin interfaceOptTrace
-
traceSkippingJoinOrder
public void traceSkippingJoinOrder(int nextOptimizable, int joinPosition, int[] proposedJoinOrder, JBitSet assignedTableMap) Description copied from interface:OptTraceSay that we're skipping the join order starting with the next optimizable.- Specified by:
traceSkippingJoinOrderin interfaceOptTrace
-
traceIllegalUserJoinOrder
public void traceIllegalUserJoinOrder()Description copied from interface:OptTraceSay that the user specified an impossible join order.- Specified by:
traceIllegalUserJoinOrderin interfaceOptTrace
-
traceUserJoinOrderOptimized
public void traceUserJoinOrderOptimized()Description copied from interface:OptTraceSay that we have optimized the user-specified join order.- Specified by:
traceUserJoinOrderOptimizedin interfaceOptTrace
-
traceJoinOrderConsideration
public void traceJoinOrderConsideration(int joinPosition, int[] proposedJoinOrder, JBitSet assignedTableMap) Description copied from interface:OptTraceSay that we're considering a join order.- Specified by:
traceJoinOrderConsiderationin interfaceOptTrace
-
traceCostWithoutSortAvoidance
Description copied from interface:OptTraceReport the cost without a sort.- Specified by:
traceCostWithoutSortAvoidancein interfaceOptTrace
-
traceCostWithSortAvoidance
Description copied from interface:OptTraceReport the cost with sort avoidance.- Specified by:
traceCostWithSortAvoidancein interfaceOptTrace
-
traceCurrentPlanAvoidsSort
public void traceCurrentPlanAvoidsSort(CostEstimate bestCost, CostEstimate currentSortAvoidanceCost) Description copied from interface:OptTraceSay that the current plan avoids a sort.- Specified by:
traceCurrentPlanAvoidsSortin interfaceOptTrace
-
traceCheapestPlanSoFar
Description copied from interface:OptTraceReport the cost of the cheapest plan so far.- Specified by:
traceCheapestPlanSoFarin interfaceOptTrace
-
traceSortNeededForOrdering
Description copied from interface:OptTraceReport that this plan needs a sort- Specified by:
traceSortNeededForOrderingin interfaceOptTrace
-
traceRememberingBestJoinOrder
public void traceRememberingBestJoinOrder(int joinPosition, int[] bestJoinOrder, int planType, CostEstimate planCost, JBitSet assignedTableMap) Description copied from interface:OptTraceSay that we are remembering the current plan as the best join order so far.- Specified by:
traceRememberingBestJoinOrderin interfaceOptTrace
-
traceSkippingBecauseTooMuchMemory
public void traceSkippingBecauseTooMuchMemory(int maxMemoryPerTable) Description copied from interface:OptTraceSay that we are skipping a plan because it consumes too much memory.- Specified by:
traceSkippingBecauseTooMuchMemoryin interfaceOptTrace
-
traceCostOfNScans
Description copied from interface:OptTraceReport the cost of scanning a table a certain number of times- Specified by:
traceCostOfNScansin interfaceOptTrace
-
traceSkipUnmaterializableHashJoin
public void traceSkipUnmaterializableHashJoin()Description copied from interface:OptTraceSay that we won't consider a hash join because the result can't be materialized- Specified by:
traceSkipUnmaterializableHashJoinin interfaceOptTrace
-
traceSkipHashJoinNoHashKeys
public void traceSkipHashJoinNoHashKeys()Description copied from interface:OptTraceSay we won't consider a hash join because there are no hash key columns.- Specified by:
traceSkipHashJoinNoHashKeysin interfaceOptTrace
-
traceHashKeyColumns
public void traceHashKeyColumns(int[] hashKeyColumns) Description copied from interface:OptTraceReport the columns being traced- Specified by:
traceHashKeyColumnsin interfaceOptTrace
-
traceOptimizingJoinNode
public void traceOptimizingJoinNode()Description copied from interface:OptTraceSay that we're starting to optimize a join node- Specified by:
traceOptimizingJoinNodein interfaceOptTrace
-
traceConsideringJoinStrategy
Description copied from interface:OptTraceSay that we're considering a particular join strategy on a particular table.- Specified by:
traceConsideringJoinStrategyin interfaceOptTrace
-
traceRememberingBestAccessPath
Description copied from interface:OptTraceReport that we've found a best access path.- Specified by:
traceRememberingBestAccessPathin interfaceOptTrace
-
traceNoMoreConglomerates
public void traceNoMoreConglomerates(int tableNumber) Description copied from interface:OptTraceSay that we have exhausted the conglomerate possibilities for a table.- Specified by:
traceNoMoreConglomeratesin interfaceOptTrace
-
traceConsideringConglomerate
Description copied from interface:OptTraceReport that we are considering a conglomerate for a table.- Specified by:
traceConsideringConglomeratein interfaceOptTrace
-
traceScanningHeapWithUniqueKey
public void traceScanningHeapWithUniqueKey()Description copied from interface:OptTraceSay that we're considering scanning a heap even though we have a unique key match.- Specified by:
traceScanningHeapWithUniqueKeyin interfaceOptTrace
-
traceAddingUnorderedOptimizable
public void traceAddingUnorderedOptimizable(int predicateCount) Description copied from interface:OptTraceSay that we're adding an unordered optimizable.- Specified by:
traceAddingUnorderedOptimizablein interfaceOptTrace
-
traceChangingAccessPathForTable
public void traceChangingAccessPathForTable(int tableNumber) Description copied from interface:OptTraceSay that we're considering a different access path for a table.- Specified by:
traceChangingAccessPathForTablein interfaceOptTrace
-
traceNoStartStopPosition
public void traceNoStartStopPosition()Description copied from interface:OptTraceSay that we're setting the lock mode to MODE_TABLE because there is no start/stop position.- Specified by:
traceNoStartStopPositionin interfaceOptTrace
-
traceNonCoveringIndexCost
public void traceNonCoveringIndexCost(double cost, int tableNumber) Description copied from interface:OptTraceSay that we're considering a non-covering index.- Specified by:
traceNonCoveringIndexCostin interfaceOptTrace
-
traceConstantStartStopPositions
public void traceConstantStartStopPositions()Description copied from interface:OptTraceSay that we're setting the lock mode to MODE_RECORD because the start and stop positions are all constant.- Specified by:
traceConstantStartStopPositionsin interfaceOptTrace
-
traceEstimatingCostOfConglomerate
Description copied from interface:OptTraceReport the cost of using a particular conglomerate to scan a table.- Specified by:
traceEstimatingCostOfConglomeratein interfaceOptTrace
-
traceLookingForSpecifiedIndex
Description copied from interface:OptTraceSay that we're looking for an index specified by optimizer hints.- Specified by:
traceLookingForSpecifiedIndexin interfaceOptTrace
-
traceSingleMatchedRowCost
public void traceSingleMatchedRowCost(double cost, int tableNumber) Description copied from interface:OptTraceReport the cost of a scan which will match exactly one row.- Specified by:
traceSingleMatchedRowCostin interfaceOptTrace
-
traceCostIncludingExtra1stColumnSelectivity
Description copied from interface:OptTraceReport the cost of a scan given the selectivity of an extra first column.- Specified by:
traceCostIncludingExtra1stColumnSelectivityin interfaceOptTrace
-
traceNextAccessPath
Description copied from interface:OptTraceReport that we are advancing to the next access path for the table.- Specified by:
traceNextAccessPathin interfaceOptTrace
-
traceCostIncludingExtraStartStop
Description copied from interface:OptTraceReport the cost if we include an extra start/stop.- Specified by:
traceCostIncludingExtraStartStopin interfaceOptTrace
-
traceCostIncludingExtraQualifierSelectivity
Description copied from interface:OptTraceReport the cost if we include an extra qualifier.- Specified by:
traceCostIncludingExtraQualifierSelectivityin interfaceOptTrace
-
traceCostIncludingExtraNonQualifierSelectivity
Description copied from interface:OptTraceReport the cost if we include an extra non-qualifier.- Specified by:
traceCostIncludingExtraNonQualifierSelectivityin interfaceOptTrace
-
traceCostOfNoncoveringIndex
Description copied from interface:OptTraceReport the cost of using a non-covering index.- Specified by:
traceCostOfNoncoveringIndexin interfaceOptTrace
-
traceRememberingJoinStrategy
Description copied from interface:OptTraceSay that we've found a new best join strategy for the table.- Specified by:
traceRememberingJoinStrategyin interfaceOptTrace
-
traceRememberingBestAccessPathSubstring
Description copied from interface:OptTraceReport the best access path for the table so far.- Specified by:
traceRememberingBestAccessPathSubstringin interfaceOptTrace
-
traceRememberingBestSortAvoidanceAccessPathSubstring
Description copied from interface:OptTraceReport the best sort-avoiding access path for this table so far.- Specified by:
traceRememberingBestSortAvoidanceAccessPathSubstringin interfaceOptTrace
-
traceRememberingBestUnknownAccessPathSubstring
Description copied from interface:OptTraceReport an optimizer failure, e.g., while optimizing an outer join- Specified by:
traceRememberingBestUnknownAccessPathSubstringin interfaceOptTrace
-
traceCostOfConglomerateScan
public void traceCostOfConglomerateScan(int tableNumber, ConglomerateDescriptor cd, CostEstimate costEstimate, int numExtraFirstColumnPreds, double extraFirstColumnSelectivity, int numExtraStartStopPreds, double extraStartStopSelectivity, int startStopPredCount, double statStartStopSelectivity, int numExtraQualifiers, double extraQualifierSelectivity, int numExtraNonQualifiers, double extraNonQualifierSelectivity) Description copied from interface:OptTraceReport the cost of a conglomerate scan.- Specified by:
traceCostOfConglomerateScanin interfaceOptTrace
-
traceCostIncludingCompositeSelectivityFromStats
Description copied from interface:OptTraceReport the cost based on selectivities coming out of SYSSTATISTICS.- Specified by:
traceCostIncludingCompositeSelectivityFromStatsin interfaceOptTrace
-
traceCompositeSelectivityFromStatistics
public void traceCompositeSelectivityFromStatistics(double statCompositeSelectivity) Description copied from interface:OptTraceReport the selectivity calculated from SYSSTATISTICS.- Specified by:
traceCompositeSelectivityFromStatisticsin interfaceOptTrace
-
traceCostIncludingStatsForIndex
Description copied from interface:OptTraceReport the cost based on index statistics.- Specified by:
traceCostIncludingStatsForIndexin interfaceOptTrace
-
printToWriter
Description copied from interface:OptTracePrint the trace so far.- Specified by:
printToWriterin interfaceOptTrace
-
getOptimizable
Get the Optimizable with the given tableNumber -
getOptimizableName
Get the name of an optimizable -
isBaseTable
Return true if the optimizable is a base table -
isFromTable
Return true if the optimizable is a FromTable -
makeTableName
Make a TableName -
printThrowable
Print an exception to the log file -
createElement
-
formatTimestamp
Turn a timestamp into a human-readable string -
formatSkip
-
formatPlanCost
private Element formatPlanCost(Element parent, String type, int[] planOrder, int planType, CostEstimate raw) Turn a CostEstimate for a join order into a human-readable element -
isComplete
private boolean isComplete(int[] joinOrder) Return true if the join order has been completely filled in -
formatCost
Format a CostEstimate as subelements of a parent -
formatSelectivity
-
formatJoinOrder
Format a join order list -
formatPlanSummary
Produce a string representation of the plan being considered now. The string has the following grammar:
join :== factor OP factor OP :== "*" | "#" factor :== factor | conglomerateName
-