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