@Override public PMetaData removeColumn( PName tenantId, String tableName, List<PColumn> columnsToRemove, long tableTimeStamp, long tableSeqNum, long resolvedTime) throws SQLException { PTableRef tableRef = metaData.get(new PTableKey(tenantId, tableName)); if (tableRef == null) { return this; } PTable table = tableRef.getTable(); PMetaDataCache tables = metaData.clone(); for (PColumn columnToRemove : columnsToRemove) { PColumn column; String familyName = columnToRemove.getFamilyName().getString(); if (familyName == null) { column = table.getPKColumn(columnToRemove.getName().getString()); } else { column = table.getColumnFamily(familyName).getColumn(columnToRemove.getName().getString()); } int positionOffset = 0; int position = column.getPosition(); List<PColumn> oldColumns = table.getColumns(); if (table.getBucketNum() != null) { position--; positionOffset = 1; oldColumns = oldColumns.subList(positionOffset, oldColumns.size()); } List<PColumn> columns = Lists.newArrayListWithExpectedSize(oldColumns.size() - 1); columns.addAll(oldColumns.subList(0, position)); // Update position of columns that follow removed column for (int i = position + 1; i < oldColumns.size(); i++) { PColumn oldColumn = oldColumns.get(i); PColumn newColumn = new PColumnImpl( oldColumn.getName(), oldColumn.getFamilyName(), oldColumn.getDataType(), oldColumn.getMaxLength(), oldColumn.getScale(), oldColumn.isNullable(), i - 1 + positionOffset, oldColumn.getSortOrder(), oldColumn.getArraySize(), oldColumn.getViewConstant(), oldColumn.isViewReferenced(), null, oldColumn.isRowTimestamp()); columns.add(newColumn); } table = PTableImpl.makePTable(table, tableTimeStamp, tableSeqNum, columns); } tables.put(table.getKey(), table, resolvedTime); return new PMetaDataImpl(tables); }
public PColumnImpl(PColumn column, int position) { this( column.getName(), column.getFamilyName(), column.getDataType(), column.getMaxLength(), column.getScale(), column.isNullable(), position, column.getSortOrder(), column.getArraySize()); }
@Override public PMetaData removeColumn( String tableName, String familyName, String columnName, long tableTimeStamp, long tableSeqNum) throws SQLException { PTable table = getTable(tableName); Map<String, PTable> tables = Maps.newHashMap(metaData); PColumn column; if (familyName == null) { column = table.getPKColumn(columnName); } else { column = table.getColumnFamily(familyName).getColumn(columnName); } int positionOffset = 0; int position = column.getPosition(); List<PColumn> oldColumns = table.getColumns(); if (table.getBucketNum() != null) { position--; positionOffset = 1; oldColumns = oldColumns.subList(positionOffset, oldColumns.size()); } List<PColumn> columns = Lists.newArrayListWithExpectedSize(oldColumns.size() - 1); columns.addAll(oldColumns.subList(0, position)); // Update position of columns that follow removed column for (int i = position + 1; i < oldColumns.size(); i++) { PColumn oldColumn = oldColumns.get(i); PColumn newColumn = new PColumnImpl( oldColumn.getName(), oldColumn.getFamilyName(), oldColumn.getDataType(), oldColumn.getMaxLength(), oldColumn.getScale(), oldColumn.isNullable(), i - 1 + positionOffset, oldColumn.getSortOrder(), oldColumn.getArraySize(), oldColumn.getViewConstant()); columns.add(newColumn); } PTable newTable = PTableImpl.makePTable(table, tableTimeStamp, tableSeqNum, columns); tables.put(tableName, newTable); return new PMetaDataImpl(tables); }