[Mondrian] //open/mondrian/src/main/mondrian/xmla/XmlaHandler.java Rev 41 and 42
Julian Hyde
julianhyde at speakeasy.net
Tue Jul 10 17:49:47 EDT 2007
> Richard Emberson wrote:
>
> In Rev 41 the writeHierarchyInfo method was changed as
> follows by thiyagu:
<snip>
> With Rev 42 this was removed moving back to Rev 40 version by jhyde.
I don't see any changes to the writeHierarchyInfo or getAttributes methods
in #42. Here are the changes I made:
$ p4 diff2 .../XmlaHandler.java#{41,42}
==== //open/mondrian/src/main/mondrian/xmla/XmlaHandler.java#41 (ktext) -
//open/mondrian/src/ma
in/mondrian/xmla/XmlaHandler.java#42 (ktext) ==== content
837d836
< ResultSet rs = null;
860,861c859,862
< Statement stmt = sqlConn.createStatement();
< List<List<String>> fields = new ArrayList<List<String>>();
---
> Statement stmt = null;
> try {
> stmt = sqlConn.createStatement();
> List<List<String>> fields = new
ArrayList<List<String>>();
863,878c864,883
< Map<String, List<String>> tableFieldMap =
< new HashMap<String, List<String>>();
< for (MondrianDef.Relation relation1 : relationList) {
< final String tableName = relation1.toString();
< List<String> fieldNameList = new ArrayList<String>();
< // FIXME: Quote table name
< dtSql = "SELECT * FROM " + tableName + " WHERE 1=2";
< rs = stmt.executeQuery(dtSql);
< ResultSetMetaData rsMeta = rs.getMetaData();
< for (int j = 1; j <= rsMeta.getColumnCount(); j++) {
< String colName = rsMeta.getColumnName(j);
< boolean colNameExists = false;
< for (List<String> prvField : fields) {
< if (prvField.contains(colName)) {
< colNameExists = true;
< break;
---
> Map<String, List<String>> tableFieldMap =
> new HashMap<String, List<String>>();
> for (MondrianDef.Relation relation1 : relationList) {
> final String tableName = relation1.toString();
> List<String> fieldNameList = new
ArrayList<String>();
> // FIXME: Quote table name
> dtSql = "SELECT * FROM " + tableName + " WHERE
1=2";
> ResultSet rs = stmt.executeQuery(dtSql);
> ResultSetMetaData rsMeta = rs.getMetaData();
> for (int j = 1; j <= rsMeta.getColumnCount(); j++)
{
> String colName = rsMeta.getColumnName(j);
> boolean colNameExists = false;
> for (List<String> prvField : fields) {
> if (prvField.contains(colName)) {
> colNameExists = true;
> break;
> }
> }
> if (!colNameExists) {
>
fieldNameList.add(rsMeta.getColumnName(j));
881,882c886,897
< if (!colNameExists) {
< fieldNameList.add(rsMeta.getColumnName(j));
---
> fields.add(fieldNameList);
> String truncatedTableName =
> tableName.substring(tableName.lastIndexOf(".")
+ 1);
> truncatedTableList.add(truncatedTableName);
> tableFieldMap.put(truncatedTableName,
fieldNameList);
> }
> return new TabularRowSet(tableFieldMap,
truncatedTableList);
> } finally {
> if (stmt != null) {
> try {
> stmt.close();
> } catch (SQLException ignored) {
885,889d899
< fields.add(fieldNameList);
< String truncatedTableName =
< tableName.substring(tableName.lastIndexOf(".") +
1);
< truncatedTableList.add(truncatedTableName);
< tableFieldMap.put(truncatedTableName, fieldNameList);
891d900
< return new TabularRowSet(tableFieldMap,
truncatedTableList);
903c912,913
< SqlQuery.Dialect dialect = ((RolapSchema)
connection.getSchema()).getDialect()
;
---
> SqlQuery.Dialect dialect =
> ((RolapSchema) connection.getSchema()).getDialect();
910c920
< SqlStatement stmt =
---
> SqlStatement stmt2 =
917c927
< stmt, request.drillThroughMaxRows(),
---
> stmt2, request.drillThroughMaxRows(),
936,942c946,950
< try {
< if (rs != null) rs.close();
< } catch (SQLException ignored) {
< }
< try {
< if (sqlConn != null && !sqlConn.isClosed())
sqlConn.close();
< } catch (SQLException ignored) {
---
> if (sqlConn != null) {
> try {
> sqlConn.close();
> } catch (SQLException ignored) {
> }
2334c2342
< if ((dsCatalog == null) && (catalogName == null)) {
---
> if ((dsCatalog == null) && (catalogName != null)) {
>
> The XmlaCognosTest.ref.xml file reflects Rev 41 not Rev 42
> (or 40 and earlier).
> Which is correct?
I don't understand. Also, XmlaCognosTest passes for me.
Julian
More information about the Mondrian
mailing list