You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mm...@locus.apache.org on 2000/08/17 20:28:06 UTC
cvs commit: xml-xalan/src/org/apache/xalan/xslt NodeSorter.java
mmidy 00/08/17 11:28:06
Modified: src/org/apache/xalan/xslt NodeSorter.java
Log:
If primary sort fails, don't sort on secondary
Revision Changes Path
1.10 +34 -11 xml-xalan/src/org/apache/xalan/xslt/NodeSorter.java
Index: NodeSorter.java
===================================================================
RCS file: /home/cvs/xml-xalan/src/org/apache/xalan/xslt/NodeSorter.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- NodeSorter.java 2000/03/02 10:23:05 1.9
+++ NodeSorter.java 2000/08/17 18:28:05 1.10
@@ -112,8 +112,9 @@
NodeCompareElem elem = new NodeCompareElem((Node)v.elementAt(i));
nodes.addElement(elem);
}
+
Vector scratchVector = new Vector();
- mergesort(nodes, scratchVector, 0, n - 1, support);
+ mergesort(nodes, scratchVector, 0, n - 1, support);
// return sorted vector of nodes
for (int i = 0; i<n; i++)
@@ -417,12 +418,22 @@
NodeCompareElem(Node node) throws org.xml.sax.SAXException
{
+ boolean tryNextKey = true;
m_node = node;
if (!m_keys.isEmpty())
{
NodeSortKey k1 = (NodeSortKey)m_keys.elementAt(0);
XObject r = k1.m_selectPat.execute(m_execContext, node, k1.m_namespaceContext);
- double d ;
+
+ if (r.getType()== XObject.CLASS_NODESET)
+ {
+ if (((XNodeSet)r).nodeset().getLength() <= 0)
+ tryNextKey = false;
+ }
+ else if (r == null)
+ tryNextKey = false;
+
+ double d ;
if(k1.m_treatAsNumbers)
{
d = r.num();
@@ -430,19 +441,31 @@
m_key1Value = new Double(Double.isNaN(d)? 0.0 : d);
}
else
+ {
m_key1Value = k1.m_col.getCollationKey(r.str());
+ }
if (m_keys.size()>1)
{
- NodeSortKey k2 = (NodeSortKey)m_keys.elementAt(1);
- XObject r2 = k2.m_selectPat.execute(m_execContext, node, k2.m_namespaceContext);
- if(k2.m_treatAsNumbers)
- {
- d = r2.num();
- m_key2Value = new Double(Double.isNaN(d)? 0.0 : d);
+ NodeSortKey k2 = (NodeSortKey)m_keys.elementAt(1);
+ if (!tryNextKey)
+ {
+ if(k2.m_treatAsNumbers)
+ m_key2Value = new Double(0.0);
+ else
+ m_key2Value = k2.m_col.getCollationKey("");
}
else
- m_key2Value = k2.m_col.getCollationKey(r2.str());
+ {
+ XObject r2 = k2.m_selectPat.execute(m_execContext, node, k2.m_namespaceContext);
+ if(k2.m_treatAsNumbers)
+ {
+ d = r2.num();
+ m_key2Value = new Double(Double.isNaN(d)? 0.0 : d);
+ }
+ else
+ m_key2Value = k2.m_col.getCollationKey(r2.str());
+ }
}
/* Leave this in case we decide to use an array later
while (kIndex <= m_keys.size() && kIndex < maxkey)
@@ -455,8 +478,8 @@
m_KeyValue[kIndex] = r.str();
} */
- } // end if not empty
- }
+ } // end if not empty
+ }
} // end NodeCompareElem class
}