// Compare two schemas bool Schema::operator==(const Schema &other) const { if (other.GetColumnCount() != GetColumnCount() || other.GetUninlinedColumnCount() != GetUninlinedColumnCount() || other.IsInlined() != IsInlined()) { return false; } for (oid_t column_itr = 0; column_itr < other.GetColumnCount(); column_itr++) { const Column &column_info = other.GetColumn(column_itr); const Column &other_column_info = GetColumn(column_itr); if (column_info != other_column_info) { return false; } } return true; }
// Append subsets of columns in the given schemas. Schema *Schema::AppendSchemaPtrList( const std::vector<Schema *> &schema_list, const std::vector<std::vector<oid_t>> &subsets) { PL_ASSERT(schema_list.size() == subsets.size()); std::vector<Column> columns; for (unsigned int i = 0; i < schema_list.size(); i++) { Schema *schema = schema_list[i]; const std::vector<oid_t> &subset = subsets[i]; unsigned int column_count = schema->GetColumnCount(); for (oid_t column_itr = 0; column_itr < column_count; column_itr++) { // If column exists in set. if (std::find(subset.begin(), subset.end(), column_itr) != subset.end()) { columns.push_back(schema->columns[column_itr]); } } } Schema *ret_schema = new Schema(columns); return ret_schema; }