Skip to content

Commit

Permalink
MONDRIAN:
Browse files Browse the repository at this point in the history
       On weblogic, closing the connection and then using the
       metadata object results in an exception.
       So now create the SqlQuery.Dialect once an reuse
       it rather than getting metadata over and over again.

[git-p4: depot-paths = "//open/mondrian/": change = 3751]
  • Loading branch information
Richard Emberson committed Jun 27, 2005
1 parent 2b6339c commit 8d9cce4
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 59 deletions.
19 changes: 14 additions & 5 deletions src/main/mondrian/rolap/RolapStar.java
Expand Up @@ -104,7 +104,7 @@ public void executeTrigger(final String key,
/** how many columns (column and columnName) there are */
private int columnCount;

private final SqlQuery sqlQuery;
private final SqlQuery.Dialect sqlQueryDialect;

/**
* If true, then database aggregation information is cached, otherwise
Expand Down Expand Up @@ -136,7 +136,7 @@ public void executeTrigger(final String key,

clearAggStarList();

sqlQuery = makeSqlQuery();
sqlQueryDialect = makeSqlQueryDialect();
}

/**
Expand Down Expand Up @@ -265,18 +265,27 @@ public Table getFactTable() {
* @return
*/
public SqlQuery getSqlQuery() {
return sqlQuery.cloneEmpty();
return new SqlQuery(getSqlQueryDialect());
}

/**
* Get this RolapStar's RolapSchema's Sql Dialect.
*
* @return
*/
public SqlQuery.Dialect getSqlQueryDialect() {
return sqlQueryDialect;
}

/**
* Make an SqlQuery from a jdbc connection.
*
* @return
*/
private SqlQuery makeSqlQuery() {
private SqlQuery.Dialect makeSqlQueryDialect() {
Connection conn = getJdbcConnection();
try {
return new SqlQuery(conn.getMetaData());
return SqlQuery.Dialect.create(conn.getMetaData());
} catch (SQLException e) {
throw Util.newInternal(
e, "Error while creating SqlQuery from connection");
Expand Down
20 changes: 1 addition & 19 deletions src/main/mondrian/rolap/agg/AbstractQuerySpec.java
Expand Up @@ -25,32 +25,14 @@
*/
public abstract class AbstractQuerySpec implements QuerySpec {
private final RolapStar star;
private final DatabaseMetaData metaData;

protected AbstractQuerySpec(final RolapStar star) {
this.star = star;

java.sql.Connection jdbcConnection = star.getJdbcConnection();
try {
this.metaData = jdbcConnection.getMetaData();
} catch (SQLException e) {
throw Util.getRes().newInternal("while loading segment", e);
} finally {
try {
jdbcConnection.close();
} catch (SQLException e) {
// ignore
}
}
}

protected SqlQuery newSqlQuery() {
return new SqlQuery(getDatabaseMetaData());
return getStar().getSqlQuery();
}
protected DatabaseMetaData getDatabaseMetaData() {
return metaData;
}


public RolapStar getStar() {
return star;
Expand Down
18 changes: 1 addition & 17 deletions src/main/mondrian/rolap/agg/AggQuerySpec.java
Expand Up @@ -38,33 +38,17 @@ class AggQuerySpec {
* is required; it cannot be rolled up.
*/
private final boolean isDistinct;
private final SqlQuery.Dialect dialect;

AggQuerySpec(final AggStar aggStar,
final Segment[] segments,
final boolean isDistinct) {
this.aggStar = aggStar;
this.segments = segments;
this.isDistinct = isDistinct;

java.sql.Connection jdbcConnection =
aggStar.getStar().getJdbcConnection();
try {
DatabaseMetaData metaData = jdbcConnection.getMetaData();
dialect = SqlQuery.Dialect.create(metaData);
} catch (SQLException e) {
throw Util.getRes().newInternal("while loading segment", e);
} finally {
try {
jdbcConnection.close();
} catch (SQLException e) {
// ignore
}
}
}

protected SqlQuery newSqlQuery() {
return new SqlQuery(dialect);
return getStar().getSqlQuery();
}
public RolapStar getStar() {
return aggStar.getStar();
Expand Down
19 changes: 1 addition & 18 deletions src/main/mondrian/rolap/agg/Aggregation.java
Expand Up @@ -96,24 +96,7 @@ public Aggregation(RolapStar star,
this.bitKey = bitKey;
this.segmentRefs = new ArrayList();

// find out if this is an oracle DB
Connection con = null;
try {
con = star.getJdbcConnection();
DatabaseMetaData md = con.getMetaData();
SqlQuery sqlQuery = new SqlQuery(md);
this.oracle = sqlQuery.getDialect().isOracle();
} catch (SQLException e) {
throw Util.newInternal(e, "could not query Metadata");
} finally {
if (con != null) {
try {
con.close();
} catch (SQLException e) {
// ignore
}
}
}
this.oracle = star.getSqlQueryDialect().isOracle();
}

/**
Expand Down

0 comments on commit 8d9cce4

Please sign in to comment.