55import static org .hamcrest .MatcherAssert .assertThat ;
66
77import java .sql .ResultSet ;
8+ import java .time .Duration ;
9+ import java .time .Instant ;
810import java .util .HashMap ;
911import java .util .HashSet ;
1012import java .util .List ;
1113import java .util .Map ;
1214import java .util .Set ;
1315import java .util .stream .Collector ;
1416import java .util .stream .Collectors ;
17+ import java .util .stream .IntStream ;
1518
1619import org .junit .jupiter .api .BeforeEach ;
1720import org .junit .jupiter .api .Test ;
2124import jp .co .future .uroborosql .config .SqlConfig ;
2225import jp .co .future .uroborosql .context .test .TestConsts ;
2326import jp .co .future .uroborosql .context .test .TestEnum1 ;
27+ import jp .co .future .uroborosql .context .test .TestManyConsts ;
2428
2529public 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