@Override public boolean isAutoIncrement(final int column) throws SQLException { return resultSetMetaData.isAutoIncrement(column); }
@Override public void handleGeneratedKeys(PreparedStatement ps, LongConsumer longConsumer) throws SQLException { /* * There does not seem to be any way to find the generated keys from a Postgres JDBC driver * since getGeneratedKeys() returns the whole set of columns. This causes * bug #293 "The postgresql throws an exception when the PRIMARY KEY is not type long." * * See http://stackoverflow.com/questions/19766816/postgresql-jdbc-getgeneratedkeys-returns-all-columns * * Below we instead handle auto generated fields that can be retrieved as Long. This fix clearly only * works for generated fields that are also auto generated. */ try (final ResultSet generatedKeys = ps.getGeneratedKeys()) { while (generatedKeys.next()) { final int columnType = generatedKeys.getMetaData().getColumnType(1); if (generatedKeys.getMetaData().isAutoIncrement(1) && LONG_GETTABLE_TYPES.contains(columnType)) { longConsumer.accept(generatedKeys.getLong(1)); //sqlStatement.addGeneratedKey(generatedKeys.getLong(1)); } } } }
@Override public boolean resultSetMetaData_isAutoIncrement(ResultSetMetaDataProxy metaData, int column) throws SQLException { if (this.pos < filterSize) { return nextFilter().resultSetMetaData_isAutoIncrement(this, metaData, column); } return metaData.getResultSetMetaDataRaw().isAutoIncrement(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); }
@Override public void executeQuery(String sql, List<List<String>> results, List<SelectedColumnMeta> columnMetas) { //extract column metadata ResultSet rs = null; ResultSetMetaData metaData; int columnCount; try (Connection conn = dataSource.getConnection(); Statement state = conn.createStatement()) { rs = state.executeQuery(sql); extractResults(rs, results); metaData = rs.getMetaData(); columnCount = metaData.getColumnCount(); // fill in selected column meta for (int i = 1; i <= columnCount; ++i) { int kylinTypeId = dataSource.toKylinTypeId(metaData.getColumnTypeName(i), metaData.getColumnType(i)); String kylinTypeName = dataSource.toKylinTypeName(kylinTypeId); columnMetas.add(new SelectedColumnMeta(metaData.isAutoIncrement(i), metaData.isCaseSensitive(i), false, metaData.isCurrency(i), metaData.isNullable(i), false, metaData.getColumnDisplaySize(i), metaData.getColumnLabel(i), metaData.getColumnName(i), null, null, null, metaData.getPrecision(i), metaData.getScale(i), kylinTypeId, kylinTypeName, metaData.isReadOnly(i), false, false)); } } catch (Exception e) { throw new RuntimeException("executeQuery failed", e); } finally { DBUtils.closeQuietly(rs); } }
@Test public void test_isAutoIncrement_returnsFalse() throws SQLException { assertThat( rowMetadata.isAutoIncrement( ordOptBOOLEAN ), equalTo( false ) ); }
m.getScale(i), m.getColumnDisplaySize(i), m.isAutoIncrement(i), m.isCaseSensitive(i), m.isCurrency(i),
/** * Determine the column definitions for the supplied result set and add each column to the specified consumer. * * @param resultSet the query result set; may not be null * @param consumer the consumer of the definitions; may not be null * @throws SQLException if an error occurs while using the result set */ public static void columnsFor(ResultSet resultSet, Consumer<Column> consumer) throws SQLException { ResultSetMetaData metadata = resultSet.getMetaData(); ColumnEditor column = Column.editor(); for (int position = 1; position <= metadata.getColumnCount(); ++position) { String columnLabel = metadata.getColumnLabel(position); column.name(columnLabel != null ? columnLabel : metadata.getColumnName(position)); column.type(metadata.getColumnTypeName(position)); column.jdbcType(metadata.getColumnType(position)); column.length(metadata.getPrecision(position)); column.scale(metadata.getScale(position)); column.optional(isNullable(metadata.isNullable(position))); column.autoIncremented(metadata.isAutoIncrement(position)); column.generated(false); consumer.accept(column.create()); } }
public boolean isAutoIncrement(int ordinal) throws SQLException { return tableMetadata.isAutoIncrement(ordinal); } }
private SelectedColumnMeta extractColumnMeta(ResultSetMetaData resultSetMetaData, int columnIndex) throws SQLException { boolean isAutoIncrement = false; try { isAutoIncrement = resultSetMetaData.isAutoIncrement(columnIndex); } catch (SQLException e) {
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; }
ResultSetMetaData md = viewResults.getMetaData(); for (int i = 1; i <= md.getColumnCount(); i++) { if (md.isAutoIncrement(i)) { String columnLabel;
@Override public boolean resultSetMetaData_isAutoIncrement(ResultSetMetaDataProxy metaData, int column) throws SQLException { if (this.pos < filterSize) { return nextFilter().resultSetMetaData_isAutoIncrement(this, metaData, column); } return metaData.getResultSetMetaDataRaw().isAutoIncrement(column); }
if (rs.getMetaData().isAutoIncrement(1)) { col = new AutoGeneratedPrimaryKeyColumn(columnName, columnType);
throw new InconsistencyException("Column information from DatabaseMetaData differs from ResultSetMetaData, expected to find column named: "+ columnName); column.setIsAutoUpdated(rsMeta.isAutoIncrement(i));
if (rs.getMetaData().isAutoIncrement(1)) { col = new AutoGeneratedPrimaryKeyColumn(columnName, columnType);
private boolean isAutoIncrement(ResultSetMetaData rsmd, int i, List<String> sequenceNames, String tableName, String fieldName) throws SQLException { boolean autoIncrement = rsmd.isAutoIncrement(i); if (!autoIncrement) { autoIncrement = isUsingSequence(sequenceNames, tableName, fieldName); } return autoIncrement; }
@Override public boolean isKey() { try { return this.resultSetMetaData.isAutoIncrement(this.index); } catch (final SQLException exception) { throw new UnreachableCodeReachedException(); } }
column.setAutoIncrement(resultsMetaData.isAutoIncrement(i)); column.setCaseSensitive(resultsMetaData.isCaseSensitive(i)); column.setCurrency(resultsMetaData.isCurrency(i));
column.setAutoIncrement(resultsMetaData.isAutoIncrement(i)); column.setCaseSensitive(resultsMetaData.isCaseSensitive(i)); column.setCurrency(resultsMetaData.isCurrency(i));