@Override public boolean isSigned(final int column) throws SQLException { return resultSetMetaData.isSigned(column); }
@Override public boolean isSigned(int column) throws InvalidResultSetAccessException { try { return this.resultSetMetaData.isSigned(column); } catch (SQLException se) { throw new InvalidResultSetAccessException(se); } }
@Override public boolean resultSetMetaData_isSigned(ResultSetMetaDataProxy metaData, int column) throws SQLException { if (this.pos < filterSize) { return nextFilter().resultSetMetaData_isSigned(this, metaData, column); } return metaData.getResultSetMetaDataRaw().isSigned(column); }
private Pair<List<List<String>>, List<SelectedColumnMeta>> createResponseFromResultSet(ResultSet resultSet) throws Exception { List<List<String>> results = Lists.newArrayList(); List<SelectedColumnMeta> columnMetas = Lists.newArrayList(); ResultSetMetaData metaData = resultSet.getMetaData(); int columnCount = metaData.getColumnCount(); // Fill in selected column meta for (int i = 1; i <= columnCount; ++i) { columnMetas.add(new SelectedColumnMeta(metaData.isAutoIncrement(i), metaData.isCaseSensitive(i), metaData.isSearchable(i), metaData.isCurrency(i), metaData.isNullable(i), metaData.isSigned(i), metaData.getColumnDisplaySize(i), metaData.getColumnLabel(i), metaData.getColumnName(i), metaData.getSchemaName(i), metaData.getCatalogName(i), metaData.getTableName(i), metaData.getPrecision(i), metaData.getScale(i), metaData.getColumnType(i), metaData.getColumnTypeName(i), metaData.isReadOnly(i), metaData.isWritable(i), metaData.isDefinitelyWritable(i))); } // fill in results while (resultSet.next()) { List<String> oneRow = Lists.newArrayListWithCapacity(columnCount); for (int i = 0; i < columnCount; i++) { oneRow.add((resultSet.getString(i + 1))); } results.add(oneRow); } return new Pair<>(results, columnMetas); }
@Test public void test_isSigned_forBOOLEAN() throws SQLException { assertThat( rowMetadata.isSigned( ordOptBOOLEAN ), equalTo( false ) ); }
@Test public void test_isSigned_forDOUBLE() throws SQLException { assertThat( rowMetadata.isSigned( ordReqDOUBLE ), equalTo( true ) ); }
@Test public void test_isSigned_forTIMESTAMP_4() throws SQLException { assertThat( rowMetadata.isSigned( ordReqTIMESTAMP_4 ), equalTo( false ) ); }
@Test public void test_isSigned_forINTERVAL_Y() throws SQLException { assertThat( rowMetadata.isSigned( ordReqINTERVAL_Y ), equalTo( true ) ); }
@Test public void test_isSigned_forVARCHAR() throws SQLException { assertThat( rowMetadata.isSigned( ordReqVARCHAR_10 ), equalTo( false ) ); }
@Test public void test_isSigned_forTIME_2() throws SQLException { assertThat( rowMetadata.isSigned( ordReqTIME_2 ), equalTo( false ) ); }
@Test public void test_isSigned_forINTEGER() throws SQLException { assertThat( rowMetadata.isSigned( ordReqINTEGER ), equalTo( true ) ); }
@Test public void test_isSigned_forDECIMAL_5_3() throws SQLException { assertThat( rowMetadata.isSigned( ordReqDECIMAL_5_3 ), equalTo( true ) ); }
@Test public void test_isSigned_forDate() throws SQLException { assertThat( rowMetadata.isSigned( ordReqDATE ), equalTo( false ) ); }
originalSigned = rm.isSigned( index ); } catch ( Exception ignored ) {
@Test public void testConvertToAvroStreamForNumbers() throws SQLException, IOException { final ResultSetMetaData metadata = mock(ResultSetMetaData.class); when(metadata.getColumnCount()).thenReturn(1); when(metadata.getColumnType(1)).thenReturn(testParams.sqlType); when(metadata.isSigned(1)).thenReturn(testParams.signed); when(metadata.getPrecision(1)).thenReturn(testParams.precision); when(metadata.getColumnName(1)).thenReturn("t_int"); when(metadata.getTableName(1)).thenReturn("table"); final ResultSet rs = resultSetReturningMetadata(metadata); final int ret = 0; when(rs.getObject(Mockito.anyInt())).thenReturn(ret); final InputStream instream = convertResultSetToAvroInputStream(rs); final DatumReader<GenericRecord> datumReader = new GenericDatumReader<>(); try (final DataFileStream<GenericRecord> dataFileReader = new DataFileStream<>(instream, datumReader)) { GenericRecord record = null; while (dataFileReader.hasNext()) { record = dataFileReader.next(record); assertEquals(Integer.toString(ret), record.get("t_int").toString()); } } } }
@Test @Ignore( "TODO(DRILL-3368): unignore when VARBINARY is implemented enough" ) public void test_isSigned_forBINARY_1048576() throws SQLException { assertThat( rowMetadata.isSigned( ordOptBINARY_1048576 ), equalTo( false ) ); }
@Test public void testConvertToAvroStreamForUnsignedIntegerWithPrecision10() throws SQLException, IOException { final String mockColumnName = "t_int"; final ResultSetMetaData metadata = mock(ResultSetMetaData.class); when(metadata.getColumnCount()).thenReturn(1); when(metadata.getColumnType(1)).thenReturn(Types.INTEGER); when(metadata.isSigned(1)).thenReturn(false); when(metadata.getPrecision(1)).thenReturn(10); when(metadata.getColumnName(1)).thenReturn(mockColumnName); when(metadata.getTableName(1)).thenReturn("table"); final ResultSet rs = resultSetReturningMetadata(metadata); final Long ret = 0L; when(rs.getObject(Mockito.anyInt())).thenReturn(ret); final InputStream instream = convertResultSetToAvroInputStream(rs); final DatumReader<GenericRecord> datumReader = new GenericDatumReader<>(); try (final DataFileStream<GenericRecord> dataFileReader = new DataFileStream<>(instream, datumReader)) { GenericRecord record = null; while (dataFileReader.hasNext()) { record = dataFileReader.next(record); assertEquals(Long.toString(ret), record.get(mockColumnName).toString()); } } }
@Test public void testConvertToAvroStreamForUnsignedIntegerWithPrecision1ReturnedAsLong_NIFI5612() throws SQLException, IOException { final String mockColumnName = "t_int"; final ResultSetMetaData metadata = mock(ResultSetMetaData.class); when(metadata.getColumnCount()).thenReturn(1); when(metadata.getColumnType(1)).thenReturn(Types.INTEGER); when(metadata.isSigned(1)).thenReturn(false); when(metadata.getPrecision(1)).thenReturn(1); when(metadata.getColumnName(1)).thenReturn(mockColumnName); when(metadata.getTableName(1)).thenReturn("table"); final ResultSet rs = resultSetReturningMetadata(metadata); final Long ret = 0L; when(rs.getObject(Mockito.anyInt())).thenReturn(ret); final InputStream instream = convertResultSetToAvroInputStream(rs); final DatumReader<GenericRecord> datumReader = new GenericDatumReader<>(); try (final DataFileStream<GenericRecord> dataFileReader = new DataFileStream<>(instream, datumReader)) { GenericRecord record = null; while (dataFileReader.hasNext()) { record = dataFileReader.next(record); assertEquals(Long.toString(ret), record.get(mockColumnName).toString()); } } }
private static String toString(ResultSetMetaData metadata, int colNum) throws SQLException { return "ResultSetMetaData(" + colNum + ")[" + "columnName='" + metadata.getColumnName(colNum) + '\'' + ", type='" + metadata.getColumnType(colNum) + '\'' + ", nullable=" + metadata.isNullable(colNum) + ", displaySize=" + metadata.getColumnDisplaySize(colNum) + ", precision=" + metadata.getPrecision(colNum) + ", scale=" + metadata.getScale(colNum) + ", signed=" + metadata.isSigned(colNum) + ", className='" + metadata.getColumnClassName(colNum) + '\'' + ']'; } private static class ExpectedColumnResult {
boolean isEqualsTo(ResultSetMetaData metadata, int colNum) throws SQLException { return metadata.getCatalogName(colNum).equals(InfoSchemaConstants.IS_CATALOG_NAME) && metadata.getSchemaName(colNum).isEmpty() && metadata.getTableName(colNum).isEmpty() && metadata.getColumnName(colNum).equals(columnName) && metadata.getColumnLabel(colNum).equals(columnName) && metadata.getColumnType(colNum) == type && metadata.isNullable(colNum) == nullable && // There is an existing bug where query results doesn't contain the precision for VARCHAR field. //metadata.getPrecision(colNum) == precision && metadata.getScale(colNum) == scale && metadata.isSigned(colNum) == signed && metadata.getColumnDisplaySize(colNum) == displaySize && metadata.getColumnClassName(colNum).equals(className) && metadata.isSearchable(colNum) && metadata.isAutoIncrement(colNum) == false && metadata.isCaseSensitive(colNum) == false && metadata.isReadOnly(colNum) && metadata.isWritable(colNum) == false && metadata.isDefinitelyWritable(colNum) == false && metadata.isCurrency(colNum) == false; }