BF [ 1885632 ] MReportTree.getWhereClause: bad where clause for huge trees

Patch provided by Tobi42 (Tobias Schoeneberg).
Reviewed and tested by Teo Sarca.
This commit is contained in:
mark_o 2008-02-25 09:26:20 +00:00
parent 9bc4f7c580
commit 8004c37c38
1 changed files with 19 additions and 12 deletions

View File

@ -205,7 +205,7 @@ public class MReportTree
/** /**
* Get Where Clause * Get Where Clause
* @param ID start node * @param ID start node
* @return ColumnName = 1 or ColumnName IN (1,2,3) * @return ColumnName = 1 or ( ColumnName = 1 OR ColumnName = 2 OR ColumnName = 3)
*/ */
public String getWhereClause (int ID) public String getWhereClause (int ID)
{ {
@ -216,24 +216,31 @@ public class MReportTree
log.finest("Root=" + node); log.finest("Root=" + node);
// //
StringBuffer result = null; StringBuffer result = null;
if (node != null && node.isSummary()) if (node != null && node.isSummary ())
{ {
StringBuffer sb = new StringBuffer();
Enumeration en = node.preorderEnumeration(); Enumeration<MTreeNode> en = node.preorderEnumeration ();
while (en.hasMoreElements()) StringBuffer sb = new StringBuffer ();
while (en.hasMoreElements ())
{ {
MTreeNode nn = (MTreeNode)en.nextElement(); MTreeNode nn = en.nextElement ();
if (!nn.isSummary()) if (!nn.isSummary ())
{ {
if (sb.length () > 0) if (sb.length () > 0)
sb.append (","); {
sb.append(nn.getNode_ID()); sb.append (" OR ");
log.finest("- " + nn); }
sb.append (ColumnName);
sb.append ('=');
sb.append (nn.getNode_ID ());
log.finest ("- " + nn);
} }
else else
log.finest("- skipped parent (" + nn + ")"); log.finest ("- skipped parent (" + nn + ")");
} }
result = new StringBuffer (ColumnName).append(" IN (").append(sb).append(")"); result = new StringBuffer (" ( ");
result.append (sb);
result.append (" ) ");
} }
else // not found or not summary else // not found or not summary
result = new StringBuffer (ColumnName).append("=").append(ID); result = new StringBuffer (ColumnName).append("=").append(ID);