in phoenix-queryserver-it/src/it/java/org/apache/phoenix/end2end/QueryServerBasicsIT.java [183:227]
public void arrayTest() 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;
for (int i = 0; i < numRows; i++) {
int arrayLength = i % 2 == 0 ? numEvenElements : numOddElements;
StringBuilder sb = new StringBuilder();
for (int arrayOffset = 0; arrayOffset < arrayLength; arrayOffset++) {
if (sb.length() > 0) {
sb.append(", ");
}
sb.append(getArrayValueForOffset(arrayOffset));
}
String updateSql = "UPSERT INTO " + tableName + " values('" + i + "', " + "ARRAY[" + sb.toString() + "])";
assertEquals(1, stmt.executeUpdate(updateSql));
}
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());
}
}
}