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/AggrSortHelper.java
DimLevel[] levelNames = ( (AggrSortDefinition) aggrSorts.get( 0 ) ).getAxisQualifierLevel( );
				int[] levelIndex = new int[levelNames.length];
				for ( int k = 0; k < levelIndex.length; k++ )
				{
					levelIndex[k] = matchedResultSet.getLevelIndex( levelNames[k] );
				}
				qualifiers[n] = new AxisQualifier( levelIndex,
						( (AggrSortDefinition) aggrSorts.get( 0 ) ).getAxisQualifierValue( ) );
				int[] aggrIndex = new int[aggrSorts.size( )];
				boolean[] aggrDir = new boolean[aggrSorts.size( )];
				for ( int i = 0; i < aggrSorts.size( ); i++ )
				{
					AggrSortDefinition sort = (AggrSortDefinition) aggrSorts.get( i );
					aggrIndex[i] = matchedResultSet.getAggregationIndex( sort.getAggrName( ) );
					aggrDir[i] = sort.getDirection( );
				}
				int targetLevelOffset = 0;
				if ( qualifiers[n].getLevelIndex( ).length > 0 )
				{
					if ( qualifiers[n].getLevelIndex( )[0] == 0 )
						targetLevelOffset = qualifiers[n].getLevelIndex( ).length;
				}
				sortKeys[n] = new SortKey( aggrIndex,
						aggrDir,
						matchedResultSet.getLevelIndex( targetLevelName ),
						targetLevelOffset,
						matchedResultSet );
			}
			IAggregationResultSet base = null;
			for ( int i = 0; i < resultSet.length; i++ )