Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.jporm.rm.session.SqlExecutorImpl Maven / Gradle / Ivy
/*******************************************************************************
* Copyright 2013 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.rm.session;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Function;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.jporm.commons.core.connection.Connection;
import com.jporm.commons.core.connection.ConnectionProvider;
import com.jporm.commons.core.exception.JpoException;
import com.jporm.commons.core.exception.JpoNotUniqueResultException;
import com.jporm.commons.core.function.IntBiConsumer;
import com.jporm.commons.core.function.IntBiFunction;
import com.jporm.commons.core.io.ResultSetRowReaderToResultSetReader;
import com.jporm.commons.core.io.ResultSetRowReaderToResultSetReaderUnique;
import com.jporm.commons.core.session.ASqlExecutor;
import com.jporm.commons.core.util.BigDecimalUtil;
import com.jporm.types.TypeConverterFactory;
import com.jporm.types.io.BatchPreparedStatementSetter;
import com.jporm.types.io.GeneratedKeyReader;
import com.jporm.types.io.ResultEntry;
import com.jporm.types.io.ResultSet;
import com.jporm.types.io.Statement;
/**
* @author Francesco Cina 02/lug/2011
*/
public class SqlExecutorImpl extends ASqlExecutor implements SqlExecutor {
private static final Function SQL_PRE_PROCESSOR_DEFAULT = (sql) -> sql;
private static final Logger LOGGER = LoggerFactory.getLogger(SqlExecutorImpl.class);
private final Function sqlPreProcessor;
private final ConnectionProvider connectionProvider;
private final boolean autoCommit;
public SqlExecutorImpl(final ConnectionProvider connectionProvider, final TypeConverterFactory typeFactory, final boolean autoCommit) {
this(connectionProvider, typeFactory, autoCommit, SQL_PRE_PROCESSOR_DEFAULT);
}
/**
* @param sqlPerformerStrategy2
* @param serviceCatalog
*/
public SqlExecutorImpl(final ConnectionProvider connectionProvider, final TypeConverterFactory typeFactory, final boolean autoCommit, final Function sqlPreProcessor) {
super(typeFactory);
this.connectionProvider = connectionProvider;
this.autoCommit = autoCommit;
this.sqlPreProcessor = sqlPreProcessor;
}
@Override
public int[] batchUpdate(final Collection sqls) throws JpoException {
Connection connection = null;
try {
connection = connectionProvider.getConnection(autoCommit);
return connection.batchUpdate(sqls, sqlPreProcessor);
} finally {
if (connection != null) {
connection.close();
}
}
}
@Override
public int[] batchUpdate(String sql, final BatchPreparedStatementSetter psc) throws JpoException {
Connection connection = null;
try {
sql = preProcessSql(sql);
connection = connectionProvider.getConnection(autoCommit);
return connection.batchUpdate(sql, psc);
} finally {
if (connection != null) {
connection.close();
}
}
}
@Override
public int[] batchUpdate(String sql, final Collection args) throws JpoException {
Connection connection = null;
try {
sql = preProcessSql(sql);
connection = connectionProvider.getConnection(autoCommit);
Collection> statements = new ArrayList<>();
args.forEach(array -> statements.add(new PrepareStatementSetterArrayWrapper(array)));
return connection.batchUpdate(sql, statements);
} finally {
if (connection != null) {
connection.close();
}
}
}
@Override
public void execute(String sql) throws JpoException {
Connection connection = null;
try {
sql = preProcessSql(sql);
connection = connectionProvider.getConnection(autoCommit);
connection.execute(sql);
} finally {
if (connection != null) {
connection.close();
}
}
}
@Override
protected Logger getLogger() {
return LOGGER;
}
@Override
public T query(String sql, final Collection> args, final Function rse) throws JpoException {
Connection connection = null;
try {
sql = preProcessSql(sql);
connection = connectionProvider.getConnection(autoCommit);
Consumer pss = new PrepareStatementSetterCollectionWrapper(args);
return connection.query(sql, pss, rse);
} finally {
if (connection != null) {
connection.close();
}
}
}
@Override
public void query(String sql, final Collection> args, final Consumer rse) throws JpoException {
query(sql, args, (resultSet) -> {
rse.accept(resultSet);
return null;
});
}
@Override
public List query(final String sql, final Collection> args, final IntBiFunction resultSetRowReader) throws JpoException {
return query(sql, args, new ResultSetRowReaderToResultSetReader(resultSetRowReader));
}
@Override
public void query(final String sql, final Collection> args, final IntBiConsumer resultSetRowReader) throws JpoException {
query(sql, args, (final ResultSet resultSet) -> {
int rowNum = 0;
while (resultSet.hasNext()) {
ResultEntry entry = resultSet.next();
resultSetRowReader.accept(entry, rowNum++);
}
});
}
@Override
public T query(String sql, final Object[] args, final Function rse) throws JpoException {
Connection connection = null;
try {
sql = preProcessSql(sql);
connection = connectionProvider.getConnection(autoCommit);
Consumer pss = new PrepareStatementSetterArrayWrapper(args);
return connection.query(sql, pss, rse);
} finally {
if (connection != null) {
connection.close();
}
}
}
@Override
public void query(String sql, final Object[] args, final Consumer rse) throws JpoException {
query(sql, args, (resultSet) -> {
rse.accept(resultSet);
return null;
});
}
@Override
public List query(final String sql, final Object[] args, final IntBiFunction resultSetRowReader) throws JpoException {
return query(sql, args, new ResultSetRowReaderToResultSetReader(resultSetRowReader));
}
@Override
public void query(final String sql, final Object[] args, final IntBiConsumer resultSetRowReader) throws JpoException {
query(sql, args, (final ResultSet resultSet) -> {
int rowNum = 0;
while (resultSet.hasNext()) {
ResultEntry entry = resultSet.next();
resultSetRowReader.accept(entry, rowNum++);
}
});
}
@Override
public BigDecimal queryForBigDecimal(final String sql, final Collection> args) throws JpoException, JpoNotUniqueResultException {
return this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL);
}
@Override
public BigDecimal queryForBigDecimal(final String sql, final Object... args) throws JpoException, JpoNotUniqueResultException {
return this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL);
}
@Override
public final BigDecimal queryForBigDecimalUnique(final String sql, final Collection> args) throws JpoException, JpoNotUniqueResultException {
return this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL_UNIQUE);
}
@Override
public final BigDecimal queryForBigDecimalUnique(final String sql, final Object... args) throws JpoException, JpoNotUniqueResultException {
return this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL_UNIQUE);
}
@Override
public Boolean queryForBoolean(final String sql, final Collection> args) throws JpoException, JpoNotUniqueResultException {
BigDecimal result = this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL);
return BigDecimalUtil.toBoolean(result);
}
@Override
public Boolean queryForBoolean(final String sql, final Object... args) throws JpoException, JpoNotUniqueResultException {
BigDecimal result = this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL);
return BigDecimalUtil.toBoolean(result);
}
@Override
public final Boolean queryForBooleanUnique(final String sql, final Collection> args) throws JpoException, JpoNotUniqueResultException {
BigDecimal result = this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL_UNIQUE);
return BigDecimalUtil.toBoolean(result);
}
@Override
public final Boolean queryForBooleanUnique(final String sql, final Object... args) throws JpoException, JpoNotUniqueResultException {
BigDecimal result = this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL_UNIQUE);
return BigDecimalUtil.toBoolean(result);
}
@Override
public Double queryForDouble(final String sql, final Collection> args) throws JpoException, JpoNotUniqueResultException {
BigDecimal result = this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL);
return BigDecimalUtil.toDouble(result);
}
@Override
public Double queryForDouble(final String sql, final Object... args) throws JpoException, JpoNotUniqueResultException {
BigDecimal result = this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL);
return BigDecimalUtil.toDouble(result);
}
@Override
public final Double queryForDoubleUnique(final String sql, final Collection> args) throws JpoException, JpoNotUniqueResultException {
BigDecimal result = this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL_UNIQUE);
return BigDecimalUtil.toDouble(result);
}
@Override
public final Double queryForDoubleUnique(final String sql, final Object... args) throws JpoException, JpoNotUniqueResultException {
BigDecimal result = this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL_UNIQUE);
return BigDecimalUtil.toDouble(result);
}
@Override
public Float queryForFloat(final String sql, final Collection> args) throws JpoException, JpoNotUniqueResultException {
BigDecimal result = this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL);
return BigDecimalUtil.toFloat(result);
}
@Override
public Float queryForFloat(final String sql, final Object... args) throws JpoException, JpoNotUniqueResultException {
BigDecimal result = this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL);
return BigDecimalUtil.toFloat(result);
}
@Override
public final Float queryForFloatUnique(final String sql, final Collection> args) throws JpoException, JpoNotUniqueResultException {
BigDecimal result = this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL_UNIQUE);
return BigDecimalUtil.toFloat(result);
}
@Override
public final Float queryForFloatUnique(final String sql, final Object... args) throws JpoException, JpoNotUniqueResultException {
BigDecimal result = this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL_UNIQUE);
return BigDecimalUtil.toFloat(result);
}
@Override
public Integer queryForInt(final String sql, final Collection> args) throws JpoException, JpoNotUniqueResultException {
BigDecimal result = this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL);
return BigDecimalUtil.toInteger(result);
}
@Override
public Integer queryForInt(final String sql, final Object... args) throws JpoException, JpoNotUniqueResultException {
BigDecimal result = this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL);
return BigDecimalUtil.toInteger(result);
}
@Override
public final Integer queryForIntUnique(final String sql, final Collection> args) throws JpoException, JpoNotUniqueResultException {
BigDecimal result = this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL_UNIQUE);
return BigDecimalUtil.toInteger(result);
}
@Override
public final Integer queryForIntUnique(final String sql, final Object... args) throws JpoException, JpoNotUniqueResultException {
BigDecimal result = this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL_UNIQUE);
return BigDecimalUtil.toInteger(result);
}
@Override
public Long queryForLong(final String sql, final Collection> args) throws JpoException, JpoNotUniqueResultException {
BigDecimal result = this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL);
return BigDecimalUtil.toLong(result);
}
@Override
public Long queryForLong(final String sql, final Object... args) throws JpoException, JpoNotUniqueResultException {
BigDecimal result = this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL);
return BigDecimalUtil.toLong(result);
}
@Override
public final Long queryForLongUnique(final String sql, final Collection> args) throws JpoException, JpoNotUniqueResultException {
BigDecimal result = this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL_UNIQUE);
return BigDecimalUtil.toLong(result);
}
@Override
public final Long queryForLongUnique(final String sql, final Object... args) throws JpoException, JpoNotUniqueResultException {
BigDecimal result = this.query(sql, args, RESULT_SET_READER_BIG_DECIMAL_UNIQUE);
return BigDecimalUtil.toLong(result);
}
@Override
public String queryForString(final String sql, final Collection> args) throws JpoException, JpoNotUniqueResultException {
return this.query(sql, args, RESULT_SET_READER_STRING);
}
@Override
public String queryForString(final String sql, final Object... args) throws JpoException, JpoNotUniqueResultException {
return this.query(sql, args, RESULT_SET_READER_STRING);
}
@Override
public final String queryForStringUnique(final String sql, final Collection> args) throws JpoException, JpoNotUniqueResultException {
return this.query(sql, args, RESULT_SET_READER_STRING_UNIQUE);
}
@Override
public final String queryForStringUnique(final String sql, final Object... args) throws JpoException, JpoNotUniqueResultException {
return this.query(sql, args, RESULT_SET_READER_STRING_UNIQUE);
}
@Override
public T queryForUnique(final String sql, final Collection> args, final IntBiFunction rsrr) throws JpoException {
return query(sql, args, new ResultSetRowReaderToResultSetReaderUnique(rsrr));
}
@Override
public T queryForUnique(final String sql, final Object[] args, final IntBiFunction rsrr) throws JpoException, JpoNotUniqueResultException {
return query(sql, args, new ResultSetRowReaderToResultSetReaderUnique(rsrr));
}
@Override
public int update(final String sql, final Collection> args) throws JpoException {
Consumer pss = new PrepareStatementSetterCollectionWrapper(args);
return update(sql, pss);
}
@Override
public R update(final String sql, final Collection> args, final GeneratedKeyReader generatedKeyReader) throws JpoException {
Consumer pss = new PrepareStatementSetterCollectionWrapper(args);
return update(sql, pss, generatedKeyReader);
}
@Override
public int update(final String sql, final Object... args) throws JpoException {
Consumer pss = new PrepareStatementSetterArrayWrapper(args);
return update(sql, pss);
}
@Override
public R update(final String sql, final Object[] args, final GeneratedKeyReader generatedKeyReader) throws JpoException {
Consumer pss = new PrepareStatementSetterArrayWrapper(args);
return update(sql, pss, generatedKeyReader);
}
@Override
public int update(String sql, final Consumer psc) throws JpoException {
Connection connection = null;
try {
sql = preProcessSql(sql);
connection = connectionProvider.getConnection(autoCommit);
return connection.update(sql, psc);
} finally {
if (connection != null) {
connection.close();
}
}
}
@Override
public R update(String sql, final Consumer psc, final GeneratedKeyReader generatedKeyReader) throws JpoException {
Connection connection = null;
try {
sql = preProcessSql(sql);
connection = connectionProvider.getConnection(autoCommit);
return connection.update(sql, generatedKeyReader, psc);
} finally {
if (connection != null) {
connection.close();
}
}
}
@Override
public Optional queryForOptional(String sql, Collection> args, IntBiFunction rsrr) throws JpoException {
T result = query(sql, args, rs -> {
if (rs.hasNext()) {
return rsrr.apply(rs.next(), 0);
}
return null;
});
return Optional.ofNullable(result);
}
@Override
public Optional queryForOptional(String sql, Object[] args, IntBiFunction rsrr) throws JpoException {
T result = query(sql, args, rs -> {
if (rs.hasNext()) {
return rsrr.apply(rs.next(), 0);
}
return null;
});
return Optional.ofNullable(result);
}
private String preProcessSql(String sql) {
return sqlPreProcessor.apply(sql);
}
}