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$
Show replies by date