KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > scriptella > jdbc > StatementCacheTest


1 /*
2  * Copyright 2006-2007 The Scriptella Project Team.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 package scriptella.jdbc;
17
18 import scriptella.DBTestCase;
19
20 import java.sql.SQLException JavaDoc;
21 import java.util.ArrayList JavaDoc;
22 import java.util.Collections JavaDoc;
23 import java.util.List JavaDoc;
24
25 /**
26  * Tests for {@link StatementCache}.
27  *
28  * @author Fyodor Kupolov
29  * @version 1.0
30  */

31 public class StatementCacheTest extends DBTestCase {
32
33
34     private int simpleClosed;
35     private int preparedClosed;
36     private int preparedCleared;
37     private int preparedParamsSet;
38
39     StatementCache sc;
40
41     protected void setUp() {
42         sc = new StatementCache(null, 100) {
43             @Override JavaDoc
44             protected StatementWrapper.Simple create(final String JavaDoc sql, final JdbcTypesConverter converter) {
45                 return new StatementWrapper.Simple(sql) {
46                     public void close() {
47                         simpleClosed++;
48                     }
49                 };
50             }
51
52             @Override JavaDoc
53             protected StatementWrapper.Prepared prepare(final String JavaDoc sql, final JdbcTypesConverter converter) {
54                 return new StatementWrapper.Prepared() {
55                     @Override JavaDoc
56                     public void close() {
57                         preparedClosed++;
58                     }
59
60                     @Override JavaDoc
61                     public void setParameters(List JavaDoc<Object JavaDoc> params) {
62                         preparedParamsSet++;
63                     }
64
65                     @Override JavaDoc
66                     public void clear() {
67                         preparedCleared++;
68                     }
69                 };
70             }
71         };
72
73     }
74
75     /**
76      * Test when number of statement exceeds the cache size.
77      *
78      * @throws SQLException
79      */

80     public void testGrowth() throws SQLException JavaDoc {
81         simpleClosed = 0;
82         preparedClosed = 0;
83         preparedCleared = 0;
84         preparedParamsSet = 0;
85         StringBuilder JavaDoc sb = new StringBuilder JavaDoc();
86         JdbcTypesConverter converter = new JdbcTypesConverter();
87         List JavaDoc<Object JavaDoc> params = new ArrayList JavaDoc<Object JavaDoc>();
88         params.add(1);
89         for (int i = 0; i < 105; i++) {
90             sb.append('.');
91             StatementWrapper s = sc.prepare(sb.toString(), Collections.emptyList(), converter);
92             assertEquals(i, preparedParamsSet);//Should be recognized as simple statement
93
sc.releaseStatement(s);
94             assertEquals(i, simpleClosed);
95             StatementWrapper s2 = sc.prepare(sb.toString(), params, converter);
96             assertEquals(i + 1, preparedParamsSet); //Should be recognized as a prepared statement
97
assertEquals(i + 1, simpleClosed); //statement should be closed
98
assertEquals(i, preparedCleared);
99             sc.releaseStatement(s2);
100             assertEquals(i + 1, preparedCleared);
101         }
102         //5 statements have to be removed from cache
103
assertEquals(5, preparedClosed);
104         sc.close();
105
106     }
107
108     public void testUsual() throws SQLException JavaDoc {
109         preparedClosed = 0;
110         preparedCleared = 0;
111
112
113         StringBuilder JavaDoc sb = new StringBuilder JavaDoc();
114         JdbcTypesConverter converter = new JdbcTypesConverter();
115         List JavaDoc<Object JavaDoc> params = new ArrayList JavaDoc<Object JavaDoc>();
116         params.add(1);
117         for (int i = 0; i < 20; i++) {
118             sb.append('.');
119             StatementWrapper s2 = sc.prepare(sb.toString(), params, converter);
120             sc.releaseStatement(s2);
121         }
122         assertEquals(20, preparedCleared);
123         assertEquals(0, preparedClosed); //no closed stmt if cache is working
124
sc.close();
125         assertEquals(20, preparedCleared);
126         assertEquals(20, preparedClosed);
127
128     }
129
130
131 }
132
Popular Tags