/*************************************************************************
 *
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 * 
 * Copyright 2000, 2010 Oracle and/or its affiliates.
 *
 * OpenOffice.org - a multi-platform office productivity suite
 *
 * This file is part of OpenOffice.org.
 *
 * OpenOffice.org is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 3
 * only, as published by the Free Software Foundation.
 *
 * OpenOffice.org is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License version 3 for more details
 * (a copy is included in the LICENSE file that accompanied this code).
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with OpenOffice.org.  If not, see
 * <http://www.openoffice.org/license.html>
 * for a copy of the LGPLv3 License.
 *
 ************************************************************************/
#ifndef __com_sun_star_sdbc_XConnection_idl__ 
#define __com_sun_star_sdbc_XConnection_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 
 
#ifndef __com_sun_star_sdbc_XCloseable_idl__ 
#include <com/sun/star/sdbc/XCloseable.idl> 
#endif 
 
 module com {  module sun {  module star {  module sdbc { 
 
 published interface XStatement; 
 published interface XPreparedStatement; 
 published interface XDatabaseMetaData; 
 
 
/** represents a connection (session) with a specific
    database. Within the context of a Connection, SQL statements are
    executed and results are returned.
    
    
    <p>
    A Connection's database is able to provide information
    describing its tables, its supported SQL grammar, its stored
    procedures, and the capabilities of this connection. This
    information is obtained with the 
    <member scope="com::sun::star::sdbc">XDatabaseMetaData::getMetaData()</member>
    method.
    
    </p>
    @see com::sun::star::sdbc::XDriverManager 
    @see com::sun::star::sdbc::XStatement 
    @see com::sun::star::sdbc::XDatabaseMetaData
 */
published interface XConnection: com::sun::star::sdbc::XCloseable
{ 
     
    /** creates a new 
        <type scope="com::sun::star::sdbc">Statement</type>
        object for sending SQL statements to the database.
        
        
        <p>
        SQL statements without parameters are normally
        executed using Statement objects. If the same SQL statement
        is executed many times, it is more efficient to use a
        <type scope="com::sun::star::sdbc">PreparedStatement</type>
        .
        </p>
        <p>
        Result sets created using the returned Statement will have
        forward-only type, and read-only concurrency, by default.
        </p>
        <p>
        Escape processing for the SQL-Statement is enabled, by default.
        </p>

        @returns
            a new Statement object
        @throws SQLException 
            if a database access error occurs.
     */
    XStatement createStatement() raises (SQLException); 
    //------------------------------------------------------------------------- 
     
    /** creates a 
        <type scope="com::sun::star::sdbc">PreparedStatement</type>
        object for sending parameterized SQL statements to the database.
        
        
        <p>
        A SQL statement with or without IN parameters can be
        pre-compiled and stored in a PreparedStatement object. This
        object can then be used to efficiently execute this statement
        multiple times.
        
        </p>
        <p>
        <b>
        Note:
        </b>
        This method is optimized for handling
        parametric SQL statements that benefit from precompilation. If
        the driver supports precompilation,
        the method 
        <code>prepareStatement</code>
        will send
        the statement to the database for precompilation. Some drivers
        may not support precompilation. In this case, the statement may
        not be sent to the database until the 
        <type scope="com::sun::star::sdbc">PreparedStatement</type>
        is executed.  This has no direct effect on users; however, it does
        affect which method throws certain SQLExceptions.
        </p>
        <p>
        Result sets created using the returned PreparedStatement will have
        forward-only type and read-only concurrency, by default.
        </p>
        <p>
        Escape processing for the SQL-Statement is enabled, by default.
        </p>

        @param sql
            a SQL statement that may contain one or more "?" IN parameter placeholders
        @returns
            a new PreparedStatement object containing the pre-compiled statement
        @throws SQLException 
            if a database access error occurs.
     */
    XPreparedStatement prepareStatement([in]string sql) raises (SQLException); 
    //------------------------------------------------------------------------- 
     
    /** creates a 
        <type scope="com::sun::star::sdbc">CallableStatement</type>
        object for calling
        database stored procedures.
        
        
        <p>
        The CallableStatement provides methods for setting up its IN and OUT
        parameters, and methods for executing the call to a stored procedure.
        </p>
        <p>
        <b>
        Note:
        </b>
        This method is optimized for handling stored
        procedure call statements. Some drivers may send the call
        statement to the database when the method 
        <code>prepareCall</code>
        is done;
        <br/>
        others may wait until the CallableStatement is executed. This has no
        direct effect on users; however, it does affect which method
        throws certain SQLExceptions.
        Result sets created using the returned CallableStatement will have
        forward-only type and read-only concurrency, by default.
        </p>

        @param sql
            a SQL statement that may contain one or more "?" IN parameter placeholders
        @returns
            a new PreparedStatement object containing the pre-compiled statement
        @throws SQLException 
            if a database access error occurs.
     */
    XPreparedStatement prepareCall([in]string sql) raises (SQLException); 
    //------------------------------------------------------------------------- 
     
    /** converts the given SQL statement into the system's native SQL grammar.
        A driver may convert the JDBC SQL grammar into its system's
        native SQL grammar prior to sending it; this method returns the
        native form of the statement that the driver would have sent.

        @param sql
            a SQL statement that may contain one or more "?" parameter placeholders
        @returns
            the native form of this statement
        @throws SQLException 
            if a database access error occurs.
     */
    string nativeSQL([in]string sql) raises (SQLException); 
    //------------------------------------------------------------------------- 
     
    /** sets this connection's auto-commit mode.
        
        
        <p>
        If a connection is in auto-commit mode, then all its SQL
        statements will be executed and committed as individual
        transactions. Otherwise, its SQL statements are grouped into
        transactions that are terminated by a call to either
        the method 
        <member scope="com::sun::star::sdbc">XConnection::commit()</member>
        or the method 
        <member scope="com::sun::star::sdbc">XConnection::rollback()</member>
        .
        By default, new connections are in auto-commit mode.
        </p>
        <p>
        The commit occurs when the statement completes or the next
        execute occurs, whichever comes first. In the case of
        statements returning a ResultSet, the statement completes when
        the last row of the ResultSet has been retrieved or the
        ResultSet has been closed. In advanced cases, a single
        statement may return multiple results as well as output
        parameter values. In these cases the commit occurs when all results and
        output parameter values have been retrieved.
        </p>

        @param autoCommit
            <TRUE/> enables auto-commit; <FALSE/> disables auto-commit.
        @throws SQLException 
            if a database access error occurs.
     */
    void setAutoCommit([in] boolean autoCommit) raises (SQLException); 
    //------------------------------------------------------------------------- 
     
    /** gets the current auto-commit state.

        @returns
            the current state of auto-commit mode.
        @throws SQLException 
            if a database access error occurs.

        @see setAutoCommit
     */
    boolean getAutoCommit() raises (SQLException); 
    //------------------------------------------------------------------------- 
     
    /** makes all changes made since the previous commit/rollback
        permanent and releases any database locks currently held
        by the Connection. This method should be
        used only when auto-commit mode has been disabled.

        @throws SQLException 
            if a database access error occurs.

        @see setAutoCommit
     */
    void commit() raises (SQLException); 
    //------------------------------------------------------------------------- 
     
    /** drops all changes made since the previous
        commit/rollback and releases any database locks currently held
        by this Connection. This method should be used only when auto-commit has been disabled.
        
        @throws SQLException 
            if a database access error occurs.

        @see setAutoCommit
     */
    void rollback() raises (SQLException); 
    //------------------------------------------------------------------------- 
     
    /** tests to see if a connection is closed.
        
        
        <p>
        <b>
        Note:
        </b>
        A Connection is automatically closed if no one references it
        anymore. Certain fatal errors also result in a closed Connection.
        </p>

        @returns
            <TRUE/> if the connection is closed; <FALSE/> if it's still open.
        @throws SQLException 
            if a database access error occurs.
     */
    boolean isClosed() raises (SQLException); 
    //------------------------------------------------------------------------- 
     
    /** gets the metadata regarding this connection's database.
        
        
        <p>
        A Connection's database is able to provide information
        describing its tables, its supported SQL grammar, its stored
        procedures, the capabilities of this connection, and so on. This
        information is made available through a DatabaseMetaData
        object.
        </p>

        @returns
            a DatabaseMetaData object for this Connection.
        @throws SQLException 
            if a database access error occurs.
     */
    XDatabaseMetaData getMetaData() raises (SQLException); 
    //------------------------------------------------------------------------- 
     
    /** puts this connection in read-only mode as a hint to enable
        database optimizations.
        
        
        <p>
        <b>
        Note:
        </b>
        This method cannot be called while in the
        middle of a transaction. Calling setReadOnly with
        <TRUE/>
        does not
        necessarily cause writes to be prohibited.
        </p>

        @param readONly
            <TRUE/> enables read-only mode; <FALSE/> disables read-only mode.
        @throws SQLException 
            if a database access error occurs.
     */
    void setReadOnly([in]boolean readOnly) raises (SQLException); 
    //------------------------------------------------------------------------- 
     
    /** tests to see if the connection is in read-only mode.
        @returns
            <TRUE/> if connection is read-only and <FALSE/> otherwise.
        @throws SQLException 
            if a database access error occurs.
     */
    boolean isReadOnly() raises (SQLException); 
    //------------------------------------------------------------------------- 
     
    /** sets a catalog name in order to select
        a subspace of this Connection's database in which to work.
        If the driver does not support catalogs, it will
        silently ignore this request.
        @param catalog
            the name of the catalog.
        @throws SQLException 
            if a database access error occurs.
     */
    void setCatalog([in]string catalog) raises (SQLException); 
    //------------------------------------------------------------------------- 
     
    /** returns the Connection's current catalog name.
        @returns
            the current catalog name or an empty string.
        @throws SQLException 
            if a database access error occurs.
     */
    string getCatalog() raises (SQLException); 
    //------------------------------------------------------------------------- 
     
    /** attempts to change the transaction isolation level to the one given.
        
        
        <p>
        The constants defined in
        <type scope="com::sun::star::sdbc">TransactionIsolation</type>
        are the possible transaction isolation levels.
        </p>
        <p>
        <b>
        Note:
        </b>
        This method cannot be called while
        in the middle of a transaction.
        </p>
        @param level
            one of the TransactionIsolation values with the exception of NONE; some databases may not support other values.
        @throws SQLException 
            if a database access error occurs.

        @see com::sun::star::sdbc::XDatabaseMetaData::supportsTransactionIsolationLevel()
     */
    void setTransactionIsolation([in]long level) raises (SQLException); 
    //------------------------------------------------------------------------- 
     
    /** gets this Connection's current transaction isolation level.
        @returns
            the current TransactionIsolation mode value.
        @throws SQLException 
            if a database access error occurs.
     */
    long getTransactionIsolation() raises (SQLException); 
    //------------------------------------------------------------------------- 
     
    /** gets the type map object associated with this connection. Only drivers
        which implement the custom type mapping facility will return an object otherwise
        NULL could be returned.
        
        <p>
        Unless the application has added an entry to the type map, the map
        returned will be empty.
        </p>
        @returns
            the XNameAccess object associated with this Connection object.

        @throws SQLException 
            if a database access error occurs.
     */
    com::sun::star::container::XNameAccess getTypeMap() raises (SQLException); 
    //------------------------------------------------------------------------- 
     
    /** installs the given type map as the type map for this connection.
        The type map will be used for the custom mapping of SQL structured types
        and distinct types.
        
        
        <p>
        Only if the driver supports custom type mapping is the setting of a map allowed.
        </p>

        @param typeMap
            set the XNameAccess object associated with this Connection object.
        @throws SQLException 
            if a database access error occurs.
     */
    void setTypeMap([in]com::sun::star::container::XNameAccess typeMap) 
        raises (SQLException); 
}; 
 
//============================================================================= 
 
}; }; }; }; 
 
/*=========================================================================== 
===========================================================================*/ 
#endif 
