Skip to content

Commit

Permalink
MONDRIAN - don't issue count distinct queries in a separate query if the
Browse files Browse the repository at this point in the history
       underlying db does support count distinct

[git-p4: depot-paths = "//open/mondrian/": change = 7522]
  • Loading branch information
Zelaine Fong committed Sep 1, 2006
1 parent 4aa4a8f commit dae56fd
Showing 1 changed file with 28 additions and 21 deletions.
49 changes: 28 additions & 21 deletions src/main/mondrian/rolap/FastBatchingCellReader.java
Expand Up @@ -307,36 +307,43 @@ void loadAggregation() {

// If the database cannot execute "count(distinct ...)", split the
// distinct aggregations out.
while (true) {
// Scan for a measure based upon a distinct aggregation.
RolapStar.Measure distinctMeasure =
RolapStar.Measure measure =
(RolapStar.Measure) measuresList.get(0);
if (!measure.getStar().getSqlQueryDialect().allowsCountDistinct()) {
while (true) {
// Scan for a measure based upon a distinct aggregation.
RolapStar.Measure distinctMeasure =
getFirstDistinctMeasure(measuresList);
if (distinctMeasure == null) {
break;
}
final String expr =
distinctMeasure.getExpression().getGenericExpression();
final List distinctMeasuresList = new ArrayList();
for (int i = 0; i < measuresList.size();) {
RolapStar.Measure measure = (RolapStar.Measure) measuresList.get(i);
if (measure.getAggregator().isDistinct() &&
measure.getExpression().getGenericExpression().equals(expr)) {
measuresList.remove(i);
distinctMeasuresList.add(distinctMeasure);
} else {
i++;
if (distinctMeasure == null) {
break;
}
}
RolapStar.Measure[] measures = (RolapStar.Measure[])
final String expr =
distinctMeasure.getExpression().
getGenericExpression();
final List distinctMeasuresList = new ArrayList();
for (int i = 0; i < measuresList.size();) {
measure = (RolapStar.Measure) measuresList.get(i);
if (measure.getAggregator().isDistinct() &&
measure.getExpression().getGenericExpression().
equals(expr))
{
measuresList.remove(i);
distinctMeasuresList.add(distinctMeasure);
} else {
i++;
}
}
RolapStar.Measure[] measures = (RolapStar.Measure[])
distinctMeasuresList.toArray(
new RolapStar.Measure[distinctMeasuresList.size()]);
aggmgr.loadAggregation(measures, columns, bitKey,
aggmgr.loadAggregation(measures, columns, bitKey,
constraintses, pinnedSegments);
}
}
final int measureCount = measuresList.size();
if (measureCount > 0) {
RolapStar.Measure[] measures = (RolapStar.Measure[])
measuresList.toArray(new RolapStar.Measure[measureCount]);
measuresList.toArray(new RolapStar.Measure[measureCount]);
aggmgr.loadAggregation(measures, columns, bitKey,
constraintses, pinnedSegments);
}
Expand Down

0 comments on commit dae56fd

Please sign in to comment.