/*
 * Firebird Open Source J2ee connector - jdbc driver, public Firebird-specific 
 * JDBC extensions.
 *
 * Redistribution and use in source and binary forms, with or without 
 * modification, are permitted provided that the following conditions are met:
 *    1. Redistributions of source code must retain the above copyright notice, 
 *       this list of conditions and the following disclaimer.
 *    2. Redistributions in binary form must reproduce the above copyright 
 *       notice, this list of conditions and the following disclaimer in the 
 *       documentation and/or other materials provided with the distribution. 
 *    3. The name of the author may not be used to endorse or promote products 
 *       derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 
 * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package org.firebirdsql.jdbc;

import java.sql.Driver;
import java.sql.SQLException;

/**
 * Extension of the {@link java.sql.Driver} providing methods to set the 
 * connection properties programmatically.
 */
public interface FirebirdDriver extends Driver {

    /**
     * Create new instance of {@link FirebirdConnectionProperties} that can 
     * later be used in {@link #connect(FirebirdConnectionProperties)} call.
     * 
     * @return instance of {@link FirebirdConnectionProperties}.
     */
    FirebirdConnectionProperties newConnectionProperties();
    
    /**
     * Connect to the specified database using the specified connection 
     * properties.
     * 
     * @param properties instance of {@link FirebirdConnectionProperties} 
     * created in {@link #newConnectionProperties()} method.
     * 
     * @return new connection to the Firebird database.
     * 
     * @throws SQLException if an error happened while connecting to the 
     * database.
     */
    FirebirdConnection connect(FirebirdConnectionProperties properties) 
        throws SQLException;
}
