protected Schema inferSchemaResultSetMetaData(ResultSetMetaData metadata) throws SQLException { List<Field> fields = new ArrayList<>(); int count = metadata.getColumnCount(); for (int i = 1; i <= count; i++) { int size = metadata.getPrecision(i); int scale = metadata.getScale(i); boolean nullable = ResultSetMetaData.columnNullable == metadata.isNullable(i); int dbtype = metadata.getColumnType(i); String fieldName = metadata.getColumnLabel(i); String dbColumnName = metadata.getColumnName(i); // not necessary for the result schema from the query statement boolean isKey = false; Field field = sqlType2Avro(size, scale, dbtype, nullable, fieldName, dbColumnName, null, isKey); fields.add(field); } return Schema.createRecord("DYNAMIC", null, null, false, fields); }
protected Schema inferSchemaResultSetMetaData(ResultSetMetaData metadata) throws SQLException { List<Field> fields = new ArrayList<>(); int count = metadata.getColumnCount(); for (int i = 1; i <= count; i++) { int size = metadata.getPrecision(i); int scale = metadata.getScale(i); boolean nullable = ResultSetMetaData.columnNullable == metadata.isNullable(i); int dbtype = metadata.getColumnType(i); String fieldName = metadata.getColumnLabel(i); String dbColumnName = metadata.getColumnName(i); // not necessary for the result schema from the query statement boolean isKey = false; Field field = sqlType2Avro(size, scale, dbtype, nullable, fieldName, dbColumnName, null, isKey); fields.add(field); } return Schema.createRecord("DYNAMIC", null, null, false, fields); }
protected Schema inferSchemaResultSet(JDBCTableMetadata tableMetadata) throws SQLException { DatabaseMetaData databaseMetdata = tableMetadata.getDatabaseMetaData(); Set<String> keys = getPrimaryKeys(databaseMetdata, tableMetadata.getCatalog(), tableMetadata.getDbSchema(), tableMetadata.getTablename()); try (ResultSet metadata = databaseMetdata.getColumns(tableMetadata.getCatalog(), tableMetadata.getDbSchema(), tableMetadata.getTablename(), null)) { if (!metadata.next()) { return null; } List<Field> fields = new ArrayList<>(); String tablename = metadata.getString("TABLE_NAME"); do { int size = metadata.getInt("COLUMN_SIZE"); int scale = metadata.getInt("DECIMAL_DIGITS"); int dbtype = metadata.getInt("DATA_TYPE"); boolean nullable = DatabaseMetaData.columnNullable == metadata.getInt("NULLABLE"); String columnName = metadata.getString("COLUMN_NAME"); boolean isKey = keys.contains(columnName); String defaultValue = metadata.getString("COLUMN_DEF"); Field field = sqlType2Avro(size, scale, dbtype, nullable, columnName, columnName, defaultValue, isKey); fields.add(field); } while (metadata.next()); return Schema.createRecord( AvroNamesValidationHelper.getAvroCompatibleName(NameUtil.correct(tablename, 0, Collections.<String>emptySet())), null, null, false, fields); } }
protected Schema inferSchemaResultSet(JDBCTableMetadata tableMetadata) throws SQLException { DatabaseMetaData databaseMetdata = tableMetadata.getDatabaseMetaData(); Set<String> keys = getPrimaryKeys(databaseMetdata, tableMetadata.getCatalog(), tableMetadata.getDbSchema(), tableMetadata.getTablename()); try (ResultSet metadata = databaseMetdata.getColumns(tableMetadata.getCatalog(), tableMetadata.getDbSchema(), tableMetadata.getTablename(), null)) { if (!metadata.next()) { return null; } List<Field> fields = new ArrayList<>(); String tablename = metadata.getString("TABLE_NAME"); do { int size = metadata.getInt("COLUMN_SIZE"); int scale = metadata.getInt("DECIMAL_DIGITS"); int dbtype = metadata.getInt("DATA_TYPE"); boolean nullable = DatabaseMetaData.columnNullable == metadata.getInt("NULLABLE"); String columnName = metadata.getString("COLUMN_NAME"); boolean isKey = keys.contains(columnName); String defaultValue = metadata.getString("COLUMN_DEF"); Field field = sqlType2Avro(size, scale, dbtype, nullable, columnName, columnName, defaultValue, isKey); fields.add(field); } while (metadata.next()); return Schema.createRecord( AvroNamesValidationHelper.getAvroCompatibleName(NameUtil.correct(tablename, 0, Collections.<String>emptySet())), null, null, false, fields); } }