Author: pledbrook
Date: 2006-08-05 11:29:35-0700
New Revision: 10240
Modified:
branches/release/b21/src/java/org/tigris/scarab/util/word/IssueSearch.java
branches/release/b21/src/webapp/WEB-INF/templates/screens/IssueList.vm
Log:
Fixed the problem with sorting on internal attributes. Scarab actually
performs several queries for each "user query". Now, the first of these
was correct, but the subsequent ones (mainly used to retrieve the
attribute values) were missing vital links to the internal attributes.
Anyway, it's pretty horrific code, but it seems to work ok now.
Modified: branches/release/b21/src/java/org/tigris/scarab/util/word/IssueSearch.java
Url: http://scarab.tigris.org/source/browse/scarab/branches/release/b21/src/java/org/tigris/scarab/util/word/IssueSearch.java?view=diff&rev=10240&p1=branches/release/b21/src/java/org/tigris/scarab/util/word/IssueSearch.java&p2=branches/release/b21/src/java/org/tigris/scarab/util/word/IssueSearch.java&r1=10239&r2=10240
==============================================================================
--- branches/release/b21/src/java/org/tigris/scarab/util/word/IssueSearch.java (original)
+++ branches/release/b21/src/java/org/tigris/scarab/util/word/IssueSearch.java 2006-08-05 11:29:35-0700
@@ -2356,8 +2356,8 @@
}
else if (sortInternal != null)
{
- // WARNING: alias != column name
- if (sortInternal.equals(RModuleUserAttribute.MODIFIED_BY.getName()))
+ // WARNING: alias != column name
+ if (sortInternal.equals(RModuleUserAttribute.MODIFIED_BY.getName()))
sortColumn = ACTIVITYSETALIAS_MODIFICATION + ".CREATED_BY";
else if (sortInternal.equals(RModuleUserAttribute.MODIFIED_DATE.getName()))
sortColumn = ACTIVITYSETALIAS_MODIFICATION + ".CREATED_DATE";
@@ -2414,8 +2414,8 @@
int valueListSize = rmuas.size();
StringBuffer outerJoin = new StringBuffer(10 * valueListSize + 20);
- int count = 0;
- int maxJoin = MAX_JOIN - 2;
+ int count = 0, joinCount = 0;
+ final int maxJoin = MAX_JOIN - 3;
//List columnSqlList = new ArrayList(valueListSize/maxJoin + 1);
StringBuffer partialSql = getSelectStart();
tableAliases = new HashSet(MAX_JOIN);
@@ -2423,29 +2423,79 @@
{
RModuleUserAttribute rmua = (RModuleUserAttribute)i.next();
Integer attrPK = rmua.getAttributeId();
-
- String id = attrPK.toString();
- String alias = AV + id;
- // add column to SELECT column clause
- partialSql.append(',').append(alias).append(DOT_VALUE);
- // if no criteria was specified for a displayed attribute
- // add it as an outer join
- if (!tableAliases.contains(alias)
- && !attrPK.equals(sortAttrId))
- {
- outerJoin.append(LEFT_OUTER_JOIN)
- .append(AttributeValuePeer.TABLE_NAME).append(' ')
- .append(alias).append(ON)
- .append(IssuePeer.ISSUE_ID).append('=')
- .append(alias).append(".ISSUE_ID AND ").append(alias)
- .append(".DELETED=0 AND ").append(alias)
- .append(".ATTRIBUTE_ID=").append(id).append(')');
- tableAliases.add(alias);
+ // Internal attributes require different tables to be JOINed compared
+ // to standard attributes.
+ if (rmua.isInternal())
+ {
+ String name = rmua.getName();
+ String alias, transId, value;
+ if (name.equals(RModuleUserAttribute.MODIFIED_BY.getName()))
+ {
+ alias = ACTIVITYSETALIAS_MODIFICATION;
+ transId = IssuePeer.LAST_TRANS_ID;
+ value = CREATED_BY;
+ }
+ else if (name.equals(RModuleUserAttribute.MODIFIED_DATE.getName()))
+ {
+ alias = ACTIVITYSETALIAS_MODIFICATION;
+ transId = IssuePeer.LAST_TRANS_ID;
+ value = CREATED_DATE;
+ }
+ else if (name.equals(RModuleUserAttribute.CREATED_BY.getName()))
+ {
+ alias = ACTIVITYSETALIAS;
+ transId = IssuePeer.CREATED_TRANS_ID;
+ value = CREATED_BY;
+ }
+ else
+ {
+ alias = ACTIVITYSETALIAS;
+ transId = IssuePeer.CREATED_TRANS_ID;
+ value = CREATED_DATE;
+ }
+
+ // Add the internal attribute to the select.
+ partialSql.append(',').append(alias).append('.').append(value);
+
+ // Now the JOIN.
+ if (!tableAliases.contains(alias))
+ {
+ outerJoin.append(LEFT_OUTER_JOIN)
+ .append(ActivitySetPeer.TABLE_NAME)
+ .append(' ').append(alias).append(ON)
+ .append(transId).append('=')
+ .append(alias).append('.').append(ACTSET_TRAN_ID)
+ .append(')');
+ tableAliases.add(alias);
+ joinCount++;
+ }
+ }
+ else
+ {
+ String id = attrPK.toString();
+ String alias = AV + id;
+ // add column to SELECT column clause
+ partialSql.append(',').append(alias).append(DOT_VALUE);
+ // if no criteria was specified for a displayed attribute
+ // add it as an outer join
+ if (!tableAliases.contains(alias)
+ && !attrPK.equals(sortAttrId))
+ {
+ outerJoin.append(LEFT_OUTER_JOIN)
+ .append(AttributeValuePeer.TABLE_NAME).append(' ')
+ .append(alias).append(ON)
+ .append(IssuePeer.ISSUE_ID).append('=')
+ .append(alias).append(".ISSUE_ID AND ").append(alias)
+ .append(".DELETED=0 AND ").append(alias)
+ .append(".ATTRIBUTE_ID=").append(id).append(')');
+ tableAliases.add(alias);
+ joinCount++;
+ }
}
count++;
- if (count == maxJoin || !i.hasNext())
+ if (joinCount == maxJoin || !i.hasNext())
{
ColumnBundle cb = new ColumnBundle();
cb.size = count;
@@ -2456,6 +2506,42 @@
partialSql.append(',').append(
cb.sortColumn);
}
+ else if (sortInternal != null)
+ {
+ // The sort column must be added to the SELECT section of
+ // the SQL statement and the ORDER BY section.
+
+ // WARNING: alias != column name
+ if (sortInternal.equals(RModuleUserAttribute.MODIFIED_BY.getName()))
+ {
+ // First the ORDER BY.
+ cb.sortColumn = ACTIVITYSETALIAS_MODIFICATION + ".CREATED_BY";
+ }
+ else if (sortInternal.equals(RModuleUserAttribute.MODIFIED_DATE.getName()))
+ {
+ // First the ORDER BY.
+ cb.sortColumn = ACTIVITYSETALIAS_MODIFICATION + ".CREATED_DATE";
+ }
+ else if (sortInternal.equals(RModuleUserAttribute.CREATED_BY.getName()))
+ {
+ // First the ORDER BY.
+ cb.sortColumn = ACTIVITYSETALIAS_MODIFICATION + ".CREATED_BY";
+
+ }
+ else if (sortInternal.equals(RModuleUserAttribute.CREATED_DATE.getName()))
+ {
+ // First the ORDER BY.
+ cb.sortColumn = ACTIVITYSETALIAS + ".CREATED_DATE";
+ }
+
+ // Finally add the column to the select. Note that the sort
+ // column may already be in the select, so we only add it if
+ // it's not already there.
+ if (partialSql.indexOf(cb.sortColumn) == -1)
+ {
+ partialSql.append(',').append(cb.sortColumn);
+ }
+ }
cb.select = partialSql;
cb.outerJoins = outerJoin;
searchStuff.add(cb);
@@ -2464,6 +2550,7 @@
outerJoin = new StringBuffer(512);
tableAliases.clear();
count = 0;
+ joinCount = 0;
}
}
}
@@ -2930,7 +3017,7 @@
sql.append(FROM).append(IssuePeer.TABLE_NAME);
if (cb.outerJoins != null)
{
- sql.append(cb.outerJoins);
+ sql.append(cb.outerJoins);
}
sql.append(WHERE).append(IssuePeer.ISSUE_ID)
.append(IN).append(pks).append(')');
Modified: branches/release/b21/src/webapp/WEB-INF/templates/screens/IssueList.vm
Url: http://scarab.tigris.org/source/browse/scarab/branches/release/b21/src/webapp/WEB-INF/templates/screens/IssueList.vm?view=diff&rev=10240&p1=branches/release/b21/src/webapp/WEB-INF/templates/screens/IssueList.vm&p2=branches/release/b21/src/webapp/WEB-INF/templates/screens/IssueList.vm&r1=10239&r2=10240
==============================================================================
--- branches/release/b21/src/webapp/WEB-INF/templates/screens/IssueList.vm (original)
+++ branches/release/b21/src/webapp/WEB-INF/templates/screens/IssueList.vm 2006-08-05 11:29:35-0700
@@ -119,7 +119,7 @@
<th>$l10n.IssueType</th>
#end
<th>
- #if (!$sortColumn || $sortColumn.length() == 0)
+ #if ((!$sortColumn || $sortColumn.length() == 0) && !$sortInternal)
#if ($sortPolarity.equals('desc'))
#prepIssueListPageLink()
#set ($arrowLink = $link.setPathInfo('sortPolarity', 'asc').addPathInfo('sortColumn', '').addPathInfo('searchType', $searchType))
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.