/**************************************************************
 * 
 * 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_XArray_idl__ 
#define __com_sun_star_sdbc_XArray_idl__ 
 
#ifndef __com_sun_star_uno_XInterface_idl__ 
#include <com/sun/star/uno/XInterface.idl> 
#endif 
 
 module com {  module sun {  module star {  module container { 
 published interface XNameAccess; 
};};};}; 
 
#ifndef __com_sun_star_sdbc_SQLException_idl__ 
#include <com/sun/star/sdbc/SQLException.idl> 
#endif 
 
 module com {  module sun {  module star {  module sdbc { 
 
 published interface XResultSet; 
 
 
/** is used for mapping the SQL type 
	<member scope= "com::sun::star::sdbc">DataType::ARRAY</member>
	.
	By default, an 
	<code>Array</code>
	is a transaction duration
	reference to an SQL array. By default, an
	
	<code>Array</code>

	is implemented using a SQL LOCATOR(array) internally.
 */
published interface XArray: com::sun::star::uno::XInterface
{ 
  	 
	/** returns the SQL type name of the elements in
		the array designated by this 
		<code>Array</code>
		object.
		<p>
		If the elements are a built-in type, it returns
		the database-specific type name of the elements.
		If the elements are a user-defined type (UDT),
		this method returns the fully-qualified SQL type name.
		</p>
		@returns
			a String that is the database-specific name for a built-in base type or the fully-qualified SQL type name for a base type that is a UDT

		@throws SQLException 
			if a database access error occurs.
	 */
	string getBaseTypeName() raises (SQLException); 
 
  	//------------------------------------------------------------------------- 
  	 
	/** returns the SDBC type of the elements in the array designated
		by this 
		<code>Array</code>
		object.
		@returns
			a constant from the SDBC types that is the type code for the elements in the array designated by this Array object.
		@throws SQLException 
			if a database access error occurs.
	 */
	long getBaseType() raises (SQLException); 
 
	//------------------------------------------------------------------------- 
	 
	/** retrieves the contents of the SQL array designated by this 
		   	 <code>Array</code>
			 object, using the specified 
			 <code>typeMap</code>
			 for type map customizations. 
			 <p>
			 If the base type of the array does not match a user-defined type 
			 in
			 <code>typeMap</code>
			 , the standard mapping is used instead. 
		 
		     @param typeMap 
				is a map object that contains mappings of SQL type names to 
				services. If the
				<code>typeMap</code>
				is 
				<NULL/>
				, the type-map 
		   	 	associated with the connection for customizations of the type-mappings 
			 	is used. 
		 
			 @returns 
				an sequence that contains the ordered elements 
				of the SQL array designated by this object. 
		 
		     @throws SQLException 
				if an error occurs while attempting to access the array.
	 */
	sequence<any> getArray([in]com::sun::star::container::XNameAccess typeMap) 
		raises (SQLException); 
 
  	//------------------------------------------------------------------------- 
	 
	/** returns an array containing a slice of the SQL array, beginning with the 
		   	 specified 
			 <code>index</code>
			 and containing up to
			 <code>count</code>
		   	 successive elements of the SQL array. 
		 
			 @param index 
				is the array index of the first element to retrieve; 
		        the first element is at index 1. 
		   	 @param count 
				is the number of successive SQL array elements to retrieve. 
			 @param typeMap 
				is a map object that contains mappings of SQL type names to 
				services. If the
				<code>typeMap</code>
				is
				<NULL/>
				, the type-map 
		   	    associated with the connection for customizations of the type-mappings 
				is used. 
		     @returns 
				an array containing up to
				<code>count</code>
				consecutive elements 
		   		of the SQL array, beginning with element
				<code>index</code>
				.				 
		   	 @throws SQLException 
				if an error occurs while attempting to access the array.
	 */
	sequence<any> getArrayAtIndex([in]long index, 
								  [in]long count, 
								  [in]com::sun::star::container::XNameAccess 
								  									typeMap) 
			raises (SQLException); 
 
  	//------------------------------------------------------------------------- 
	 
	/** returns a result set that contains the elements of the array
		designated by this 
		<code>Array</code>
		object and uses the given
		<code>typeMap</code>
		to map the array elements.  If the base
		type of the array does not match a user-defined type in
		<code>typeMap</code>
		or the 
		<code>typeMap</code>
		is
		<NULL/>
		,
		the connection type mapping is used instead.
		
		
		<p>
		The result set contains one row for each array element, with
		two columns in each row.  The second column stores the element
		value; the first column stores the index into the array for
		that element (with the first array element being at index 1).
		The rows are in ascending order corresponding to
		the order of the indices.
		</p>

		@param	typeMap
			contains mapping of SQL user-defined types to classes in the UNO programming language
		@returns 
			a ResultSet object containing one row for each of the elements in the array designated by this Array object, 
			with the rows in ascending order based on the indices.
		@throws SQLException 
			if a database access error occurs.
	 */
	XResultSet getResultSet([in]com::sun::star::container::XNameAccess typeMap) 
		raises (SQLException); 
 
  	//------------------------------------------------------------------------- 
	 
	/** returns a result set holding the elements of the subarray that
		starts at index
		<code>index</code>
		and contains up to
		<code>count</code>
		successive elements. This method uses the given
		<code>typeMap</code>
		to map the array elements. If the base
		type of the array does not match a user-defined type in
		<code>typeMap</code>
		or the 
		<code>typeMap</code>
		is
		<NULL/>
		,
		the connection type mapping is used instead.
		
		
		<p>
		The result set contains one row for each array element, with
		two columns in each row.  The second column stores the element
		value; the first column stores the index into the array for
		that element (with the first array element being at index 1).
		The rows are in ascending order corresponding to
		the order of the indices.
		</p>
		@param index
			the array index of the first element to retrieve; the first element is at index 1.
		@param count
			the number of successive SQL array elements to retrieve,
		@param typeMap
			the Map object that contains the mapping of SQL type names to classes in the UNO programming language.
		@returns
			a ResultSet object containing up to count consecutive elements of the SQL array 
			designated by this Array object, starting at index index.
		@throws SQLException 
			if a database access error occurs.
	 */
	XResultSet getResultSetAtIndex([in]long index, 
								   [in]long count, 
								   [in]com::sun::star::container::XNameAccess typeMap) 
		raises (SQLException); 
}; 
 
//============================================================================= 
 
}; }; }; }; 
 
/*=========================================================================== 
===========================================================================*/ 
#endif 
