Bug 176114 row._rownum implementation issues
This Bugzilla seeks to clarify the usage of the "row.__rownum" binding, and to track its correct implementation in BIRT Data engine. We shall define the "__rownum" binding to mean: the 0-based index of the current data row in the final result set available to a listing report item. "Final" result set means the result set after all applicable filter and sort conditions are applied. This definition implies: (1) "row.__rownum" is not available to expressions used to define a filter or sort condition. Since filtering and sorting affects the row indexes, they cannot make forward reference to the final row index. This restriction applies to all filters and sorts, including those defined on groups. (2) Group key expression can use "row.__rownum", since grouping does not change the row ordering or ID. In fact one of the common usage of the row.__rownum binding is to create row number based interval grouping (e.g., put every 20 rows in a group). BIRT should report a sensible error message if row.__rownum is found to be used in sorting or filtering. Where a row number based sort/filter is desired, the report designer is encouraged to use the Total.runningCount aggregation.
data/org.eclipse.birt.data/src/org/eclipse/birt/data/engine/i18n/ResourceConstants.java
public final static String RD_INVALID_ARCHIVE = "data.engine.InvalidArchive";
	public final static String RD_SAVE_ERROR = "data.engine.SaveReportDocumentError";
	public final static String RD_LOAD_ERROR = "data.engine.LoadReportDocumentError";
	public final static String RD_SAVE_STREAM_ERROR = "data.engine.GetSaveStreamError";
	public final static String RD_LOAD_STREAM_ERROR = "data.engine.GetLoadStreamError";
	public final static String RD_EXPR_NULL_ERROR = "data.engine.NullExpr";
	public final static String RD_EXPR_INVALID_ERROR = "data.engine.InValidExpr";
	public final static String RD_EXPR_RESULT_SET_NOT_START = "data.engine.ResultSetNotStart";
	
	public final static String INVALID_ROW_INDEX = "data.engine.invalidRowIndex";
	public final static String BACKWARD_SEEK_ERROR = "data.engine.backwardSeekError";
	public final static String START_ERROR = "data.engine.startError";
	
	
	public final static String RD_INVALID_FILTER = "data.engine.rd.errorfilters";
	
	
	public final static String SCRIPT_EVAL_ERROR = "data.engine.ScriptEvalError";
	public final static String PREPARED_QUERY_CLOSED = "data.engine.PreparedQueryClosed";	
	public final static String DEFAULT_INPUT_PARAMETER_VALUE_CANNOT_BE_NULL = "data.engine.NullDefaultInParamValue";
	public final static String INVALID_GROUP_EXPR = "data.engine.BadGroupKeyExpr";
	public final static String GROUP_NOT_EXIST = "data.engine.GroupNotExist";
	public final static String INVALID_SORT_EXPR = "data.engine.BadSortKeyExpr";
	public final static String PARAMETER_METADATA_NOT_SUPPORTED = "data.engine.NoParamMetaForDataSource";
	public final static String UNEXPECTED_ERROR = "data.engine.UnexpectedError";
	public final static String CANNOT_CONVERT_PARAMETER_TYPE = "data.engine.ConvertDataTypeError";
	public static final String CANNOT_INSTANTIATE_AGGREGATION_FACTORY = "data.engine.CannotInstantiateAggregationFactory";
	public static final String DUPLICATE_AGGREGATION_NAME = "date.engine.DuplicateAggregationName";
	public static final String INCORRECT_GROUP_KEY_VALUES = "data.engine.incorrectGroupKeyValues";
	public static final String NO_EXPRESSION_PROCESSOR_AVAILABLE = "data.engine.NoExpressionProcessorAvailable";