You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by rh...@apache.org on 2013/08/02 21:05:28 UTC
svn commit: r1509815 - in /db/derby/code/trunk/java/engine/org/apache/derby:
iapi/sql/compile/ impl/sql/compile/
Author: rhillegas
Date: Fri Aug 2 19:05:28 2013
New Revision: 1509815
URL: http://svn.apache.org/r1509815
Log:
DERBY-6211: Move the tracer out of the optimizer; tests passed cleanly on derby-6211-11-ab-moveTracerOutOfOptimizer.diff.
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/compile/Optimizable.java
db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/compile/Optimizer.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/FromBaseTable.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/FromTable.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/HashJoinStrategy.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/JoinNode.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/NestedLoopJoinStrategy.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/OptimizerImpl.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNode.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/compile/Optimizable.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/compile/Optimizable.java?rev=1509815&r1=1509814&r2=1509815&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/compile/Optimizable.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/compile/Optimizable.java Fri Aug 2 19:05:28 2013
@@ -453,4 +453,11 @@ public interface Optimizable extends Vis
*/
public double uniqueJoin(OptimizablePredicateList predList)
throws StandardException;
+
+ /** Get the optimizer tracer, if any */
+ public OptTrace getOptimizerTracer();
+
+ /** Report whether optimizer tracing is on */
+ public boolean optimizerTracingIsOn();
+
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/compile/Optimizer.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/compile/Optimizer.java?rev=1509815&r1=1509814&r2=1509815&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/compile/Optimizer.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/compile/Optimizer.java Fri Aug 2 19:05:28 2013
@@ -87,9 +87,6 @@ public interface Optimizer
/** Indicates a sort-avoidance plan */
int SORT_AVOIDANCE_PLAN = 2;
- /** Return true if optimizer tracing is on */
- public boolean tracingIsOn();
-
/**
* Iterate through the permutations, returning false when the permutations
* are exhausted.
@@ -188,9 +185,6 @@ public interface Optimizer
*/
public void modifyAccessPaths() throws StandardException;
- /** Get the trace machinery */
- public OptTrace tracer();
-
/** Get the estimated cost of the optimized query */
public CostEstimate getOptimizedCost();
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/FromBaseTable.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/FromBaseTable.java?rev=1509815&r1=1509814&r2=1509815&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/FromBaseTable.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/FromBaseTable.java Fri Aug 2 19:05:28 2013
@@ -275,8 +275,8 @@ class FromBaseTable extends FromTable
ConglomerateDescriptor currentConglomerateDescriptor =
ap.getConglomerateDescriptor();
- if ( optimizer.tracingIsOn() )
- { optimizer.tracer().traceNextAccessPath( getExposedName(), ((predList == null) ? 0 : predList.size()) ); }
+ if ( optimizerTracingIsOn() )
+ { getOptimizerTracer().traceNextAccessPath( getExposedName(), ((predList == null) ? 0 : predList.size()) ); }
/*
** Remove the ordering of the current conglomerate descriptor,
@@ -306,8 +306,8 @@ class FromBaseTable extends FromTable
}
else
{
- if ( optimizer.tracingIsOn() )
- { optimizer.tracer().traceLookingForSpecifiedIndex( userSpecifiedIndexName, tableNumber ); }
+ if ( optimizerTracingIsOn() )
+ { getOptimizerTracer().traceLookingForSpecifiedIndex( userSpecifiedIndexName, tableNumber ); }
if (StringUtil.SQLToUpperCase(userSpecifiedIndexName).equals("NULL"))
{
@@ -414,13 +414,13 @@ class FromBaseTable extends FromTable
if (currentConglomerateDescriptor == null)
{
- if ( optimizer.tracingIsOn() ) { optimizer.tracer().traceNoMoreConglomerates( tableNumber ); }
+ if ( optimizerTracingIsOn() ) { getOptimizerTracer().traceNoMoreConglomerates( tableNumber ); }
}
else
{
currentConglomerateDescriptor.setColumnNames(columnNames);
- if ( optimizer.tracingIsOn() ) { optimizer.tracer().traceConsideringConglomerate( currentConglomerateDescriptor, tableNumber ); }
+ if ( optimizerTracingIsOn() ) { getOptimizerTracer().traceConsideringConglomerate( currentConglomerateDescriptor, tableNumber ); }
}
/*
@@ -438,14 +438,14 @@ class FromBaseTable extends FromTable
*/
if (! isOneRowResultSet(predList))
{
- if ( optimizer.tracingIsOn() )
- { optimizer.tracer().traceAddingUnorderedOptimizable( ((predList == null) ? 0 : predList.size()) ); }
+ if ( optimizerTracingIsOn() )
+ { getOptimizerTracer().traceAddingUnorderedOptimizable( ((predList == null) ? 0 : predList.size()) ); }
rowOrdering.addUnorderedOptimizable(this);
}
else
{
- if ( optimizer.tracingIsOn() ) { optimizer.tracer().traceScanningHeapWithUniqueKey(); }
+ if ( optimizerTracingIsOn() ) { getOptimizerTracer().traceScanningHeapWithUniqueKey(); }
}
}
else
@@ -957,7 +957,7 @@ class FromBaseTable extends FromTable
JoinStrategy currentJoinStrategy =
currAccessPath.getJoinStrategy();
- if ( optimizer.tracingIsOn() ) { optimizer.tracer().traceEstimatingCostOfConglomerate( cd, tableNumber ); }
+ if ( optimizerTracingIsOn() ) { getOptimizerTracer().traceEstimatingCostOfConglomerate( cd, tableNumber ); }
/* Get the uniqueness factory for later use (see below) */
double tableUniquenessFactor =
@@ -998,7 +998,7 @@ class FromBaseTable extends FromTable
(FormatableBitSet) null,
0);
- if ( optimizer.tracingIsOn() ) { optimizer.tracer().traceSingleMatchedRowCost( cost, tableNumber ); }
+ if ( optimizerTracingIsOn() ) { getOptimizerTracer().traceSingleMatchedRowCost( cost, tableNumber ); }
costEst.setCost(cost, 1.0d, 1.0d);
@@ -1054,15 +1054,15 @@ class FromBaseTable extends FromTable
currAccessPath.setLockMode(
TransactionController.MODE_RECORD);
- if ( optimizer.tracingIsOn() ) { optimizer.tracer().traceConstantStartStopPositions(); }
+ if ( optimizerTracingIsOn() ) { getOptimizerTracer().traceConstantStartStopPositions(); }
}
else
{
setLockingBasedOnThreshold(optimizer, costEst.rowCount());
}
- if (optimizer.tracingIsOn()) {
- optimizer.tracer().traceCostOfNScans(
+ if (optimizerTracingIsOn()) {
+ getOptimizerTracer().traceCostOfNScans(
tableNumber,
outerCost.rowCount(),
costEst );
@@ -1098,7 +1098,7 @@ class FromBaseTable extends FromTable
costEst.setEstimatedCost(
costEst.getEstimatedCost() + cost);
- if ( optimizer.tracingIsOn() ) { optimizer.tracer().traceNonCoveringIndexCost( cost, tableNumber ); }
+ if ( optimizerTracingIsOn() ) { getOptimizerTracer().traceNonCoveringIndexCost( cost, tableNumber ); }
}
}
else
@@ -1531,9 +1531,9 @@ class FromBaseTable extends FromTable
}
}
- if ( optimizer.tracingIsOn() )
+ if ( optimizerTracingIsOn() )
{
- optimizer.tracer().traceCostOfConglomerateScan
+ getOptimizerTracer().traceCostOfConglomerateScan
(
tableNumber,
cd,
@@ -1576,8 +1576,8 @@ class FromBaseTable extends FromTable
costEst.singleScanRowCount() *
statStartStopSelectivity);
- if (optimizer.tracingIsOn()) {
- optimizer.tracer().
+ if (optimizerTracingIsOn()) {
+ getOptimizerTracer().
traceCostIncludingStatsForIndex(costEst, tableNumber);
}
}
@@ -1600,8 +1600,8 @@ class FromBaseTable extends FromTable
costEst.singleScanRowCount() *
extraFirstColumnSelectivity);
- if (optimizer.tracingIsOn()) {
- optimizer.tracer().
+ if (optimizerTracingIsOn()) {
+ getOptimizerTracer().
traceCostIncludingExtra1stColumnSelectivity(
costEst, tableNumber);
}
@@ -1619,8 +1619,8 @@ class FromBaseTable extends FromTable
costEst.singleScanRowCount() *
extraStartStopSelectivity);
- if (optimizer.tracingIsOn()) {
- optimizer.tracer().traceCostIncludingExtraStartStop(
+ if (optimizerTracingIsOn()) {
+ getOptimizerTracer().traceCostIncludingExtraStartStop(
costEst, tableNumber);
}
}
@@ -1668,7 +1668,7 @@ class FromBaseTable extends FromTable
currAccessPath.setLockMode(
TransactionController.MODE_TABLE);
- if ( optimizer.tracingIsOn() ) { optimizer.tracer().traceNoStartStopPosition(); }
+ if ( optimizerTracingIsOn() ) { getOptimizerTracer().traceNoStartStopPosition(); }
}
else
{
@@ -1777,8 +1777,8 @@ class FromBaseTable extends FromTable
costEst.setEstimatedCost(
costEst.getEstimatedCost() + cost);
- if (optimizer.tracingIsOn()) {
- optimizer.tracer().traceCostOfNoncoveringIndex(
+ if (optimizerTracingIsOn()) {
+ getOptimizerTracer().traceCostOfNoncoveringIndex(
costEst, tableNumber);
}
}
@@ -1795,8 +1795,8 @@ class FromBaseTable extends FromTable
costEst.singleScanRowCount() *
extraQualifierSelectivity);
- if (optimizer.tracingIsOn()) {
- optimizer.tracer().
+ if (optimizerTracingIsOn()) {
+ getOptimizerTracer().
traceCostIncludingExtraQualifierSelectivity(
costEst, tableNumber);
}
@@ -1924,8 +1924,8 @@ class FromBaseTable extends FromTable
costEst.singleScanRowCount());
- if (optimizer.tracingIsOn()) {
- optimizer.tracer().traceCostOfNScans(
+ if (optimizerTracingIsOn()) {
+ getOptimizerTracer().traceCostOfNScans(
tableNumber, outerCost.rowCount(), costEst);
}
@@ -1952,8 +1952,8 @@ class FromBaseTable extends FromTable
{
costEst.setCost(costEst.getEstimatedCost(), rc, src);
- if (optimizer.tracingIsOn()) {
- optimizer.tracer().
+ if (optimizerTracingIsOn()) {
+ getOptimizerTracer().
traceCostIncludingExtraNonQualifierSelectivity(
costEst, tableNumber);
}
@@ -1970,8 +1970,8 @@ class FromBaseTable extends FromTable
*/
double compositeStatRC = initialRowCount * statCompositeSelectivity;
- if ( optimizer.tracingIsOn() )
- { optimizer.tracer().traceCompositeSelectivityFromStatistics( statCompositeSelectivity ); }
+ if ( optimizerTracingIsOn() )
+ { getOptimizerTracer().traceCompositeSelectivityFromStatistics( statCompositeSelectivity ); }
if (tableUniquenessFactor > 0.0)
{
@@ -2001,8 +2001,8 @@ class FromBaseTable extends FromTable
1 :
compositeStatRC / outerCost.rowCount());
- if (optimizer.tracingIsOn()) {
- optimizer.tracer().
+ if (optimizerTracingIsOn()) {
+ getOptimizerTracer().
traceCostIncludingCompositeSelectivityFromStats(
costEst, tableNumber);
}
@@ -2940,8 +2940,8 @@ class FromBaseTable extends FromTable
JoinStrategy trulyTheBestJoinStrategy = ap.getJoinStrategy();
Optimizer opt = ap.getOptimizer();
- if (opt.tracingIsOn()) {
- opt.tracer().traceChangingAccessPathForTable(tableNumber);
+ if (optimizerTracingIsOn()) {
+ getOptimizerTracer().traceChangingAccessPathForTable(tableNumber);
}
if (SanityManager.DEBUG)
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/FromTable.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/FromTable.java?rev=1509815&r1=1509814&r2=1509815&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/FromTable.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/FromTable.java Fri Aug 2 19:05:28 2013
@@ -249,7 +249,7 @@ abstract class FromTable extends ResultS
found = true;
- if ( optimizer.tracingIsOn() ) { optimizer.tracer().traceConsideringJoinStrategy( ap.getJoinStrategy(), tableNumber ); }
+ if ( optimizerTracingIsOn() ) { getOptimizerTracer().traceConsideringJoinStrategy( ap.getJoinStrategy(), tableNumber ); }
}
/*
@@ -310,22 +310,22 @@ abstract class FromTable extends ResultS
ap.setJoinStrategy(getCurrentAccessPath().getJoinStrategy());
- if (opt.tracingIsOn()) {
- opt.tracer().traceRememberingJoinStrategy(
+ if (optimizerTracingIsOn()) {
+ getOptimizerTracer().traceRememberingJoinStrategy(
getCurrentAccessPath().getJoinStrategy(), tableNumber);
}
if (ap == bestAccessPath)
{
- if (opt.tracingIsOn()) {
- opt.tracer().traceRememberingBestAccessPathSubstring(
+ if (optimizerTracingIsOn()) {
+ getOptimizerTracer().traceRememberingBestAccessPathSubstring(
ap, tableNumber);
}
}
else if (ap == bestSortAvoidancePath)
{
- if (opt.tracingIsOn()) {
- opt.tracer().
+ if (optimizerTracingIsOn()) {
+ getOptimizerTracer().
traceRememberingBestSortAvoidanceAccessPathSubstring(
ap, tableNumber);
}
@@ -341,8 +341,8 @@ abstract class FromTable extends ResultS
"unknown access path type");
}
*/
- if (opt.tracingIsOn()) {
- opt.tracer().traceRememberingBestUnknownAccessPathSubstring(
+ if (optimizerTracingIsOn()) {
+ getOptimizerTracer().traceRememberingBestUnknownAccessPathSubstring(
ap, tableNumber);
}
}
@@ -647,8 +647,8 @@ abstract class FromTable extends ResultS
setCostEstimate(bestPath.getCostEstimate());
- if ( bestPath.getOptimizer().tracingIsOn() )
- { bestPath.getOptimizer().tracer().traceRememberingBestAccessPath( bestPath, tableNumber, planType ); }
+ if ( optimizerTracingIsOn() )
+ { getOptimizerTracer().traceRememberingBestAccessPath( bestPath, tableNumber, planType ); }
}
/** @see Optimizable#startOptimizing */
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/HashJoinStrategy.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/HashJoinStrategy.java?rev=1509815&r1=1509814&r2=1509815&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/HashJoinStrategy.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/HashJoinStrategy.java Fri Aug 2 19:05:28 2013
@@ -68,7 +68,7 @@ class HashJoinStrategy extends BaseJoinS
*/
if (! innerTable.isMaterializable())
{
- if ( optimizer.tracingIsOn() ) { optimizer.tracer().traceSkipUnmaterializableHashJoin(); }
+ if ( innerTable.optimizerTracingIsOn() ) { innerTable.getOptimizerTracer().traceSkipUnmaterializableHashJoin(); }
return false;
}
@@ -150,15 +150,15 @@ class HashJoinStrategy extends BaseJoinS
if (SanityManager.DEBUG)
{
- if ( optimizer.tracingIsOn() )
+ if ( innerTable.optimizerTracingIsOn() )
{
if (hashKeyColumns == null)
{
- optimizer.tracer().traceSkipHashJoinNoHashKeys();
+ innerTable.getOptimizerTracer().traceSkipHashJoinNoHashKeys();
}
else
{
- optimizer.tracer().traceHashKeyColumns( ArrayUtil.copy( hashKeyColumns ) );
+ innerTable.getOptimizerTracer().traceHashKeyColumns( ArrayUtil.copy( hashKeyColumns ) );
}
}
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/JoinNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/JoinNode.java?rev=1509815&r1=1509814&r2=1509815&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/JoinNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/JoinNode.java Fri Aug 2 19:05:28 2013
@@ -161,7 +161,7 @@ class JoinNode extends TableOperatorNode
RowOrdering rowOrdering)
throws StandardException
{
- if ( optimizer.tracingIsOn() ) { optimizer.tracer().traceOptimizingJoinNode(); }
+ if ( optimizerTracingIsOn() ) { getOptimizerTracer().traceOptimizingJoinNode(); }
// It's possible that a call to optimize the left/right will cause
// a new "truly the best" plan to be stored in the underlying base
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/NestedLoopJoinStrategy.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/NestedLoopJoinStrategy.java?rev=1509815&r1=1509814&r2=1509815&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/NestedLoopJoinStrategy.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/NestedLoopJoinStrategy.java Fri Aug 2 19:05:28 2013
@@ -142,8 +142,8 @@ class NestedLoopJoinStrategy extends Bas
CostEstimate costEstimate) {
costEstimate.multiply(outerCost.rowCount(), costEstimate);
- if ( optimizer.tracingIsOn() )
- { optimizer.tracer().traceCostOfNScans( innerTable.getTableNumber(), outerCost.rowCount(), costEstimate ); }
+ if ( innerTable.optimizerTracingIsOn() )
+ { innerTable.getOptimizerTracer().traceCostOfNScans( innerTable.getTableNumber(), outerCost.rowCount(), costEstimate ); }
}
/** @see JoinStrategy#maxCapacity */
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/OptimizerImpl.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/OptimizerImpl.java?rev=1509815&r1=1509814&r2=1509815&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/OptimizerImpl.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/OptimizerImpl.java Fri Aug 2 19:05:28 2013
@@ -387,7 +387,7 @@ class OptimizerImpl implements Optimizer
desiredJoinOrderFound = false;
}
- public boolean tracingIsOn() { return lcc.optimizerTracingIsOn(); }
+ private boolean tracingIsOn() { return lcc.optimizerTracingIsOn(); }
public int getMaxMemoryPerTable()
{
@@ -2848,7 +2848,7 @@ class OptimizerImpl implements Optimizer
}
/** Get the trace machinery */
- public OptTrace tracer() { return lcc.getOptimizerTracer(); }
+ private OptTrace tracer() { return lcc.getOptimizerTracer(); }
public int getOptimizableCount() { return optimizableList.size(); }
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNode.java?rev=1509815&r1=1509814&r2=1509815&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNode.java Fri Aug 2 19:05:28 2013
@@ -42,6 +42,7 @@ import org.apache.derby.iapi.sql.Stateme
import org.apache.derby.iapi.sql.StatementUtil;
import org.apache.derby.iapi.sql.compile.CompilerContext;
import org.apache.derby.iapi.sql.compile.OptimizerFactory;
+import org.apache.derby.iapi.sql.compile.OptTrace;
import org.apache.derby.iapi.sql.compile.Parser;
import org.apache.derby.iapi.sql.compile.TypeCompiler;
import org.apache.derby.iapi.sql.compile.Visitable;
@@ -144,6 +145,12 @@ public abstract class QueryTreeNode impl
getOptimizerFactory();
}
+ /** Convenience method for finding the optimizer tracer */
+ public OptTrace getOptimizerTracer() { return getLanguageConnectionContext().getOptimizerTracer(); }
+
+ /** Convenience method for checking whether optimizer tracing is on */
+ public boolean optimizerTracingIsOn() { return getLanguageConnectionContext().optimizerTracingIsOn(); }
+
/**
* Gets the constant action factory for this database.
*