[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