Skip to content

Commit 176f83e

Browse files
refs #359 (#363)
Confirmed in #359, so I will self-merge.
1 parent 70892bc commit 176f83e

File tree

3 files changed

+5053
-26
lines changed

3 files changed

+5053
-26
lines changed

src/main/java/jp/co/future/uroborosql/context/ExecutionContextProviderImpl.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import java.util.Optional;
2828
import java.util.Set;
2929
import java.util.StringJoiner;
30-
import java.util.concurrent.ConcurrentHashMap;
3130
import java.util.jar.JarEntry;
3231
import java.util.jar.JarFile;
3332
import java.util.stream.Collectors;
@@ -82,7 +81,7 @@ public class ExecutionContextProviderImpl
8281
public ExecutionContext createExecutionContext() {
8382
var executionContext = new ExecutionContextImpl();
8483
executionContext.setSqlConfig(getSqlConfig());
85-
executionContext.setConstParameterMap(new ConcurrentHashMap<>(getConstParameterMap()));
84+
executionContext.setConstParameterMap(getConstParameterMap());
8685
executionContext.setParameterMapperManager(
8786
new BindParameterMapperManager(parameterMapperManager, getSqlConfig().getClock()));
8887
executionContext.setResultSetType(defaultResultSetType);

src/test/java/jp/co/future/uroborosql/context/ExecutionContextProviderTest.java

Lines changed: 48 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@
55
import static org.hamcrest.MatcherAssert.assertThat;
66

77
import java.sql.ResultSet;
8+
import java.time.Duration;
9+
import java.time.Instant;
810
import java.util.HashMap;
911
import java.util.HashSet;
1012
import java.util.List;
1113
import java.util.Map;
1214
import java.util.Set;
1315
import java.util.stream.Collector;
1416
import java.util.stream.Collectors;
17+
import java.util.stream.IntStream;
1518

1619
import org.junit.jupiter.api.BeforeEach;
1720
import org.junit.jupiter.api.Test;
@@ -21,29 +24,30 @@
2124
import jp.co.future.uroborosql.config.SqlConfig;
2225
import jp.co.future.uroborosql.context.test.TestConsts;
2326
import jp.co.future.uroborosql.context.test.TestEnum1;
27+
import jp.co.future.uroborosql.context.test.TestManyConsts;
2428

2529
public class ExecutionContextProviderTest {
2630

2731
private SqlConfig sqlConfig;
2832

29-
private ExecutionContextProvider ExecutionContextProvider;
33+
private ExecutionContextProvider executionContextProvider;
3034

3135
@BeforeEach
3236
public void setUp() throws Exception {
3337
sqlConfig = UroboroSQL
3438
.builder("jdbc:h2:mem:" + this.getClass().getSimpleName() + ";DB_CLOSE_DELAY=-1", "sa", "sa").build();
35-
ExecutionContextProvider = sqlConfig.getExecutionContextProvider();
39+
executionContextProvider = sqlConfig.getExecutionContextProvider();
3640
}
3741

3842
@Test
3943
void testConst_class() {
40-
ExecutionContextProvider.addBindParamMapper((original, connection, parameterMapperManager) -> null);
44+
executionContextProvider.addBindParamMapper((original, connection, parameterMapperManager) -> null);
4145

42-
ExecutionContextProvider.setConstantClassNames(List.of(TestConsts.class.getName()));
46+
executionContextProvider.setConstantClassNames(List.of(TestConsts.class.getName()));
4347

44-
ExecutionContextProvider.initialize();
48+
executionContextProvider.initialize();
4549

46-
var constParameterMap = ExecutionContextProvider.getConstParameterMap();
50+
var constParameterMap = executionContextProvider.getConstParameterMap();
4751
Map<String, ?> map = constParameterMap.entrySet().stream()
4852
.collect(Collector.of(HashMap::new, (m, e) -> m.put(e.getKey(), e.getValue().getValue()), (m1, m2) -> {
4953
m1.putAll(m2);
@@ -85,6 +89,26 @@ void testConst_class() {
8589
)));
8690
}
8791

92+
@Test
93+
public void testManyConst_class_performance() {
94+
executionContextProvider.addBindParamMapper((original, connection, parameterMapperManager) -> null);
95+
96+
executionContextProvider.setConstantClassNames(List.of(TestManyConsts.class.getName()));
97+
98+
executionContextProvider.initialize();
99+
100+
try (var agent = sqlConfig.agent()) {
101+
var startTime = Instant.now(sqlConfig.getClock());
102+
103+
IntStream.rangeClosed(1, 100000)
104+
.forEach(idx -> agent.queryWith("select 1"));
105+
106+
// 実行結果が1秒以内で終了すること(パフォーマンス改善前は15秒かかっている)
107+
var elapsedTime = Duration.between(startTime, Instant.now(sqlConfig.getClock())).getSeconds();
108+
assertThat(elapsedTime < 1L, is(true));
109+
}
110+
}
111+
88112
private Map<String, ?> mapOf(final Object... args) {
89113
Map<String, Object> map = new HashMap<>();
90114
for (var i = 0; i < args.length; i += 2) {
@@ -96,11 +120,11 @@ void testConst_class() {
96120
@SuppressWarnings({ "unchecked", "rawtypes" })
97121
@Test
98122
void testConst_enum() {
99-
ExecutionContextProvider.setEnumConstantPackageNames(List.of(TestEnum1.class.getPackage().getName()));
123+
executionContextProvider.setEnumConstantPackageNames(List.of(TestEnum1.class.getPackage().getName()));
100124

101-
ExecutionContextProvider.initialize();
125+
executionContextProvider.initialize();
102126

103-
var constParameterMap = ExecutionContextProvider.getConstParameterMap();
127+
var constParameterMap = executionContextProvider.getConstParameterMap();
104128
Set<String> set = constParameterMap.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue().getValue())
105129
.collect(Collectors.toSet());
106130

@@ -119,11 +143,11 @@ void testConst_enum() {
119143
@SuppressWarnings({ "unchecked", "rawtypes" })
120144
@Test
121145
void testConst_enumForJar() {
122-
ExecutionContextProvider.setEnumConstantPackageNames(List.of(Level.class.getPackage().getName()));
146+
executionContextProvider.setEnumConstantPackageNames(List.of(Level.class.getPackage().getName()));
123147

124-
ExecutionContextProvider.initialize();
148+
executionContextProvider.initialize();
125149

126-
var constParameterMap = ExecutionContextProvider.getConstParameterMap();
150+
var constParameterMap = executionContextProvider.getConstParameterMap();
127151
Set<String> set = constParameterMap.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue().getValue())
128152
.collect(Collectors.toSet());
129153

@@ -138,28 +162,28 @@ void testConst_enumForJar() {
138162

139163
@Test
140164
void testSetDefaultResultSetType() throws Exception {
141-
ExecutionContextProvider.initialize();
165+
executionContextProvider.initialize();
142166

143-
ExecutionContextProvider.setDefaultResultSetType(ResultSet.TYPE_FORWARD_ONLY);
144-
assertThat(ExecutionContextProvider.createExecutionContext().getResultSetType(),
167+
executionContextProvider.setDefaultResultSetType(ResultSet.TYPE_FORWARD_ONLY);
168+
assertThat(executionContextProvider.createExecutionContext().getResultSetType(),
145169
is(ResultSet.TYPE_FORWARD_ONLY));
146-
ExecutionContextProvider.setDefaultResultSetType(ResultSet.TYPE_SCROLL_INSENSITIVE);
147-
assertThat(ExecutionContextProvider.createExecutionContext().getResultSetType(),
170+
executionContextProvider.setDefaultResultSetType(ResultSet.TYPE_SCROLL_INSENSITIVE);
171+
assertThat(executionContextProvider.createExecutionContext().getResultSetType(),
148172
is(ResultSet.TYPE_SCROLL_INSENSITIVE));
149-
ExecutionContextProvider.setDefaultResultSetType(ResultSet.TYPE_SCROLL_SENSITIVE);
150-
assertThat(ExecutionContextProvider.createExecutionContext().getResultSetType(),
173+
executionContextProvider.setDefaultResultSetType(ResultSet.TYPE_SCROLL_SENSITIVE);
174+
assertThat(executionContextProvider.createExecutionContext().getResultSetType(),
151175
is(ResultSet.TYPE_SCROLL_SENSITIVE));
152176
}
153177

154178
@Test
155179
void testSetDefaultResultSetConcurrency() throws Exception {
156-
ExecutionContextProvider.initialize();
180+
executionContextProvider.initialize();
157181

158-
ExecutionContextProvider.setDefaultResultSetConcurrency(ResultSet.CONCUR_READ_ONLY);
159-
assertThat(ExecutionContextProvider.createExecutionContext().getResultSetConcurrency(),
182+
executionContextProvider.setDefaultResultSetConcurrency(ResultSet.CONCUR_READ_ONLY);
183+
assertThat(executionContextProvider.createExecutionContext().getResultSetConcurrency(),
160184
is(ResultSet.CONCUR_READ_ONLY));
161-
ExecutionContextProvider.setDefaultResultSetConcurrency(ResultSet.CONCUR_UPDATABLE);
162-
assertThat(ExecutionContextProvider.createExecutionContext().getResultSetConcurrency(),
185+
executionContextProvider.setDefaultResultSetConcurrency(ResultSet.CONCUR_UPDATABLE);
186+
assertThat(executionContextProvider.createExecutionContext().getResultSetConcurrency(),
163187
is(ResultSet.CONCUR_UPDATABLE));
164188
}
165189

0 commit comments

Comments
 (0)