@Override public String getColumnName(int column) throws SQLException { // TODO: will return alias if there is one return rowProjector.getColumnProjector(column-1).getName(); }
@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 BigDecimal getBigDecimal(int columnIndex) throws SQLException { checkCursorState(); BigDecimal value = (BigDecimal)rowProjector.getColumnProjector(columnIndex-1).getValue(currentRow, PDecimal.INSTANCE, ptr); wasNull = (value == null); return value; }
@Override public int getInt(int columnIndex) throws SQLException { checkCursorState(); Integer value = (Integer)rowProjector.getColumnProjector(columnIndex-1).getValue(currentRow, PInteger.INSTANCE, ptr); wasNull = (value == null); if (value == null) { return 0; } return value; }
@Override public Time getTime(int columnIndex) throws SQLException { checkCursorState(); Time value = (Time)rowProjector.getColumnProjector(columnIndex-1).getValue(currentRow, PTime.INSTANCE, ptr); wasNull = (value == null); return value; }
@Override public byte getByte(int columnIndex) throws SQLException { // throw new SQLFeatureNotSupportedException(); checkCursorState(); Byte value = (Byte)rowProjector.getColumnProjector(columnIndex-1).getValue(currentRow, PTinyint.INSTANCE, ptr); wasNull = (value == null); if (value == null) { return 0; } return value; }
@Override public short getShort(int columnIndex) throws SQLException { checkCursorState(); Short value = (Short)rowProjector.getColumnProjector(columnIndex-1).getValue(currentRow, PSmallint.INSTANCE, ptr); wasNull = (value == null); if (value == null) { return 0; } return value; }
@Override public long getLong(int columnIndex) throws SQLException { checkCursorState(); Long value = (Long)rowProjector.getColumnProjector(columnIndex-1).getValue(currentRow, PLong.INSTANCE, ptr); wasNull = (value == null); if (value == null) { return 0; } return value; }
@Override public byte[] getBytes(int columnIndex) throws SQLException { checkCursorState(); byte[] value = (byte[])rowProjector.getColumnProjector(columnIndex-1).getValue(currentRow, PVarbinary.INSTANCE, ptr); wasNull = (value == null); return value; }
@Override public Timestamp getTimestamp(int columnIndex) throws SQLException { checkCursorState(); Timestamp value = (Timestamp)rowProjector.getColumnProjector(columnIndex-1).getValue(currentRow, PTimestamp.INSTANCE, ptr); wasNull = (value == null); return value; }
@Override public int getScale(int column) throws SQLException { Integer scale = rowProjector.getColumnProjector(column-1).getExpression().getScale(); return scale == null ? 0 : scale; }
@Override public float getFloat(int columnIndex) throws SQLException { checkCursorState(); Float value = (Float)rowProjector.getColumnProjector(columnIndex-1).getValue(currentRow, PFloat.INSTANCE, ptr); wasNull = (value == null); if (value == null) { return 0; } return value; }
@Override public int getPrecision(int column) throws SQLException { Integer precision = rowProjector.getColumnProjector(column-1).getExpression().getMaxLength(); return precision == null ? 0 : precision; }
@Override public String getColumnTypeName(int column) throws SQLException { PDataType type = rowProjector.getColumnProjector(column-1).getExpression().getDataType(); return type == null ? null : type.getSqlTypeName(); }
@Override public String getColumnClassName(int column) throws SQLException { PDataType type = rowProjector.getColumnProjector(column-1).getExpression().getDataType(); return type == null ? null : type.getJavaClassName(); }
@Override public boolean isSigned(int column) throws SQLException { PDataType type = rowProjector.getColumnProjector(column-1).getExpression().getDataType(); if (type == null) { return false; } return type.isCoercibleTo(PDecimal.INSTANCE); }
@Override public int getColumnType(int column) throws SQLException { PDataType type = rowProjector.getColumnProjector(column-1).getExpression().getDataType(); return type == null ? Types.NULL : type.getResultSetSqlType(); }
@Override public Array getArray(int columnIndex) throws SQLException { checkCursorState(); // Get the value using the expected type instead of trying to coerce to VARCHAR. // We can't coerce using our formatter because we don't have enough context in PDataType. ColumnProjector projector = rowProjector.getColumnProjector(columnIndex-1); Array value = (Array)projector.getValue(currentRow, projector.getExpression().getDataType(), ptr); wasNull = (value == null); return value; }
@Override public Object getObject(int columnIndex) throws SQLException { checkCursorState(); ColumnProjector projector = rowProjector.getColumnProjector(columnIndex-1); Object value = projector.getValue(currentRow, projector.getExpression().getDataType(), ptr); wasNull = (value == null); return value; }
private static void assertLiteralEquals(Object o, RowProjector p, int i) { assertTrue(i < p.getColumnCount()); Expression e = p.getColumnProjector(i).getExpression(); assertTrue(e instanceof LiteralExpression); LiteralExpression l = (LiteralExpression)e; Object lo = l.getValue(); assertEquals(o, lo); }