Bug 189812 Exceptions occurs when specify two sorting conditions on a crosstab[1102]
Description: Exceptions occurs when specify two sorting conditions on a crosstab[1102] Build number: 2.2.0.v20070530-0630 Steps to reproduce: 1, Open the attached report design 2, Specify the sorting on the crosstab 3, One sorting is : Group Level: Product/PRODUCTLINE Key: CREDITLIMIT_Date/year_Product/PRODUCTLINE Column member valud: year 2003 4, The second sorting is as same as sorting one, but the year value is 2004 Expected result: Support multi sorting on one condition Actual result: Exception occurs Error Logs: org.eclipse.birt.report.service.api.ReportServiceException: Error happened while running the report; nested exception is: java.lang.ArrayIndexOutOfBoundsException: 1 Show Exception Stack Trace Hide Exception Stack Trace Stack Trace: org.eclipse.birt.data.engine.olap.data.impl.aggregation.sort.AggregationSortHelper.createMatchedAggrRow(AggregationSortHelper.java:131) org.eclipse.birt.data.engine.olap.data.impl.aggregation.sort.AggregationSortHelper.populateAggrDiskArray(AggregationSortHelper.java:87) org.eclipse.birt.data.engine.olap.data.impl.aggregation.sort.AggregationSortHelper.sort(AggregationSortHelper.java:53) org.eclipse.birt.data.engine.olap.data.impl.aggregation.sort.AggrSortHelper.sort(AggrSortHelper.java:114) org.eclipse.birt.data.engine.olap.data.api.CubeQueryExecutorHelper.applyAggrSort(CubeQueryExecutorHelper.java:448) org.eclipse.birt.data.engine.olap.data.api.CubeQueryExecutorHelper.execute(CubeQueryExecutorHelper.java:301) org.eclipse.birt.data.engine.olap.query.view.QueryExecutor.populateRs(QueryExecutor.java:129) org.eclipse.birt.data.engine.olap.query.view.QueryExecutor.execute
data/org.eclipse.birt.data/src/org/eclipse/birt/data/engine/olap/data/impl/aggregation/sort/AggregationSortHelper.java
IDiskArray baseDiskArray = getDiskArrayFromAggregationResultSet( base );
		IDiskArray keyDiskArray = populateAggrDiskArray( base, sortKeys, filteredAggrResultSet );
		CompareUtil.sort( new WrapperedDiskArray( baseDiskArray, keyDiskArray ),
				new AggrResultRowComparator( populateNewSortKeys( base,
						sortKeys ) ),
				AggregationResultRow.getCreator( ) );
		return new AggregationResultSet( base.getAggregationDefinition( ),
				baseDiskArray,
				base.getKeyNames( ),
				base.getAggributeNames( ) );
	}
	/**
	 * Populate the aggregation disk array which is then used to combine with base disk array.
	 * @param base
	 * @param sortKeys
	 * @param filteredAggrResultSet
	 * @return
	 * @throws IOException
	 */
	private static IDiskArray populateAggrDiskArray(
			IAggregationResultSet base, SortKey[] sortKeys,
			AggregationResultRowNavigator[] filteredAggrResultSet )
			throws IOException
	{
		IDiskArray keyDiskArray = new BufferedStructureArray( AggregationResultRow.getCreator( ),
				4096 );
		for ( int i = 0; i < base.length( ); i++ )
		{
			base.seek( i );