Author: shawkins
Date: 2012-05-14 00:47:40 -0400 (Mon, 14 May 2012)
New Revision: 4100
Modified:
trunk/client/src/main/java/org/teiid/jdbc/StatementImpl.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java
trunk/engine/src/main/java/org/teiid/query/analysis/AnalysisRecord.java
Log:
TEIID-2042 limiting debug plan size
Modified: trunk/client/src/main/java/org/teiid/jdbc/StatementImpl.java
===================================================================
--- trunk/client/src/main/java/org/teiid/jdbc/StatementImpl.java 2012-05-14 03:46:04 UTC
(rev 4099)
+++ trunk/client/src/main/java/org/teiid/jdbc/StatementImpl.java 2012-05-14 04:47:40 UTC
(rev 4100)
@@ -554,11 +554,17 @@
if (show.equalsIgnoreCase("PLAN")) { //$NON-NLS-1$
List<ArrayList<Object>> records = new
ArrayList<ArrayList<Object>>(1);
PlanNode plan = driverConnection.getCurrentPlanDescription();
- if (plan != null) {
+ String connDebugLog = driverConnection.getDebugLog();
+ if (plan != null || connDebugLog != null) {
ArrayList<Object> row = new ArrayList<Object>(3);
- row.add(DataTypeTransformer.getClob(plan.toString()));
- row.add(new SQLXMLImpl(plan.toXml()));
- row.add(DataTypeTransformer.getClob(driverConnection.getDebugLog()));
+ if (plan != null) {
+ row.add(DataTypeTransformer.getClob(plan.toString()));
+ row.add(new SQLXMLImpl(plan.toXml()));
+ } else {
+ row.add(null);
+ row.add(null);
+ }
+ row.add(DataTypeTransformer.getClob(connDebugLog));
records.add(row);
}
createResultSet(records, new String[] {"PLAN_TEXT", "PLAN_XML",
"DEBUG_LOG"}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java 2012-05-14
03:46:04 UTC (rev 4099)
+++
trunk/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java 2012-05-14
04:47:40 UTC (rev 4100)
@@ -531,7 +531,11 @@
}
}
}
- request.processRequest();
+ try {
+ request.processRequest();
+ } finally {
+ analysisRecord = request.analysisRecord;
+ }
originalCommand = request.userCommand;
if (cachable && (requestMsg.useResultSetCache() ||
originalCommand.getCacheHint() != null) && rsCache != null &&
originalCommand.areResultsCachable()) {
this.cid = cacheId;
@@ -581,7 +585,6 @@
//This is just a dummy result it will get replaced by collector source
resultsBuffer =
this.processor.getBufferManager().createTupleBuffer(this.originalCommand.getProjectedSymbols(),
this.request.context.getConnectionId(), TupleSourceType.FINAL);
}
- analysisRecord = request.analysisRecord;
transactionContext = request.transactionContext;
if (this.transactionContext != null &&
this.transactionContext.getTransactionType() != Scope.NONE) {
if (this.requestMsg.getRequestOptions().isContinuous()) {
Modified: trunk/engine/src/main/java/org/teiid/query/analysis/AnalysisRecord.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/analysis/AnalysisRecord.java 2012-05-14
03:46:04 UTC (rev 4099)
+++ trunk/engine/src/main/java/org/teiid/query/analysis/AnalysisRecord.java 2012-05-14
04:47:40 UTC (rev 4100)
@@ -33,6 +33,7 @@
import org.teiid.client.plan.Annotation;
import org.teiid.client.plan.PlanNode;
import org.teiid.core.types.DataTypeManager;
+import org.teiid.core.util.PropertiesUtils;
import org.teiid.logging.LogConstants;
import org.teiid.logging.LogManager;
import org.teiid.logging.MessageLevel;
@@ -55,7 +56,9 @@
*/
public class AnalysisRecord {
- // Common
+ private static final int MAX_PLAN_LENGTH =
PropertiesUtils.getIntProperty(System.getProperties(),
"org.teiid.maxPlanLength", 1<<25); //$NON-NLS-1$
+
+ // Common
public static final String PROP_OUTPUT_COLS = "Output Columns";
//$NON-NLS-1$
// Relational
@@ -179,6 +182,9 @@
* @param debugLine Text to add to debug writer
*/
public void println(String debugLine) {
+ if (this.stringWriter.getBuffer().length() > MAX_PLAN_LENGTH) {
+ this.stringWriter.getBuffer().delete(0, this.stringWriter.getBuffer().length() -
(MAX_PLAN_LENGTH*3/4));
+ }
this.debugWriter.println(debugLine);
}