[teiid-commits] teiid SVN: r2695 - in branches/7.1.x/engine/src/main/java/org/teiid: query/parser and 1 other directory.
teiid-commits at lists.jboss.org
teiid-commits at lists.jboss.org
Fri Oct 29 15:17:55 EDT 2010
Author: rareddy
Date: 2010-10-29 15:17:54 -0400 (Fri, 29 Oct 2010)
New Revision: 2695
Modified:
branches/7.1.x/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java
branches/7.1.x/engine/src/main/java/org/teiid/dqp/internal/process/SessionAwareCache.java
branches/7.1.x/engine/src/main/java/org/teiid/query/parser/QueryParser.java
Log:
TEIID-1336: Fixing the code to not hit the cache when user did not turn on caching or did not provide a cache hint. Also, resetting the total requests and cacheHitRatio if the contents of the cache are cleared.
Modified: branches/7.1.x/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java
===================================================================
--- branches/7.1.x/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java 2010-10-29 18:45:33 UTC (rev 2694)
+++ branches/7.1.x/engine/src/main/java/org/teiid/dqp/internal/process/RequestWorkItem.java 2010-10-29 19:17:54 UTC (rev 2695)
@@ -60,6 +60,7 @@
import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.function.metadata.FunctionMethod;
import org.teiid.query.parser.ParseInfo;
+import org.teiid.query.parser.QueryParser;
import org.teiid.query.processor.BatchCollector;
import org.teiid.query.processor.QueryProcessor;
import org.teiid.query.sql.lang.Command;
@@ -333,19 +334,27 @@
protected void processNew() throws TeiidProcessingException, TeiidComponentException {
SessionAwareCache<CachedResults> rsCache = dqpCore.getRsCache();
- ParseInfo pi = Request.createParseInfo(requestMsg);
- CacheID cacheId = new CacheID(this.dqpWorkContext, pi, requestMsg.getCommandString());
- boolean cachable = cacheId.setParameters(requestMsg.getParameterValues());
- if (rsCache != null && cachable) {
- CachedResults cr = rsCache.get(cacheId);
- if (cr != null && (requestMsg.useResultSetCache() || cr.getHint() != null)) {
- this.resultsBuffer = cr.getResults();
- this.analysisRecord = cr.getAnalysisRecord();
- request.initMetadata();
- this.originalCommand = cr.getCommand(requestMsg.getCommandString(), request.metadata, pi);
- request.validateAccess(this.originalCommand);
- this.doneProducingBatches();
- return;
+
+ boolean cachable = false;
+ CacheID cacheId = null;
+ boolean canUseCached = (requestMsg.useResultSetCache() ||
+ QueryParser.getQueryParser().parseCacheHint(requestMsg.getCommandString()) != null);
+
+ if (rsCache != null && canUseCached) {
+ ParseInfo pi = Request.createParseInfo(requestMsg);
+ cacheId = new CacheID(this.dqpWorkContext, pi, requestMsg.getCommandString());
+ cachable = cacheId.setParameters(requestMsg.getParameterValues());
+ if (cachable) {
+ CachedResults cr = rsCache.get(cacheId);
+ if (cr != null) {
+ this.resultsBuffer = cr.getResults();
+ this.analysisRecord = cr.getAnalysisRecord();
+ request.initMetadata();
+ this.originalCommand = cr.getCommand(requestMsg.getCommandString(), request.metadata, pi);
+ request.validateAccess(this.originalCommand);
+ this.doneProducingBatches();
+ return;
+ }
}
}
request.processRequest();
Modified: branches/7.1.x/engine/src/main/java/org/teiid/dqp/internal/process/SessionAwareCache.java
===================================================================
--- branches/7.1.x/engine/src/main/java/org/teiid/dqp/internal/process/SessionAwareCache.java 2010-10-29 18:45:33 UTC (rev 2694)
+++ branches/7.1.x/engine/src/main/java/org/teiid/dqp/internal/process/SessionAwareCache.java 2010-10-29 19:17:54 UTC (rev 2695)
@@ -173,6 +173,8 @@
public void clearAll(){
this.localCache.clear();
this.distributedCache.clear();
+ this.totalRequests.set(0);
+ this.cacheHit.set(0);
}
public void clearForVDB(String vdbName, int version) {
Modified: branches/7.1.x/engine/src/main/java/org/teiid/query/parser/QueryParser.java
===================================================================
--- branches/7.1.x/engine/src/main/java/org/teiid/query/parser/QueryParser.java 2010-10-29 18:45:33 UTC (rev 2694)
+++ branches/7.1.x/engine/src/main/java/org/teiid/query/parser/QueryParser.java 2010-10-29 19:17:54 UTC (rev 2695)
@@ -26,6 +26,7 @@
import org.teiid.api.exception.query.QueryParserException;
import org.teiid.query.QueryPlugin;
+import org.teiid.query.sql.lang.CacheHint;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.lang.Criteria;
import org.teiid.query.sql.symbol.Expression;
@@ -123,6 +124,13 @@
}
return result;
}
+
+ public CacheHint parseCacheHint(String sql) throws QueryParserException {
+ if(sql == null || sql.length() == 0) {
+ throw new QueryParserException(QueryPlugin.Util.getString("QueryParser.emptysql")); //$NON-NLS-1$
+ }
+ return SQLParserUtil.getQueryCacheOption(sql);
+ }
/**
* Takes a SQL string representing an SQL criteria (i.e. just the WHERE
More information about the teiid-commits
mailing list