// Path: plume-db-querydsl/src/main/java/com/coreoz/plume/db/querydsl/transaction/TransactionManagerQuerydsl.java
// @Singleton
// public class TransactionManagerQuerydsl extends TransactionManager {
// 
// 	private final Configuration querydslConfiguration;
// 
// 	@Inject
// 	public TransactionManagerQuerydsl(Config config) {
// 		this(config, "db");
// 	}
// 
// 	public TransactionManagerQuerydsl(Config config, String prefix) {
// 		super(config, prefix);
// 
// 		String dialect = config.getString(prefix + ".dialect");
// 		this.querydslConfiguration = new Configuration(QuerydslTemplates.valueOf(dialect).sqlTemplates());
// 	}
// 
// 	public TransactionManagerQuerydsl(DataSource dataSource, Configuration querydslConfiguration) {
// 		super(dataSource);
// 
// 		this.querydslConfiguration = querydslConfiguration;
// 	}
// 
// 	// API
// 
// 	public <Q> SQLQuery<Q> selectQuery() {
// 		SQLQuery<Q> query = new SQLQuery<>(getConnectionProvider(), querydslConfiguration);
// 		query.addListener(SQLCloseListener.DEFAULT);
// 		return query;
// 	}
// 
// 	public <Q> SQLQuery<Q> selectQuery(Connection connection) {
// 		return new SQLQuery<>(connection, querydslConfiguration);
// 	}
// 
// 	public SQLDeleteClause delete(RelationalPath<?> path) {
// 		return autoCloseQuery(new SQLDeleteClause(getConnectionProvider(), querydslConfiguration, path));
// 	}
// 
// 	public SQLDeleteClause delete(RelationalPath<?> path, Connection connection) {
// 		return new SQLDeleteClause(connection, querydslConfiguration, path);
// 	}
// 
// 	public SQLInsertClause insert(RelationalPath<?> path) {
// 		return autoCloseQuery(new SQLInsertClause(getConnectionProvider(), querydslConfiguration, path));
// 	}
// 
// 	public SQLInsertClause insert(RelationalPath<?> path, Connection connection) {
// 		return new SQLInsertClause(connection, querydslConfiguration, path);
// 	}
// 
// 	public SQLUpdateClause update(RelationalPath<?> path) {
// 		return autoCloseQuery(new SQLUpdateClause(getConnectionProvider(), querydslConfiguration, path));
// 	}
// 
// 	public SQLUpdateClause update(RelationalPath<?> path, Connection connection) {
// 		return new SQLUpdateClause(connection, querydslConfiguration, path);
// 	}
// 
// 	// internal
// 
// 	private <T extends AbstractSQLClause<?>> T autoCloseQuery(T query) {
// 		query.addListener(SQLCloseListener.DEFAULT);
// 		return query;
// 	}
// 
// 	private Supplier<Connection> getConnectionProvider() {
// 		return () -> {
// 			try {
// 				return dataSource().getConnection();
// 			} catch (SQLException e) {
// 				throw new RuntimeException(e);
// 			}
// 		};
// 	}
// 
// }
// 
// Path: plume-db/src/main/java/com/coreoz/plume/db/transaction/TransactionManager.java
// @Singleton
// public class TransactionManager {
// 
// 	private final DataSource dataSource;
// 
// 	@Inject
// 	public TransactionManager(Config config) {
// 		this(config, "db");
// 	}
// 
// 	public TransactionManager(Config config, String prefix) {
// 		this(HikariDataSources.fromConfig(config, prefix + ".hikari"));
// 	}
// 
// 	public TransactionManager(DataSource dataSource) {
// 		this.dataSource = dataSource;
// 	}
// 
// 	// API
// 
// 	public DataSource dataSource() {
// 		return dataSource;
// 	}
// 
// 	public <T> T executeAndReturn(Function<Connection, T> toExecuteOnDb) {
// 		Connection connection = null;
// 		Boolean initialAutoCommit = null;
// 		try {
// 			connection = dataSource.getConnection();
// 			initialAutoCommit = connection.getAutoCommit();
// 			connection.setAutoCommit(false);
// 			T result = toExecuteOnDb.apply(connection);
// 			connection.commit();
// 			return result;
// 		} catch(Throwable e) {
// 			try {
// 				if(connection != null) {
// 					connection.rollback();
// 				}
// 			} catch (Throwable e2) {
// 				// never mind if the connection cannot be rolled back
// 			}
// 			Throwables.throwIfUnchecked(e);
// 			throw new RuntimeException(e);
// 		} finally {
// 			if(connection != null) {
// 				try {
// 					if(initialAutoCommit != null) {
// 						connection.setAutoCommit(initialAutoCommit);
// 					}
// 					connection.close();
// 				} catch (SQLException e) {
// 					// never mind if the connection cannot be closed
// 				}
// 			}
// 		}
// 	}
// 
// 	public void execute(Consumer<Connection> toExecuteOnDb) {
// 		executeAndReturn(connection -> {
// 			toExecuteOnDb.accept(connection);
// 			return null;
// 		});
// 	}
// 
// }


import com.coreoz.plume.db.querydsl.transaction.TransactionManagerQuerydsl;
import com.coreoz.plume.db.transaction.TransactionManager;
import com.google.inject.AbstractModule;
package com.coreoz.plume.db.querydsl.guice;


public class GuiceQuerydslModule extends AbstractModule {

