@Override public boolean nextKeyValue() throws IOException, InterruptedException { if (key == null) { key = NullWritable.get(); } if (value == null) { value = ReflectionUtils.newInstance(inputClass, this.configuration); } Preconditions.checkNotNull(this.resultSet); try { if(!resultSet.next()) { return false; } value.readFields(resultSet); return true; } catch (SQLException e) { LOG.error(String.format(" Error [%s] occurred while iterating over the resultset. ",e.getMessage())); throw new RuntimeException(e); } }
public PhoenixResultSet newResultSet(ResultIterator iterator, RowProjector projector, StatementContext context) throws SQLException { return new PhoenixResultSet(iterator, projector, context); }
@Override public void close() throws IOException { if(resultSet != null) { try { resultSet.close(); } catch (SQLException e) { throw new IOException(e); } } } }
@Override public BigDecimal getBigDecimal(String columnLabel) throws SQLException { return getBigDecimal(findColumn(columnLabel)); }
@Override public Object getObject(String columnLabel, Map<String, Class<?>> map) throws SQLException { return getObject(findColumn(columnLabel), map); }
@Override public Timestamp getTimestamp(String columnLabel) throws SQLException { return getTimestamp(findColumn(columnLabel)); }
values[offset++] = tenantIdBytes; try (final PhoenixResultSet rs = new PhoenixResultSet(iterator, projector, context)) { ValueGetter getter = null; if (!otherTableRefs.isEmpty()) { while (rs.next()) { ImmutableBytesPtr rowKeyPtr = new ImmutableBytesPtr(); // allocate new as this is a key in a Map rs.getCurrentRow().getKey(rowKeyPtr);
@Override public boolean next() throws SQLException { checkOpen(); try { if (!firstRecordRead) { close(); }else{ count++; queryLogger.sync(getReadMetrics(), getOverAllRequestReadMetrics());
ValueGetter getter = getIndexValueGetter(rs, dataColNames); while (rs.next()) { rs.getCurrentRow().getKey(dataRowKeyPtr);
@Test public void testMapResultsResultSetClassOfR_Int() throws Exception { PhoenixProjectedResultMapper mapper = new PhoenixProjectedResultMapper(null); @SuppressWarnings("resource") PhoenixResultSet rs = mock(PhoenixResultSet.class); ResultSetMetaData rsMeta = mock(ResultSetMetaData.class); when(rs.getMetaData()).thenReturn(rsMeta); when(rs.next()).thenAnswer(new Answer<Boolean>() { boolean t = false; @Override public Boolean answer(InvocationOnMock invocation) throws Throwable { t = !t; return t; } }); when(rsMeta.getColumnCount()).thenReturn(1); when(rsMeta.getColumnName(1)).thenReturn("count"); when(rs.getObject(any())).thenReturn(new Integer(1000)); Iterable<Integer> intL = mapper.mapResults(rs, Integer.class); assertNotNull(intL); Iterator<Integer> it = intL.iterator(); assertTrue(it.next() == 1000); assertFalse(it.hasNext()); }
@Override public void readFields(ResultSet resultSet) throws SQLException { // we do this once per mapper. if(columnCount == -1) { this.columnCount = resultSet.getMetaData().getColumnCount(); } if (columnCount > 0) { this.rowTs = resultSet.unwrap(PhoenixResultSet.class).getCurrentRow().getValue(0).getTimestamp(); } values = Lists.newArrayListWithCapacity(columnCount); for(int i = 0 ; i < columnCount ; i++) { Object value = resultSet.getObject(i + 1); values.add(value); } }
@Test public void testReadMetricsForSelect() throws Exception { String tableName = generateUniqueName(); long numSaltBuckets = 6; String ddl = "CREATE TABLE " + tableName + " (K VARCHAR NOT NULL PRIMARY KEY, V VARCHAR)" + " SALT_BUCKETS = " + numSaltBuckets; Connection conn = DriverManager.getConnection(getUrl()); conn.createStatement().execute(ddl); long numRows = 1000; long numExpectedTasks = numSaltBuckets; insertRowsInTable(tableName, numRows); String query = "SELECT * FROM " + tableName; Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(query); PhoenixResultSet resultSetBeingTested = rs.unwrap(PhoenixResultSet.class); changeInternalStateForTesting(resultSetBeingTested); while (resultSetBeingTested.next()) {} resultSetBeingTested.close(); Set<String> expectedTableNames = Sets.newHashSet(tableName); assertReadMetricValuesForSelectSql(Lists.newArrayList(numRows), Lists.newArrayList(numExpectedTasks), resultSetBeingTested, expectedTableNames); }
@SuppressWarnings("unchecked") @Override public <T> T getObject(String columnLabel, Class<T> type) throws SQLException { return (T) getObject(columnLabel); // Just ignore type since we only support built-in types }
@Override public Date getDate(int columnIndex, Calendar cal) throws SQLException { checkCursorState(); Date value = (Date)rowProjector.getColumnProjector(columnIndex-1).getValue(currentRow, PDate.INSTANCE, ptr); wasNull = (value == null); if (wasNull) { return null; } cal.setTime(value); return new Date(cal.getTimeInMillis()); }
@Override public Array getArray(String columnLabel) throws SQLException { return getArray(findColumn(columnLabel)); }
@Override public byte[] getBytes(String columnLabel) throws SQLException { return getBytes(findColumn(columnLabel)); }
@Override public double getDouble(String columnLabel) throws SQLException { return getDouble(findColumn(columnLabel)); }
@Override public byte getByte(String columnLabel) throws SQLException { return getByte(findColumn(columnLabel)); }
@Override public Date getDate(String columnLabel) throws SQLException { return getDate(findColumn(columnLabel)); }