/**************************************************************
 * 
 * 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_TransactionIsolation_idl__ 
#define __com_sun_star_sdbc_TransactionIsolation_idl__ 
 
 module com {  module sun {  module star {  module sdbc { 
 
 
/** distinguishes different possible transaction isolation levels.
 */
published constants TransactionIsolation
{ 
	 
	/** indicates that transactions are not supported.
	 */
	const long NONE					=  0; 
	 
	/** Dirty reads, non-repeatable reads and phantom reads can occur. 
		     This level allows a row changed by one transaction to be read 
		     by another transaction before any changes in that row have been 
		     committed (a "dirty read").  If any of the changes are rolled back, 
		     the second transaction will have retrieved an invalid row.
	 */
	const long READ_UNCOMMITTED 	=  1; 
	 
	/** Dirty reads are prevented; non-repeatable reads and phantom 
		     reads can occur.  This level only prohibits a transaction 
		     from reading a row with uncommitted changes in it.
	 */
	const long READ_COMMITTED		=  2; 
	 
	/** Dirty reads and non-repeatable reads are prevented; phantom 
		     reads can occur.  This level prohibits a transaction from 
		     reading a row with uncommitted changes in it, and it also 
		     prohibits the situation where one transaction reads a row, 
		     a second transaction alters the row, and the first transaction 
		     rereads the row, getting different values the second time 
		     (a "non-repeatable read").
	 */
	const long REPEATABLE_READ 		=  4; 
	 
	/** Dirty reads, non-repeatable reads and phantom reads are prevented. 
		     This level includes the prohibitions in 
		     <code>REPEATABLE_READ</code>
			 and further prohibits the 
		     situation where one transaction reads all rows that satisfy 
		     a WHERE condition, a second transaction inserts a row that 
		     satisfies that WHERE condition, and the first transaction 
		     rereads for the same condition, retrieving the additional 
		     "phantom" row in the second read.
	 */
	const long SERIALIZABLE 		=  8; 
}; 
 
//============================================================================= 
 
}; }; }; }; 
 
/*=========================================================================== 
===========================================================================*/ 
#endif 