	@Override
	protected void configure() {
// Path: plume-db-querydsl/src/main/java/com/coreoz/plume/db/querydsl/transaction/TransactionManagerQuerydsl.java
// @Singleton
// public class TransactionManagerQuerydsl extends TransactionManager {
// 
// 	private final Configuration querydslConfiguration;
// 
// 	@Inject
// 	public TransactionManagerQuerydsl(Config config) {
// 		this(config, "db");
// 	}
// 
// 	public TransactionManagerQuerydsl(Config config, String prefix) {
// 		super(config, prefix);
// 
// 		String dialect = config.getString(prefix + ".dialect");
// 		this.querydslConfiguration = new Configuration(QuerydslTemplates.valueOf(dialect).sqlTemplates());
// 	}
// 
// 	public TransactionManagerQuerydsl(DataSource dataSource, Configuration querydslConfiguration) {
// 		super(dataSource);
// 
// 		this.querydslConfiguration = querydslConfiguration;
// 	}
// 
// 	// API
// 
// 	public <Q> SQLQuery<Q> selectQuery() {
// 		SQLQuery<Q> query = new SQLQuery<>(getConnectionProvider(), querydslConfiguration);
// 		query.addListener(SQLCloseListener.DEFAULT);
// 		return query;
// 	}
// 
// 	public <Q> SQLQuery<Q> selectQuery(Connection connection) {
// 		return new SQLQuery<>(connection, querydslConfiguration);
// 	}
// 
// 	public SQLDeleteClause delete(RelationalPath<?> path) {
// 		return autoCloseQuery(new SQLDeleteClause(getConnectionProvider(), querydslConfiguration, path));
// 	}
// 
// 	public SQLDeleteClause delete(RelationalPath<?> path, Connection connection) {
// 		return new SQLDeleteClause(connection, querydslConfiguration, path);
// 	}
// 
// 	public SQLInsertClause insert(RelationalPath<?> path) {
// 		return autoCloseQuery(new SQLInsertClause(getConnectionProvider(), querydslConfiguration, path));
// 	}
// 
// 	public SQLInsertClause insert(RelationalPath<?> path, Connection connection) {
// 		return new SQLInsertClause(connection, querydslConfiguration, path);
// 	}
// 
// 	public SQLUpdateClause update(RelationalPath<?> path) {
// 		return autoCloseQuery(new SQLUpdateClause(getConnectionProvider(), querydslConfiguration, path));
// 	}
// 
// 	public SQLUpdateClause update(RelationalPath<?> path, Connection connection) {
// 		return new SQLUpdateClause(connection, querydslConfiguration, path);
// 	}
// 
// 	// internal
// 
// 	private <T extends AbstractSQLClause<?>> T autoCloseQuery(T query) {
// 		query.addListener(SQLCloseListener.DEFAULT);
// 		return query;
// 	}
// 
// 	private Supplier<Connection> getConnectionProvider() {
// 		return () -> {
// 			try {
// 				return dataSource().getConnection();
// 			} catch (SQLException e) {
// 				throw new RuntimeException(e);
// 			}
// 		};
// 	}
// 
// }
// 
// Path: plume-db/src/main/java/com/coreoz/plume/db/transaction/TransactionManager.java
// @Singleton
// public class TransactionManager {
// 
// 	private final DataSource dataSource;
// 
// 	@Inject
// 	public TransactionManager(Config config) {
// 		this(config, "db");
// 	}
// 
// 	public TransactionManager(Config config, String prefix) {
// 		this(HikariDataSources.fromConfig(config, prefix + ".hikari"));
// 	}
// 
// 	public TransactionManager(DataSource dataSource) {
// 		this.dataSource = dataSource;
// 	}
// 
// 	// API
// 
// 	public DataSource dataSource() {
// 		return dataSource;
// 	}
// 
// 	public <T> T executeAndReturn(Function<Connection, T> toExecuteOnDb) {
// 		Connection connection = null;
// 		Boolean initialAutoCommit = null;
// 		try {
// 			connection = dataSource.getConnection();
// 			initialAutoCommit = connection.getAutoCommit();
// 			connection.setAutoCommit(false);
// 			T result = toExecuteOnDb.apply(connection);
// 			connection.commit();
// 			return result;
// 		} catch(Throwable e) {
// 			try {
// 				if(connection != null) {
// 					connection.rollback();
// 				}
// 			} catch (Throwable e2) {
// 				// never mind if the connection cannot be rolled back
// 			}
// 			Throwables.throwIfUnchecked(e);
// 			throw new RuntimeException(e);
// 		} finally {
// 			if(connection != null) {
// 				try {
// 					if(initialAutoCommit != null) {
// 						connection.setAutoCommit(initialAutoCommit);
// 					}
// 					connection.close();
// 				} catch (SQLException e) {
// 					// never mind if the connection cannot be closed
// 				}
// 			}
// 		}
// 	}
// 
// 	public void execute(Consumer<Connection> toExecuteOnDb) {
// 		executeAndReturn(connection -> {
// 			toExecuteOnDb.accept(connection);
// 			return null;
// 		});
// 	}
// 
// }


// Path: plume-db-querydsl/src/main/java/com/coreoz/plume/db/querydsl/guice/GuiceQuerydslModule.java
import com.coreoz.plume.db.querydsl.transaction.TransactionManagerQuerydsl;
import com.coreoz.plume.db.transaction.TransactionManager;
import com.google.inject.AbstractModule;

package com.coreoz.plume.db.querydsl.guice;


public class GuiceQuerydslModule extends AbstractModule {

	@Override
	protected void configure() {
		bind(TransactionManager.class).to(TransactionManagerQuerydsl.class);