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); } }