[teiid-commits] teiid SVN: r3831 - branches/7.7.x/engine/src/main/java/org/teiid/query/processor/relational.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Fri Jan 27 13:09:39 EST 2012


Author: shawkins
Date: 2012-01-27 13:09:39 -0500 (Fri, 27 Jan 2012)
New Revision: 3831

Modified:
   branches/7.7.x/engine/src/main/java/org/teiid/query/processor/relational/DependentCriteriaProcessor.java
Log:
TEIID-1912 refining distinct check

Modified: branches/7.7.x/engine/src/main/java/org/teiid/query/processor/relational/DependentCriteriaProcessor.java
===================================================================
--- branches/7.7.x/engine/src/main/java/org/teiid/query/processor/relational/DependentCriteriaProcessor.java	2012-01-26 19:28:47 UTC (rev 3830)
+++ branches/7.7.x/engine/src/main/java/org/teiid/query/processor/relational/DependentCriteriaProcessor.java	2012-01-27 18:09:39 UTC (rev 3831)
@@ -99,16 +99,19 @@
                 }
             	for (SetState setState : dependentSetStates) {
                     setState.valueIterator = dvs.getValueIterator(setState.valueExpression);
-                    if (setState.maxNdv > 0 && setState.maxNdv < dvs.getTupleBuffer().getRowCount()) {
-                    	ValueIterator vi = dvs.getValueIterator(setState.valueExpression);
-                    	Comparable last = null;
-                    	int distinctCount = 0;
-                    	while (vi.hasNext()) {
-                    		Comparable next = (Comparable) vi.next();
-                    		if (last == null || next.compareTo(last) != 0) {
-                    			distinctCount++;
-                    		}
-                    		last = next;
+                    int distinctCount = dvs.getTupleBuffer().getRowCount();
+                    if (setState.maxNdv > 0 && setState.maxNdv < distinctCount) {
+                    	if (dvs.getTupleBuffer().getSchema().size() >= 1) {
+                    		distinctCount = 0;
+	                    	ValueIterator vi = dvs.getValueIterator(setState.valueExpression);
+	                    	Comparable last = null;
+	                    	while (vi.hasNext()) {
+	                    		Comparable next = (Comparable) vi.next();
+	                    		if (last == null || next.compareTo(last) != 0) {
+	                    			distinctCount++;
+	                    		}
+	                    		last = next;
+	                    	}
                     	}
                     	if (!setState.overMax && distinctCount > setState.maxNdv) {
                     		LogManager.logWarning(LogConstants.CTX_DQP, QueryPlugin.Util.getString("DependentCriteriaProcessor.dep_join_backoff", valueSource, setState.valueExpression, setState.maxNdv)); //$NON-NLS-1$



More information about the teiid-commits mailing list