blob: 0c2602181c4e3981c42abb4ed7898c606c57c235 [file] [log] [blame]
Nils Diewald2c7a2ab2015-01-29 21:15:40 +00001package de.ids_mannheim.korap.node;
Nils Diewald6aa929e2014-09-17 13:30:34 +00002
3import de.ids_mannheim.korap.index.MatchCollector;
4import de.ids_mannheim.korap.index.collector.MatchCollectorDB;
5
6import java.sql.Connection;
7import java.sql.DriverManager;
8import java.sql.PreparedStatement;
9import java.sql.ResultSet;
10import java.sql.Statement;
11import java.sql.SQLException;
12
Nils Diewaldad3f3032014-09-24 01:42:47 +000013import com.mchange.v2.c3p0.*;
Nils Diewald6aa929e2014-09-17 13:30:34 +000014
15import org.junit.After;
16import org.junit.Before;
17import org.junit.Test;
Nils Diewaldf04e1002014-09-24 22:52:59 +000018import org.junit.Ignore;
Nils Diewald8d8641b2014-09-28 17:37:53 +000019import static org.junit.Assert.*;
Nils Diewald6aa929e2014-09-17 13:30:34 +000020
Nils Diewaldd723d812014-09-23 18:50:52 +000021public class TestDatabase {
Nils Diewald6aa929e2014-09-17 13:30:34 +000022
23 private Connection conn;
24 private Statement stat;
25
26 @Before
27 public void setUp() throws Exception {
28 Class.forName("org.sqlite.JDBC");
29 conn = DriverManager.getConnection("jdbc:sqlite::memory:");
30 this.stat = conn.createStatement();
31 stat.executeUpdate("CREATE TABLE IF NOT EXISTS people (name TEXT, age INTEGER);");
32 conn.setAutoCommit(false);
33 };
34
35 @Test
36 public void TestDatabase () throws Exception {
37 PreparedStatement prep = this.conn.prepareStatement(
38 "INSERT INTO people VALUES (?, ?);"
39 );
40
41 prep.setString(1, "Peter");
42 prep.setString(2, "24");
43 prep.addBatch();
44
45 prep.setString(1, "Klaus");
46 prep.setString(2, "31");
47 prep.addBatch();
48
49 prep.executeBatch();
50 conn.setAutoCommit(true);
51
52 ResultSet rs = stat.executeQuery("SELECT * FROM people;");
53
54 rs.next();
55
56 assertEquals(rs.getString("name"), "Peter");
57 assertEquals(rs.getInt("age"), 24);
58
59 rs.next();
60
61 assertEquals(rs.getString("name"), "Klaus");
62 assertEquals(rs.getInt("age"), 31);
63
64 rs.close();
65 };
66
Nils Diewaldf04e1002014-09-24 22:52:59 +000067 /*
68 * The following tests don't work well with in-memory dbs and
69 * temporary dbs - should be improved
70 */
71
Nils Diewald8d8641b2014-09-28 17:37:53 +000072 @Test
Nils Diewaldad3f3032014-09-24 01:42:47 +000073 public void TestDatabasePool () throws Exception {
74 ComboPooledDataSource cpds = new ComboPooledDataSource();
75 // Connect to a temporary file instead of a in-memory file
76 cpds.setDriverClass("org.sqlite.JDBC");
Nils Diewald8d8641b2014-09-28 17:37:53 +000077 cpds.setJdbcUrl("jdbc:sqlite:");
Nils Diewaldad3f3032014-09-24 01:42:47 +000078 cpds.setMaxStatements(100);
Nils Diewaldad3f3032014-09-24 01:42:47 +000079
80 // This is part of the match collector
81 this.conn = cpds.getConnection();
Nils Diewald8d8641b2014-09-28 17:37:53 +000082 conn.setAutoCommit(false);
Nils Diewaldad3f3032014-09-24 01:42:47 +000083 this.stat = conn.createStatement();
84 stat.executeUpdate(
85 "CREATE TABLE IF NOT EXISTS result_a (text_id INTEGER, match_count INTEGER);"
86 );
Nils Diewaldf04e1002014-09-24 22:52:59 +000087 // conn.setAutoCommit(false);
Nils Diewaldad3f3032014-09-24 01:42:47 +000088 PreparedStatement prep = this.conn.prepareStatement(
89 "INSERT INTO result_a VALUES (?, ?);"
90 );
91 prep.setInt(1, 5);
92 prep.setInt(2, 8000);
93 prep.addBatch();
94 prep.executeBatch();
95
96 ResultSet rs = stat.executeQuery("SELECT * FROM result_a;");
Nils Diewaldad3f3032014-09-24 01:42:47 +000097 rs.next();
Nils Diewaldad3f3032014-09-24 01:42:47 +000098 assertEquals(rs.getInt("text_id"), 5);
99 assertEquals(rs.getInt("match_count"), 8000);
Nils Diewaldad3f3032014-09-24 01:42:47 +0000100 rs.close();
101
Nils Diewaldad3f3032014-09-24 01:42:47 +0000102 MatchCollectorDB mc = new MatchCollectorDB(2000, "result_a");
Nils Diewald8d8641b2014-09-28 17:37:53 +0000103 mc.setDBPool("sqlite", cpds, this.conn);
Nils Diewaldad3f3032014-09-24 01:42:47 +0000104
105 mc.add(9, 5000);
106 mc.add(12, 6785);
107 mc.add(39, 56576);
108
Nils Diewald8d8641b2014-09-28 17:37:53 +0000109 mc.close(false);
Nils Diewaldad3f3032014-09-24 01:42:47 +0000110
Nils Diewald8d8641b2014-09-28 17:37:53 +0000111 rs = stat.executeQuery("SELECT * FROM result_a;");
112 assertTrue(rs.next());
113 assertEquals(rs.getInt("text_id"), 5);
114 assertEquals(rs.getInt("match_count"), 8000);
115 rs.next();
116 assertEquals(rs.getInt("text_id"), 9);
117 assertEquals(rs.getInt("match_count"), 5000);
118 rs.next();
119 assertEquals(rs.getInt("text_id"), 12);
120 assertEquals(rs.getInt("match_count"), 6785);
121 rs.next();
122 assertEquals(rs.getInt("text_id"), 39);
123 assertEquals(rs.getInt("match_count"), 56576);
124
125 rs.close();
Nils Diewaldad3f3032014-09-24 01:42:47 +0000126 };
127
Nils Diewald8d8641b2014-09-28 17:37:53 +0000128 @Test
129 public void TestDatabasePoolCollector () throws Exception {
Nils Diewaldf04e1002014-09-24 22:52:59 +0000130 ComboPooledDataSource cpds = new ComboPooledDataSource();
131 // Connect to a temporary file instead of a in-memory file
132 cpds.setDriverClass("org.sqlite.JDBC");
Nils Diewald8d8641b2014-09-28 17:37:53 +0000133 cpds.setJdbcUrl("jdbc:sqlite:");
Nils Diewaldf04e1002014-09-24 22:52:59 +0000134 cpds.setMaxStatements(100);
135
136 // This is part of the match collector
137 conn = cpds.getConnection();
Nils Diewald8d8641b2014-09-28 17:37:53 +0000138 conn.setAutoCommit(false);
139 Statement stat = conn.createStatement();
Nils Diewaldf04e1002014-09-24 22:52:59 +0000140 stat.executeUpdate(
Nils Diewald8d8641b2014-09-28 17:37:53 +0000141 "CREATE TABLE IF NOT EXISTS matchXYZ (text_id INTEGER, match_count INTEGER);"
Nils Diewaldf04e1002014-09-24 22:52:59 +0000142 );
Nils Diewald8d8641b2014-09-28 17:37:53 +0000143 conn.commit();
144 stat.close();
Nils Diewaldf04e1002014-09-24 22:52:59 +0000145
146 MatchCollectorDB mc = new MatchCollectorDB(3, "matchXYZ");
Nils Diewald8d8641b2014-09-28 17:37:53 +0000147 mc.setDBPool("sqlite", cpds, conn);
Nils Diewaldf04e1002014-09-24 22:52:59 +0000148
149 mc.add(9, 5000);
150 mc.add(12, 6785);
151 mc.add(39, 56576);
152 // First commit
153
154 mc.add(45, 5000);
155 mc.add(67, 6785);
156 mc.add(81, 56576);
157 // Second commit
158
159 mc.add(94, 456);
Nils Diewald8d8641b2014-09-28 17:37:53 +0000160 mc.close(false);
Nils Diewaldf04e1002014-09-24 22:52:59 +0000161 // Final commit
162
163 // conn = cpds.getConnection();
164 stat = conn.createStatement();
165 ResultSet rs = stat.executeQuery("SELECT count('*') AS num FROM matchXYZ;");
Nils Diewald8d8641b2014-09-28 17:37:53 +0000166
Nils Diewaldf04e1002014-09-24 22:52:59 +0000167 assertEquals(7, rs.getInt("num"));
Nils Diewald8d8641b2014-09-28 17:37:53 +0000168
169 rs = stat.executeQuery("SELECT text_id, match_count FROM matchXYZ;");
170 assertTrue(rs.next());
171
172 assertEquals(rs.getInt("text_id"), 9);
173 assertEquals(rs.getInt("match_count"), 5000);
174 assertTrue(rs.next());
175 assertEquals(rs.getInt("text_id"), 12);
176 assertEquals(rs.getInt("match_count"), 6785);
177 assertTrue(rs.next());
178 assertEquals(rs.getInt("text_id"), 39);
179 assertEquals(rs.getInt("match_count"), 56576);
180 assertTrue(rs.next());
181 assertEquals(rs.getInt("text_id"), 45);
182 assertEquals(rs.getInt("match_count"), 5000);
183 assertTrue(rs.next());
184 assertEquals(rs.getInt("text_id"), 67);
185 assertEquals(rs.getInt("match_count"), 6785);
186 assertTrue(rs.next());
187 assertEquals(rs.getInt("text_id"), 81);
188 assertEquals(rs.getInt("match_count"), 56576);
189 assertTrue(rs.next());
190 assertEquals(rs.getInt("text_id"), 94);
191 assertEquals(rs.getInt("match_count"), 456);
192 assertFalse(rs.next());
193
194 stat.close();
Nils Diewaldf04e1002014-09-24 22:52:59 +0000195 };
Nils Diewaldad3f3032014-09-24 01:42:47 +0000196
197 @Test
Nils Diewald6aa929e2014-09-17 13:30:34 +0000198 public void TestMatchCollectorDB () throws Exception {
199 MatchCollector mc = new MatchCollectorDB(2000, "matchXYZ");
200 mc.add(5,7);
201 mc.add(8,2);
202 mc.add(9,10);
203 mc.add(16,90);
204 mc.commit();
Nils Diewaldd723d812014-09-23 18:50:52 +0000205 assertEquals(mc.getTotalResults(), 109);
206 assertEquals(mc.getTotalResultDocs(), 4);
Nils Diewald6aa929e2014-09-17 13:30:34 +0000207 };
208
209 @After
210 public void shutDown () throws Exception {
211 this.conn.close();
212 };
213};