Column *ColumnManager::AddExprColumn(common::Type::TypeId type, int size, std::string name,
                                     bool inlined) {
  LOG_TRACE("Adding expr column: %s, type %d, size %d, inlined %s",
            name.c_str(), type, size,
            inlined ? "yes" : "no");
  Column *col = new ExprColumn(next_column_id++, type, size, name, inlined);

  id_to_column.insert(std::pair<ColumnID, Column *>(col->ID(), col));
  columns.push_back(col);
  return col;
}
Column *ColumnManager::AddBaseColumn(common::Type::TypeId type, int size, std::string name,
                                     bool inlined, oid_t base_table,
                                     oid_t column_index) {
  LOG_TRACE(
      "Adding base column: %s, type %d, size %d, inlined %s, "
      "table %u, col %u",
      name.c_str(), type, size,
      inlined ? "yes" : "no", base_table, column_index);
  Column *col = new TableColumn(next_column_id++, type, size, name, inlined,
                                base_table, column_index);

  auto key = std::make_tuple(base_table, column_index);
  table_col_index_to_column.insert(
      std::pair<decltype(key), Column *>(key, col));
  id_to_column.insert(std::pair<ColumnID, Column *>(col->ID(), col));
  columns.push_back(col);
  return col;
}