private void addColumn(Table table, String schema, String tableName, String columnName, FieldType fieldType) {
List<TableColumn> existingColumns = dao.listTableColumns(schema, tableName);
TableColumn lastColumn = existingColumns.get(existingColumns.size() - 1);
long columnId = lastColumn.getColumnId() + 1;
int ordinalPosition = existingColumns.size();
String type = TypeSignature.parseTypeSignature(toSql(fieldType)).toString().toLowerCase(ENGLISH);
daoTransaction(dbi, MetadataDao.class, dao -> {
dao.insertColumn(table.getTableId(), columnId, columnName, ordinalPosition, type, null, null);
dao.updateTableVersion(table.getTableId(), System.currentTimeMillis());
});
String columnType = sqlColumnType(fieldType);
if (columnType == null) {
return;
}
String sql = format("ALTER TABLE %s ADD COLUMN (%s %s, %s %s)",
shardIndexTable(table.getTableId()),
minColumn(columnId), columnType,
maxColumn(columnId), columnType);
try (Handle handle = dbi.open()) {
handle.execute(sql);
} catch (DBIException e) {
throw metadataError(e);
}
}