in phoenix-queryserver-it/src/it/java/org/apache/phoenix/end2end/QueryServerBasicsIT.java [230:275]
public void preparedStatementArrayTest() throws Exception {
final String tableName = name.getMethodName();
try (Connection conn = DriverManager.getConnection(CONN_STRING);
Statement stmt = conn.createStatement()) {
conn.setAutoCommit(false);
assertFalse(stmt.execute("DROP TABLE IF EXISTS " + tableName));
assertFalse(stmt.execute("CREATE TABLE " + tableName + " ("
+ "pk VARCHAR NOT NULL PRIMARY KEY, "
+ "histogram INTEGER[])")
);
conn.commit();
int numRows = 10;
int numEvenElements = 4;
int numOddElements = 6;
try (PreparedStatement pstmt = conn.prepareStatement("UPSERT INTO " + tableName + " values(?, ?)")) {
for (int i = 0; i < numRows; i++) {
pstmt.setString(1, Integer.toString(i));
int arrayLength = i % 2 == 0 ? numEvenElements : numOddElements;
Object[] arrayData = new Object[arrayLength];
for (int arrayOffset = 0; arrayOffset < arrayLength; arrayOffset++) {
arrayData[arrayOffset] = getArrayValueForOffset(arrayOffset);
}
pstmt.setArray(2, conn.createArrayOf("INTEGER", arrayData));
assertEquals(1, pstmt.executeUpdate());
}
conn.commit();
}
conn.commit();
try (ResultSet rs = stmt.executeQuery("SELECT * FROM " + tableName)) {
for (int i = 0; i < numRows; i++) {
assertTrue(rs.next());
assertEquals(i, Integer.parseInt(rs.getString(1)));
Array array = rs.getArray(2);
Object untypedArrayData = array.getArray();
assertTrue("Expected array data to be an int array, but was " + untypedArrayData.getClass(), untypedArrayData instanceof Object[]);
Object[] arrayData = (Object[]) untypedArrayData;
int expectedArrayLength = i % 2 == 0 ? numEvenElements : numOddElements;
assertEquals(expectedArrayLength, arrayData.length);
for (int arrayOffset = 0; arrayOffset < expectedArrayLength; arrayOffset++) {
assertEquals(getArrayValueForOffset(arrayOffset), arrayData[arrayOffset]);
}
}
assertFalse(rs.next());
}
}
}