import org.apache.drill.common.types.TypeProtos.MajorType; //導入方法依賴的package包/類
public void updateColumnMetaData(String catalogName, String schemaName,
String tableName, BatchSchema schema,
List> getObjectClasses ) {
final List newColumns =
new ArrayList(schema.getFieldCount());
for (int colOffset = 0; colOffset < schema.getFieldCount(); colOffset++) {
final MaterializedField field = schema.getColumn(colOffset);
Class> objectClass = getObjectClasses.get( colOffset );
final String columnName = field.getPath().getRootSegment().getPath();
final MajorType rpcDataType = field.getType();
final AvaticaType bundledSqlDataType = getAvaticaType(rpcDataType);
final String columnClassName = objectClass.getName();
final int nullability;
switch ( field.getDataMode() ) {
case OPTIONAL: nullability = ResultSetMetaData.columnNullable; break;
case REQUIRED: nullability = ResultSetMetaData.columnNoNulls; break;
// Should REPEATED still map to columnNoNulls? or to columnNullable?
case REPEATED: nullability = ResultSetMetaData.columnNoNulls; break;
default:
throw new AssertionError( "Unexpected new DataMode value '"
+ field.getDataMode().name() + "'" );
}
final boolean isSigned = Types.isJdbcSignedType( rpcDataType );
// TODO(DRILL-3355): TODO(DRILL-3356): When string lengths, precisions,
// interval kinds, etc., are available from RPC-level data, implement:
// - precision for ResultSetMetadata.getPrecision(...) (like
// getColumns()'s COLUMN_SIZE)
// - scale for getScale(...), and
// - and displaySize for getColumnDisplaySize(...).
final int precision =
rpcDataType.hasPrecision() ? rpcDataType.getPrecision() : 0;
final int scale = rpcDataType.hasScale() ? rpcDataType.getScale() : 0;
final int displaySize = 10;
ColumnMetaData col = new ColumnMetaData(
colOffset, // (zero-based ordinal (for Java arrays/lists).)
false, /* autoIncrement */
false, /* caseSensitive */
true, /* searchable */
false, /* currency */
nullability,
isSigned,
displaySize,
columnName, /* label */
columnName, /* columnName */
schemaName,
precision,
scale,
tableName,
catalogName,
bundledSqlDataType,
true, /* readOnly */
false, /* writable */
false, /* definitelyWritable */
columnClassName
);
newColumns.add(col);
}
columns = newColumns;
}