cachedTempRows = new HashMap(); cachedRootRows = new ArrayList(); cachedOrderedTempRowRoots = new ArrayList();
	public SaxParserConsumer( ResultSet rs, RelationInformation rinfo, XMLDataInputStream is, String tName) throws OdaException	{		this.resultSet = rs;		                                 		//must start from 0		cachedResultSetRowNo = 0;				//must start from -1		currentAvailableMaxLineNo = -1;		tableName = tName;		relationInfo = rinfo;		nestedColumnUtil = new NestedColumnUtil( relationInfo, tableName, true);				//must start from 0		currentRowNo = 0;		cachedResultSet = new String[Constants.CACHED_RESULT_SET_LENGTH][resultSet.getMetaData().getColumnCount( )];		this.rootPath = relationInfo.getTableRootPath( tableName );				this.namesOfCachedComplexNestedColumns = relationInfo.getTableComplexNestedXMLColumnNames( tableName );		this.namesOfCachedSimpleNestedColumns = relationInfo.getTableSimpleNestedXMLColumnNames( tableName );				this.namesOfColumns = relationInfo.getTableColumnNames( tableName );				XMLDataInputStream xdis = is;				if( namesOfCachedComplexNestedColumns.length > 0)		{			spNestedQueryHelper = new SaxParserComplexNestedQueryHelper(rinfo, xdis, tName);			while ( !spNestedQueryHelper.isPrepared( ) )			{				try				{					synchronized ( this )					{						wait( 1000 );					}				}				catch ( InterruptedException e )				{					throw new OdaException( e.getLocalizedMessage() );				}			}		}		sp = new SaxParser( xdis , this );		spThread = new Thread( sp );		spThread.start();	}