示例#1
0
  @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);
  }