public JDBCConverter getConverter(final Field f) { return getConverter(f, f.pos() + 1); }
@SuppressWarnings("unchecked") protected IndexedRecordConverter<Object, ? extends IndexedRecord> getFactory(Object datum) { if (null == factory) { factory = (IndexedRecordConverter<Object, ? extends IndexedRecord>) JDBCAvroRegistry.get() .createIndexedRecordConverter(datum.getClass()); } return factory; }
@Override public Schema getSchema() throws IOException { try { return converter.getRegistry().inferSchema(rs.getMetaData()); } catch (SQLException e) { throw new IOException(e); } } });
Schema.Field outField = CommonUtils.getField(currentComponentSchema, setting.getReturnResultIn()); Schema.Field outFieldInOutputSchema = CommonUtils.getField(outputSchema, setting.getReturnResultIn()); outputFieldLocation2AvroConverter.put(outFieldInOutputSchema.pos(), JDBCAvroRegistry.get().getSPConverter(outField, 1)); Schema.Field outFieldInOutputSchema = CommonUtils.getField(outputSchema, columnName); outputFieldLocation2AvroConverter.put(outFieldInOutputSchema.pos(), JDBCAvroRegistry.get().getSPConverter(outField, i));
protected JDBCAvroRegistry getRegistry() { return JDBCAvroRegistry.get(); }
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); } }
} else if (isObject(basicSchema)) { return new JDBCConverter() {
@Override public Schema apply(JDBCTableMetadata t) { try { return inferSchemaResultSet(t); } catch (SQLException e) { throw new ComponentException(e); } }
@Override public Schema apply(ResultSetMetaData t) { try { return inferSchemaResultSetMetaData(t); } catch (SQLException e) { throw new ComponentException(e); } }
Schema.Field outField = CommonUtils.getField(currentComponentSchema, setting.getReturnResultIn()); Schema.Field outFieldInOutputSchema = CommonUtils.getField(outputSchema, setting.getReturnResultIn()); outputFieldLocation2AvroConverter.put(outFieldInOutputSchema.pos(), JDBCAvroRegistry.get().getSPConverter(outField, 1)); Schema.Field outFieldInOutputSchema = CommonUtils.getField(outputSchema, columnName); outputFieldLocation2AvroConverter.put(outFieldInOutputSchema.pos(), JDBCAvroRegistry.get().getSPConverter(outField, i));
protected JDBCAvroRegistry getRegistry() { return JDBCAvroRegistry.get(); }
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); } }
} else if (isObject(basicSchema)) { return new JDBCSPConverter() {
@Override public Schema apply(JDBCTableMetadata t) { try { return inferSchemaResultSet(t); } catch (SQLException e) { throw new ComponentException(e); } }
@Override public Schema apply(ResultSetMetaData t) { try { return inferSchemaResultSetMetaData(t); } catch (SQLException e) { throw new ComponentException(e); } }
public JDBCConverter getConverter(final Field f) { return getConverter(f, f.pos() + 1); }
@SuppressWarnings("unchecked") private IndexedRecordConverter<Object, ? extends IndexedRecord> getGenericIndexedRecordConverter(Object datum) { if (null == genericIndexedRecordConverter) { genericIndexedRecordConverter = (IndexedRecordConverter<Object, ? extends IndexedRecord>) JDBCAvroRegistry.get() .createIndexedRecordConverter(datum.getClass()); } return genericIndexedRecordConverter; }
@Override public Schema getSchema() throws IOException { try { return converter.getRegistry().inferSchema(rs.getMetaData()); } catch (SQLException e) { throw new IOException(e); } } });
} else if (isObject(basicSchema)) { return new JDBCSPConverter() {
@Override public void setSchema(Schema schema) { this.schema = schema; names = new String[getSchema().getFields().size()]; fieldConverter = new AvroConverter[names.length]; for (int j = 0; j < names.length; j++) { Field f = getSchema().getFields().get(j); names[j] = f.name(); JDBCAvroRegistry.JDBCConverter jdbcConverter = getRegistry().getConverter(f); if (influencer != null) { jdbcConverter.setInfluencer(influencer); } fieldConverter[j] = jdbcConverter; } }