1 16 package scriptella.jdbc; 17 18 import scriptella.DBTestCase; 19 20 import java.sql.Connection ; 21 import java.sql.SQLException ; 22 import java.util.ArrayList ; 23 import java.util.Collections ; 24 import java.util.List ; 25 26 32 public class StatementCachePerfTest extends DBTestCase { 33 private static final int LOOP_COUNT = 2000; 34 35 private static class TestableStatementCache extends StatementCache { 36 37 public TestableStatementCache(Connection connection, final int size) { 38 super(connection, size); 39 } 40 @Override 41 protected StatementWrapper.Simple create(final String sql, final JdbcTypesConverter converter) { 42 return new StatementWrapper.Simple(sql) { 43 public void close() { 44 } 45 }; 46 } 47 48 @Override 49 protected StatementWrapper.Prepared prepare(final String sql, final JdbcTypesConverter converter) { 50 return new StatementWrapper.Prepared() { 51 @Override 52 public void setParameters(List <Object > params) { 53 } 54 55 @Override 56 public void clear() { 57 } 58 59 }; 60 } 61 62 } 63 64 protected void setUp() { 65 sc = new TestableStatementCache(null, 100); 66 } 67 68 StatementCache sc; 69 70 74 public void testCacheMiss() throws SQLException { 75 JdbcTypesConverter converter = new JdbcTypesConverter(); 77 List <Object > params = new ArrayList <Object >(); 78 params.add(1); 79 80 for (int i = 0; i < LOOP_COUNT; i++) { 81 setUp(); 82 runStatements(sc, params, converter); 83 } 84 85 } 86 87 private void runStatements(StatementCache cache, List <Object > params, JdbcTypesConverter converter) throws SQLException { 88 StringBuilder sb = new StringBuilder (150); 89 for (int j = 0; j < 150; j++) { 90 sb.append('.'); 91 StatementWrapper s = cache.prepare(sb.toString(), Collections.emptyList(), converter); 92 cache.releaseStatement(s); 93 StatementWrapper s2 = cache.prepare(sb.toString(), params, converter); 94 cache.releaseStatement(s2); 95 } 96 97 } 98 99 103 public void testCacheHit() throws SQLException { 104 JdbcTypesConverter converter = new JdbcTypesConverter(); 106 List <Object > params = new ArrayList <Object >(); 107 params.add(1); 108 109 for (int i = 0; i < LOOP_COUNT; i++) { 110 runStatements(sc, params, converter); 111 } 112 113 } 114 118 public void testCacheDisable() throws SQLException { 119 JdbcTypesConverter converter = new JdbcTypesConverter(); 121 List <Object > params = new ArrayList <Object >(); 122 params.add(1); 123 StatementCache disabled = new TestableStatementCache(null, -1); 124 125 for (int i = 0; i < LOOP_COUNT; i++) { 126 runStatements(disabled, params, converter); 127 } 128 129 } 130 131 132 } 133 | Popular Tags |