3
import java.sql.Connection;
4
import java.sql.PreparedStatement;
5
import java.sql.ResultSet;
6
import java.sql.SQLException;
7
import java.util.ArrayList;
10
import com.mysql.clusterj.Session;
12
import testsuite.clusterj.AbstractClusterJModelTest;
13
import testsuite.clusterj.model.AllPrimitives;
15
public abstract class JDBCQueryTest extends AbstractClusterJModelTest {
18
public void localSetUp() {
19
// initialize the jdbc driver
24
createInstances(getNumberOfInstances());
29
public void localTearDown() {
33
abstract public void createInstances(int numberOfInstances);
35
public void createAllPrimitiveInstance(int i) {
36
String sql = "insert into allprimitives (id, "
37
+ "int_not_null_hash,"
38
+ "int_not_null_btree,"
39
+ "int_not_null_both,"
40
+ "int_not_null_none,"
45
+ "byte_not_null_hash,"
46
+ "byte_not_null_btree,"
47
+ "byte_not_null_both,"
48
+ "byte_not_null_none,"
53
+ "short_not_null_hash,"
54
+ "short_not_null_btree,"
55
+ "short_not_null_both,"
56
+ "short_not_null_none,"
61
+ "long_not_null_hash,"
62
+ "long_not_null_btree,"
63
+ "long_not_null_both,"
64
+ "long_not_null_none,"
69
+ " values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?" +
70
", ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
71
if (getDebug()) System.out.println(sql);
72
PreparedStatement statement = prepareStatement(connection, sql);
73
int actual = executeUpdate(statement, Integer.valueOf(i),
74
Integer.valueOf(i), Integer.valueOf(i), Integer.valueOf(i), Integer.valueOf(i),
75
Integer.valueOf(i), Integer.valueOf(i), Integer.valueOf(i), Integer.valueOf(i),
76
Byte.valueOf((byte)i), Byte.valueOf((byte)i), Byte.valueOf((byte)i), Byte.valueOf((byte)i),
77
Byte.valueOf((byte)i), Byte.valueOf((byte)i), Byte.valueOf((byte)i), Byte.valueOf((byte)i),
78
Short.valueOf((short)i), Short.valueOf((short)i), Short.valueOf((short)i), Short.valueOf((short)i),
79
Short.valueOf((short)i), Short.valueOf((short)i), Short.valueOf((short)i), Short.valueOf((short)i),
80
Long.valueOf((long)i), Long.valueOf((long)i), Long.valueOf((long)i), Long.valueOf((long)i),
81
Long.valueOf((long)i), Long.valueOf((long)i), Long.valueOf((long)i), Long.valueOf((long)i));
82
errorIfNotEqual("createAllPrimitiveInstance: Mismatch on number of instances inserted ", 1, actual);
85
/** Most query tests use the same number of instances (10).
89
protected int getNumberOfInstances() {
93
protected void betweenQuery(String column, String expectedIndex, Object low, Object high, int... expected) {
94
String sql = "select id from " + tableName() + " where " + column + " between ? and ?";
95
if(getDebug()) System.out.println(sql);
96
PreparedStatement statement = prepareStatement(connection, sql);
97
int[] actual = executeQuery(statement, low, high);
99
errorIfNotEqual("betweenQuery: Mismatch on betweenQuery", expected, actual);
102
protected void equalQuery(String column, String expectedIndex, int parameter, int... expected) {
103
String sql = "select id from " + tableName() + " where " + column + " = ?";
104
if (getDebug()) System.out.println(sql);
105
PreparedStatement statement = prepareStatement(connection, sql);
106
int[] actual = executeQuery(statement, parameter);
108
errorIfNotEqual("equalQuery: Mismatch on equalQuery", expected, actual);
111
protected void deleteAll() {
112
String sql = "delete from " + tableName();
113
if (getDebug()) System.out.println(sql);
114
PreparedStatement statement = prepareStatement(connection, sql);
115
int actual = executeUpdate(statement);
116
if (getDebug()) System.out.println("deleteAll deleted " + actual + " instances.");
120
protected void deleteEqualQuery(String column, String expectedIndex, int i, int expected) {
121
String sql = "delete from " + tableName() + " where " + column + " = ?";
122
if (getDebug()) System.out.println(sql);
123
PreparedStatement statement = prepareStatement(connection, sql);
124
int actual = executeUpdate(statement, i);
126
errorIfNotEqual("deleteEqualQuery: Mismatch on number of instances deleted ", expected, actual);
129
protected void deleteGreaterThanAndLessThanQuery(String column, String expectedIndex, int i, int j, int expected) {
130
String sql = "delete from " + tableName() + " where " + column + " > ? and " + column + " < ?";
131
if (getDebug()) System.out.println(sql);
132
PreparedStatement statement = prepareStatement(connection, sql);
133
int actual = executeUpdate(statement, i, j);
135
errorIfNotEqual("deleteGreaterThanAndLessThanQuery: Mismatch on number of instances deleted ",
139
private PreparedStatement prepareStatement(Connection connection, String sql) {
141
return connection.prepareStatement(sql);
142
} catch (SQLException e) {
143
error("Caught exception " + e.getMessage());
148
private void commit(Connection connection) {
151
} catch (SQLException e) {
152
// TODO Auto-generated catch block
157
private int[] executeQuery(PreparedStatement statement, Object... parameters) {
161
for (Object parameter: parameters) {
162
setObject(statement, index++, parameter);
164
List<Integer> results = new ArrayList<Integer>();
165
ResultSet resultSet = statement.executeQuery();
166
while (resultSet.next()) {
167
results.add(resultSet.getInt(1));
169
result = new int[results.size()];
170
for (int i = 0; i < results.size(); ++i) {
171
result[i] = results.get(i);
173
} catch (SQLException e) {
179
private void setObject(PreparedStatement statement, int parameterIndex, Object x) throws SQLException {
180
if (x instanceof Integer) {
181
statement.setInt(parameterIndex, (Integer)x);
183
} else if (x instanceof Byte) {
184
statement.setByte(parameterIndex, (Byte)x);
186
} else if (x instanceof Short) {
187
statement.setShort(parameterIndex, (Short)x);
189
} else if (x instanceof Long) {
190
statement.setLong(parameterIndex, (Long)x);
193
throw new RuntimeException("Object is of unsupported type " + x.getClass().getName());
196
private int executeUpdate(PreparedStatement statement, Object... parameters) {
200
for (Object parameter: parameters) {
201
setObject(statement, index++, parameter);
203
result = statement.executeUpdate();
204
} catch (SQLException e) {
205
// TODO Auto-generated catch block
211
public String tableName() {
215
protected void createAllPrimitivesInstances(Session session, int number) {
216
for (int i = 0; i < number; ++i) {
217
AllPrimitives instance = createAllPrimitiveInstance(session, i);
218
instances.add(instance);
222
protected AllPrimitives createAllPrimitiveInstance(Session session, int i) {
223
AllPrimitives instance = session.newInstance(AllPrimitives.class, i);
224
initialize(instance, i);