/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/


#ifndef __com_sun_star_sdbc_XRowSet_idl__ 
#define __com_sun_star_sdbc_XRowSet_idl__ 
 
#ifndef __com_sun_star_sdbc_XResultSet_idl__ 
#include <com/sun/star/sdbc/XResultSet.idl> 
#endif 
 
 module com {  module sun {  module star {  module sdbc { 
 
 published interface XRowSetListener; 
 published interface XConnection; 
 
 
/** enhances the functionality of a result set. It allows implementation of 
	a special behavior for a result set and notifies an application on
	certain row set events such as a change in its value.
	
	
	
	<p>
	The XRowSet interface is unique in that it is intended to be
	a software layer on top of an SDBC driver. Implementations of the
	RowSet interface can be provided by anyone.
	</p>
 */
published interface XRowSet: XResultSet
{ 
	//------------------------------------------------------------------------- 
	 
	/** populates a row set with data. The description of the data source and
		other important information for filling the row set with data.

		@throws SQLException 
			if a database access error occurs.
	 */
	void execute() raises (SQLException); 
	//------------------------------------------------------------------------- 
	 
	/** adds the specified listener to receive the events "cursorMoved",
		"rowChanged", and "rowSetChanged".
		@param listener
			the listener which should be registered
	 */
	[oneway] void addRowSetListener([in]XRowSetListener listener ); 
	//------------------------------------------------------------------------- 
	 
	/** removes the specified listener.
		@param listener
			the listener which should be registered
	 */
	[oneway] void removeRowSetListener([in]XRowSetListener listener ); 
}; 
 
//============================================================================= 
 
}; }; }; }; 
 
/*=========================================================================== 
===========================================================================*/ 
#endif 
