Skip to content

Commit

Permalink
MONDRIAN: [MONDRIAN-992]
Browse files Browse the repository at this point in the history
Fixes a problem with SQL query generation. When both aggregate tables and grouping sets were used, the column types were not infered correctly, causing an assertion error deep in the code.

[git-p4: depot-paths = "//open/mondrian/": change = 14618]
  • Loading branch information
lucboudreau committed Sep 23, 2011
1 parent dd031bc commit f0e5598
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 13 deletions.
6 changes: 4 additions & 2 deletions src/main/mondrian/rolap/agg/AggQuerySpec.java
Expand Up @@ -14,8 +14,10 @@

import mondrian.rolap.RolapStar;
import mondrian.rolap.StarColumnPredicate;
import mondrian.rolap.SqlStatement.Type;
import mondrian.rolap.aggmatcher.AggStar;
import mondrian.rolap.sql.SqlQuery;
import mondrian.util.Pair;

import org.apache.log4j.Logger;

Expand Down Expand Up @@ -107,10 +109,10 @@ public StarColumnPredicate getPredicate(int i) {
return segment0.axes[i].getPredicate();
}

public String generateSqlQuery() {
public Pair<String, List<Type>> generateSqlQuery() {
SqlQuery sqlQuery = newSqlQuery();
generateSql(sqlQuery);
return sqlQuery.toString();
return sqlQuery.toSqlAndTypes();
}

private void addGroupingSets(SqlQuery sqlQuery) {
Expand Down
15 changes: 4 additions & 11 deletions src/main/mondrian/rolap/agg/AggregationManager.java
Expand Up @@ -15,6 +15,7 @@

import mondrian.olap.*;
import mondrian.rolap.*;
import mondrian.rolap.SqlStatement.Type;
import mondrian.rolap.aggmatcher.AggStar;

import mondrian.util.Pair;
Expand Down Expand Up @@ -158,14 +159,6 @@ public Pair<String, List<SqlStatement.Type>> generateSql(
BitKey levelBitKey = groupingSetsList.getDefaultLevelBitKey();
BitKey measureBitKey = groupingSetsList.getDefaultMeasureBitKey();

List<SqlStatement.Type> types = new ArrayList<SqlStatement.Type>();
for (int levelId : levelBitKey) {
types.add(star.getColumn(levelId).getInternalType());
}
for (int measureId : measureBitKey) {
types.add(star.getColumn(measureId).getInternalType());
}

// Check if using aggregates is enabled.
boolean hasCompoundPredicates = false;
if (compoundPredicateList != null && compoundPredicateList.size() > 0) {
Expand Down Expand Up @@ -211,15 +204,15 @@ public Pair<String, List<SqlStatement.Type>> generateSql(
AggQuerySpec aggQuerySpec =
new AggQuerySpec(
aggStar, rollup[0], groupingSetsList);
String sql = aggQuerySpec.generateSqlQuery();
Pair<String, List<Type>> sql = aggQuerySpec.generateSqlQuery();

if (getLogger().isDebugEnabled()) {
getLogger().debug(
"generateSqlQuery: sql="
+ sql);
+ sql.left);
}

return Pair.of(sql, types);
return sql;
}

// No match, fall through and use fact table.
Expand Down

0 comments on commit f0e5598

Please sign in to comment.