// Path: plume-db-querydsl/src/main/java/com/coreoz/plume/db/querydsl/crud/CrudDaoQuerydsl.java
// public class CrudDaoQuerydsl<T extends CrudEntity> extends QueryDslDao<T> implements CrudDao<T> {
// 
// 	private final NumberPath<Long> idPath;
// 
// 	public CrudDaoQuerydsl(TransactionManagerQuerydsl transactionManager,
// 			RelationalPath<T> table) {
// 		this(transactionManager, table, null);
// 	}
// 
// 	public CrudDaoQuerydsl(TransactionManagerQuerydsl transactionManager,
// 			RelationalPath<T> table, OrderSpecifier<?> defaultOrder) {
// 		this(transactionManager, table, defaultOrder, new IdPath(table));
// 	}
// 
// 	public CrudDaoQuerydsl(TransactionManagerQuerydsl transactionManager,
// 			RelationalPath<T> table, OrderSpecifier<?> defaultOrder, NumberPath<Long> idPath) {
// 		super(transactionManager, table, defaultOrder);
// 		this.idPath = idPath;
// 	}
// 
// 	// API
// 
// 	@Override
// 	public T findById(Long id) {
// 		return selectFrom()
// 			.where(idPath.eq(id))
// 			.fetchFirst();
// 	}
// 
// 	@Override
// 	public T save(T entityToUpdate) {
// 		return transactionManager.executeAndReturn(connection ->
// 			save(entityToUpdate, connection)
// 		);
// 	}
// 
// 	public T save(T entityToUpdate, Connection connection) {
// 		if(entityToUpdate.getId() == null) {
// 			// insert
// 			entityToUpdate.setId(generateIdentifier());
// 			transactionManager
// 				.insert(table, connection)
// 				.populate(entityToUpdate)
// 				.execute();
// 			return entityToUpdate;
// 		}
// 		// update
// 		transactionManager
// 			.update(table, connection)
// 			.populate(entityToUpdate, DefaultMapper.WITH_NULL_BINDINGS)
// 			.where(idPath.eq(entityToUpdate.getId()))
// 			.execute();
// 		return entityToUpdate;
// 	}
// 
// 	@Override
// 	public long delete(Long id) {
// 		return transactionManager.executeAndReturn(connection ->
// 			delete(id, connection)
// 		);
// 	}
// 
// 	public long delete(Long id, Connection connection) {
// 		return transactionManager
// 			.delete(table, connection)
// 			.where(idPath.eq(id))
// 			.execute();
// 	}
// 
// 	// dao API
// 
// 	protected long generateIdentifier() {
// 		return IdGenerator.generate();
// 	}
// 
// 	// internal
// 
// 	private static class IdPath extends NumberPath<Long> {
// 		private static final long serialVersionUID = -8749023770318917240L;
// 
// 		IdPath(RelationalPath<?> base) {
// 			super(Long.class, base, "id");
// 		}
// 	}
// 
// }
// 
// 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);
// 			}
// 		};
// 	}
// 
// }


import javax.inject.Inject;
import javax.inject.Singleton;
import com.coreoz.plume.db.querydsl.crud.CrudDaoQuerydsl;
import com.coreoz.plume.db.querydsl.transaction.TransactionManagerQuerydsl;
package com.coreoz.plume.db.querydsl.db;



@Singleton
public class UserDao extends CrudDaoQuerydsl<User> {

	@Inject
// Path: plume-db-querydsl/src/main/java/com/coreoz/plume/db/querydsl/crud/CrudDaoQuerydsl.java
// public class CrudDaoQuerydsl<T extends CrudEntity> extends QueryDslDao<T> implements CrudDao<T> {
// 
// 	private final NumberPath<Long> idPath;
// 
// 	public CrudDaoQuerydsl(TransactionManagerQuerydsl transactionManager,
// 			RelationalPath<T> table) {
// 		this(transactionManager, table, null);
// 	}
// 
// 	public CrudDaoQuerydsl(TransactionManagerQuerydsl transactionManager,
// 			RelationalPath<T> table, OrderSpecifier<?> defaultOrder) {
// 		this(transactionManager, table, defaultOrder, new IdPath(table));
// 	}
// 
// 	public CrudDaoQuerydsl(TransactionManagerQuerydsl transactionManager,
// 			RelationalPath<T> table, OrderSpecifier<?> defaultOrder, NumberPath<Long> idPath) {
// 		super(transactionManager, table, defaultOrder);
// 		this.idPath = idPath;
// 	}
// 
// 	// API
// 
// 	@Override
// 	public T findById(Long id) {
// 		return selectFrom()
// 			.where(idPath.eq(id))
// 			.fetchFirst();
// 	}
// 
// 	@Override
// 	public T save(T entityToUpdate) {
// 		return transactionManager.executeAndReturn(connection ->
// 			save(entityToUpdate, connection)
// 		);
// 	}
// 
// 	public T save(T entityToUpdate, Connection connection) {
// 		if(entityToUpdate.getId() == null) {
// 			// insert
// 			entityToUpdate.setId(generateIdentifier());
// 			transactionManager
// 				.insert(table, connection)
// 				.populate(entityToUpdate)
// 				.execute();
// 			return entityToUpdate;
// 		}
// 		// update
// 		transactionManager
// 			.update(table, connection)
// 			.populate(entityToUpdate, DefaultMapper.WITH_NULL_BINDINGS)
// 			.where(idPath.eq(entityToUpdate.getId()))
// 			.execute();
// 		return entityToUpdate;
// 	}
// 
// 	@Override
// 	public long delete(Long id) {
// 		return transactionManager.executeAndReturn(connection ->
// 			delete(id, connection)
// 		);
// 	}
// 
// 	public long delete(Long id, Connection connection) {
// 		return transactionManager
// 			.delete(table, connection)
// 			.where(idPath.eq(id))
// 			.execute();
// 	}
// 
// 	// dao API
// 
// 	protected long generateIdentifier() {
// 		return IdGenerator.generate();
// 	}
// 
// 	// internal
// 
// 	private static class IdPath extends NumberPath<Long> {
// 		private static final long serialVersionUID = -8749023770318917240L;
// 
// 		IdPath(RelationalPath<?> base) {
// 			super(Long.class, base, "id");
// 		}
// 	}
// 
// }
// 
// 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-querydsl/src/test/java/com/coreoz/plume/db/querydsl/db/UserDao.java
import javax.inject.Inject;
import javax.inject.Singleton;
import com.coreoz.plume.db.querydsl.crud.CrudDaoQuerydsl;
import com.coreoz.plume.db.querydsl.transaction.TransactionManagerQuerydsl;

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



@Singleton
public class UserDao extends CrudDaoQuerydsl<User> {

	@Inject
	public UserDao(TransactionManagerQuerydsl transactionManagerQuerydsl) {