Skip to content

Commit

Permalink
fixed #194 (#195)
Browse files Browse the repository at this point in the history
Enable to set initial value of ResultSetType and ResultSetConcurrency when generating SqlContext with SqlContextFactory
  • Loading branch information
HidekiSugimoto189 authored and shout-star committed Sep 2, 2019
1 parent ecd70db commit 55d0b85
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
*/
public interface SqlContextFactory {
/** BEAN名 */
final String FACTORY_BEAN_NAME = "sqlContextFactory";
String FACTORY_BEAN_NAME = "sqlContextFactory";

/**
* 初期化処理
Expand Down Expand Up @@ -168,4 +168,20 @@ public interface SqlContextFactory {
*/
SqlContextFactory removeBindParamMapper(BindParameterMapper<?> parameterMapper);

/**
* SqlContextに設定するResultSetTypeの初期値を指定する
*
* @param resultSetType ResultSetTypeの初期値
* @return SqlContextFactory
*/
SqlContextFactory setDefaultResultSetType(int resultSetType);

/**
* SqlContextに設定するResultSetConcurrencyの初期値を指定する
*
* @param resultSetConcurrency ResultSetConcurrencyの初期値
* @return SqlContextFactory
*/
SqlContextFactory setDefaultResultSetConcurrency(int resultSetConcurrency);

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
Expand All @@ -31,6 +32,10 @@
import java.util.jar.JarFile;
import java.util.stream.Stream;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import jp.co.future.uroborosql.filter.SqlFilterManager;
import jp.co.future.uroborosql.parameter.Parameter;
import jp.co.future.uroborosql.parameter.mapper.BindParameterMapper;
Expand All @@ -39,10 +44,6 @@
import jp.co.future.uroborosql.utils.CaseFormat;
import ognl.OgnlRuntime;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* SQLコンテキストファクトリ実装
*
Expand All @@ -69,17 +70,23 @@ public class SqlContextFactoryImpl implements SqlContextFactory {
private List<AutoBindParameterCreator> autoBindParameterCreators = null;

/** 自動パラメータバインド関数List(query用) */
private List<Consumer<SqlContext>> queryAutoParameterBinders = new ArrayList<>();
private final List<Consumer<SqlContext>> queryAutoParameterBinders = new ArrayList<>();

/** 自動パラメータバインド関数List(update/batch/proc用) */
private List<Consumer<SqlContext>> updateAutoParameterBinders = new ArrayList<>();
private final List<Consumer<SqlContext>> updateAutoParameterBinders = new ArrayList<>();

/** 合成自動パラメータバインド関数(query用) */
private Consumer<SqlContext> queryAutoParameterBinder = null;

/** 合成自動パラメータバインド関数(update/batch/proc用) */
private Consumer<SqlContext> updateAutoParameterBinder = null;

/** ResultSetTypeの初期値 */
private int defaultResultSetType = ResultSet.TYPE_FORWARD_ONLY;

/** ResultSetConcurrencyの初期値*/
private int defaultResultSetConcurrency = ResultSet.CONCUR_READ_ONLY;

/** パラメータ変換マネージャ */
private final BindParameterMapperManager parameterMapperManager = new BindParameterMapperManager();

Expand Down Expand Up @@ -113,6 +120,8 @@ public SqlContext createSqlContext() {
sqlContext.setParameterMapperManager(new BindParameterMapperManager(parameterMapperManager));
sqlContext.setQueryAutoParameterBinder(queryAutoParameterBinder);
sqlContext.setUpdateAutoParameterBinder(updateAutoParameterBinder);
sqlContext.setResultSetType(defaultResultSetType);
sqlContext.setResultSetConcurrency(defaultResultSetConcurrency);

return sqlContext;
}
Expand Down Expand Up @@ -335,7 +344,8 @@ public List<AutoBindParameterCreator> getAutoBindParameterCreators() {
*/
@Deprecated
@Override
public SqlContextFactory setAutoBindParameterCreators(final List<AutoBindParameterCreator> autoBindParameterCreators) {
public SqlContextFactory setAutoBindParameterCreators(
final List<AutoBindParameterCreator> autoBindParameterCreators) {
this.autoBindParameterCreators = autoBindParameterCreators;
return this;
}
Expand Down Expand Up @@ -505,7 +515,8 @@ private static Set<Class<?>> findEnumClassesWithFile(final String packageName, f
* @throws ClassNotFoundException エラー
* @throws IOException
*/
private static Collection<? extends Class<?>> findEnumClassesWithJar(final String packageName, final JarFile jarFile) {
private static Collection<? extends Class<?>> findEnumClassesWithJar(final String packageName,
final JarFile jarFile) {
String resourceName = packageName.replace('.', '/');
Set<Class<?>> classes = new HashSet<>();
Collections.list(jarFile.entries()).stream().map(JarEntry::getName)
Expand Down Expand Up @@ -534,4 +545,16 @@ private static Optional<Class<?>> loadEnum(final String className) {
}
return Optional.empty();
}

@Override
public SqlContextFactory setDefaultResultSetType(final int resultSetType) {
defaultResultSetType = resultSetType;
return this;
}

@Override
public SqlContextFactory setDefaultResultSetConcurrency(final int resultSetConcurrency) {
defaultResultSetConcurrency = resultSetConcurrency;
return this;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.*;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
Expand All @@ -14,16 +15,16 @@
import java.util.stream.Collector;
import java.util.stream.Collectors;

import org.junit.Before;
import org.junit.Test;
import org.slf4j.event.Level;

import jp.co.future.uroborosql.context.test.TestConsts;
import jp.co.future.uroborosql.context.test.TestEnum1;
import jp.co.future.uroborosql.filter.SqlFilterManager;
import jp.co.future.uroborosql.filter.SqlFilterManagerImpl;
import jp.co.future.uroborosql.parameter.Parameter;

import org.junit.Before;
import org.junit.Test;
import org.slf4j.event.Level;

public class SqlContextFactoryTest {

private SqlContextFactory sqlContextFactory;
Expand Down Expand Up @@ -85,7 +86,7 @@ public void testConst_class() {

"CLS_CUSTOMMAPPER_TARGET", TestConsts.CUSTOMMAPPER_TARGET

)));
)));
}

private Map<String, ?> mapOf(final Object... args) {
Expand Down Expand Up @@ -170,4 +171,27 @@ public void testAutoBindParameterCreator() throws Exception {

assertThat(ctx.getParam("DUMMY").getValue(), is("dummy_value"));
}

@Test
public void testSetDefaultResultSetType() throws Exception {
sqlContextFactory.initialize();

sqlContextFactory.setDefaultResultSetType(ResultSet.TYPE_FORWARD_ONLY);
assertThat(sqlContextFactory.createSqlContext().getResultSetType(), is(ResultSet.TYPE_FORWARD_ONLY));
sqlContextFactory.setDefaultResultSetType(ResultSet.TYPE_SCROLL_INSENSITIVE);
assertThat(sqlContextFactory.createSqlContext().getResultSetType(), is(ResultSet.TYPE_SCROLL_INSENSITIVE));
sqlContextFactory.setDefaultResultSetType(ResultSet.TYPE_SCROLL_SENSITIVE);
assertThat(sqlContextFactory.createSqlContext().getResultSetType(), is(ResultSet.TYPE_SCROLL_SENSITIVE));
}

@Test
public void testSetDefaultResultSetConcurrency() throws Exception {
sqlContextFactory.initialize();

sqlContextFactory.setDefaultResultSetConcurrency(ResultSet.CONCUR_READ_ONLY);
assertThat(sqlContextFactory.createSqlContext().getResultSetConcurrency(), is(ResultSet.CONCUR_READ_ONLY));
sqlContextFactory.setDefaultResultSetConcurrency(ResultSet.CONCUR_UPDATABLE);
assertThat(sqlContextFactory.createSqlContext().getResultSetConcurrency(), is(ResultSet.CONCUR_UPDATABLE));
}

}

0 comments on commit 55d0b85

Please sign in to comment.