/*******************************************************************************
 * Copyright 2015 Francesco Cina'
 *
 * Licensed 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.
 ******************************************************************************/
package com.jporm.rx.connection;

import com.jporm.commons.core.inject.ServiceCatalog;
import com.jporm.commons.core.query.SqlFactory;
import com.jporm.commons.core.query.cache.SqlCache;
import com.jporm.sql.dialect.DBProfile;

public interface RxTranscationProvider {

    /**
     * Returns a connection that can be used to perform SQL operations on. It's
     * important to remember to close the connection when you are done, so it is
     * returned to the pool.
     *
     * @param handler
     *            the handler which is called when the
     *            <code>JdbcConnection</code> object is ready for use.
     */
    RxTransaction getTransaction(ServiceCatalog serviceCatalog, SqlCache sqlCache, SqlFactory sqlFactory);

    /**
     * Return the DB type of the underlying database
     *
     * @return
     */
    DBProfile getDBProfile();

    RxConnectionProvider<? extends RxConnection> getConnectionProvider();

}
