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 DUP_CUSTOM_FIELD_NAME = "data.engine.DupCustomFieldName";
	public final static String NO_RESULT_SET = "data.engine.NoResultSet";
	public final static String METADATA_NOT_AVAILABLE = "data.engine.NoResultMetadata";
	public final static String QUERY_HAS_PREPARED = "data.engine.QueryAlreadyPrepared";
	public final static String QUERY_HAS_NOT_PREPARED = "data.engine.QueryNotPrepared";
	public final static String INAVLID_FIELD_NAME = "data.engine.InvalidFieldName";
	public final static String DUPLICATE_COLUMN_NAME = "data.engine.DupColumnName";
	public final static String DUPLICATE_ALIAS_NAME = "data.engine.DupAlias";
	public final static String INVALID_FIELD_INDEX = "data.engine.InvalidFieldIndex";
	
	public final static String MATCH_ERROR = "data.engine.MatchError";
	public final static String UNSUPPORTED_DATA_TYPE = "data.engine.BadOperandType";
	
	public final static String BAD_PARAM_COUNT = "data.engine.BadParameterCount";
	public final static String BAD_PARAM_TYPE = "data.engine.BadParameterType";
	public final static String NO_SOLUTION_FOUND = "data.engine.NoIrrSolution";
	public final static String EXPECT_BOOLEAN_RETURN_TYPE = "data.engine.BadFetchScriptReturnType";
	public final static String BAD_INTERVAL_UNIT = "data.engine.BadIntervalUnit";
	public final static String INVALID_FIELD_NAME = "data.engine.InvalidFieldName";
	public final static String BAD_GROUP_KEY_TYPE = "data.engine.BadGroupKeyType";
	public final static String BAD_GROUP_INTERVAL_TYPE = "data.engine.group.interval";
	public final static String BAD_GROUP_INTERVAL_TYPE_ROWID = "data.engine.group.interval.Rowid";
	public final static String BAD_GROUP_INTERVAL_INVALID = "data.engine.group.interval.invalid";
	public final static String UNSUPPORTED_FILTER_ON_GROUP="data.engine.NoSupportFilterOnGroup";
	public final static String INVALID_TOP_BOTTOM_ARGUMENT="data.engine.InvalidTopBottomArgument";
	public final static String INVALID_TOP_BOTTOM_N_ARGUMENT="data.engine.InvalidTopBottomNArgument";
	public final static String INVALID_TOP_BOTTOM_PERCENT_ARGUMENT="data.engine.InvalidTopBottomPercentArgument";
	public final static String INVALID_TOP_BOTTOM_N="data.engine.InvalidTopBottomN";
	public final static String INVALID_PERCENTILE_ARGUMENT="data.engine.InvalidPercentileArgument";
	public final static String INVALID_QUARTILE_ARGUMENT="data.engine.InvalidQuartileArgument";