[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