1515#include < string>
1616#include " catalog/catalog_cache.h"
1717#include " catalog/column_catalog.h"
18+ #include " catalog/constraint_catalog.h"
1819#include " catalog/database_catalog.h"
1920#include " catalog/index_catalog.h"
2021#include " catalog/table_catalog.h"
3334namespace peloton {
3435namespace planner {
3536
37+ const std::set<oid_t > PlanUtil::GetPrimaryKeyColumns (
38+ std::unordered_map<oid_t , std::shared_ptr<catalog::ConstraintCatalogEntry>>
39+ table_constraint_entries) {
40+ std::set<oid_t > pkey_set;
41+ for (const auto &kv: table_constraint_entries) {
42+ if (kv.second ->GetConstraintType () == ConstraintType::PRIMARY) {
43+ for (const auto & col_oid: kv.second ->GetColumnIds ()) {
44+ pkey_set.insert (col_oid);
45+ }
46+ }
47+ }
48+ return pkey_set;
49+ }
50+
3651const std::vector<col_triplet> PlanUtil::GetAffectedIndexes (
3752 catalog::CatalogCache &catalog_cache, const parser::SQLStatement &sql_stmt,
38- UNUSED_ATTRIBUTE const bool ignore_primary) {
53+ const bool ignore_primary) {
3954 std::vector<col_triplet> index_triplets;
4055 std::string db_name, table_name, schema_name;
4156 std::shared_ptr<catalog::DatabaseCatalogEntry> db_object;
@@ -73,16 +88,16 @@ const std::vector<col_triplet> PlanUtil::GetAffectedIndexes(
7388 for (auto &index : indexes_map) {
7489 bool add_index = true ;
7590
76- // TODO(saatviks): Find a way to check for PKey
77- // if (ignore_primary) {
78- // const auto col_oids = index.second->GetKeyAttrs();
79- // for (const auto col_oid : col_oids) {
80- // if (table_object->GetConstraintCatalogEntries()GetCGetColumnCatalogEntry(col_oid)-> ) {
81- // add_index = false;
82- // break;
83- // }
84- // }
85- // }
91+ if (ignore_primary) {
92+ auto pkey_cols_table = GetPrimaryKeyColumns (table_object-> GetConstraintCatalogEntries ());
93+ const auto col_oids = index.second ->GetKeyAttrs ();
94+ for (const auto col_oid : col_oids) {
95+ if (pkey_cols_table. find (col_oid) != pkey_cols_table. end () ) {
96+ add_index = false ;
97+ break ;
98+ }
99+ }
100+ }
86101
87102 if (add_index) {
88103 index_triplets.emplace_back (db_oid, table_oid, index.first );
@@ -96,9 +111,11 @@ const std::vector<col_triplet> PlanUtil::GetAffectedIndexes(
96111 db_name = update_stmt.table ->GetDatabaseName ();
97112 table_name = update_stmt.table ->GetTableName ();
98113 db_object = catalog_cache.GetDatabaseObject (db_name);
114+ db_oid = db_object->GetDatabaseOid ();
99115 schema_name = update_stmt.table ->GetSchemaName ();
100116 auto table_object = catalog_cache.GetDatabaseObject (db_name)
101117 ->GetTableCatalogEntry (table_name, schema_name);
118+ table_oid = table_object->GetTableOid ();
102119
103120 auto &update_clauses = update_stmt.updates ;
104121 std::set<oid_t > update_oids;
@@ -122,15 +139,16 @@ const std::vector<col_triplet> PlanUtil::GetAffectedIndexes(
122139 index.second ->GetIndexName ().c_str ());
123140 bool add_index = true ;
124141
125- // TODO(saatviks): Find a way to check for PKey
126- // if (ignore_primary) {
127- // for (const auto col_oid : key_attrs) {
128- // if (table_object->GetColumnObject(col_oid)->IsPrimary()) {
129- // add_index = false;
130- // break;
131- // }
132- // }
133- // }
142+ if (ignore_primary) {
143+ auto pkey_cols_table = GetPrimaryKeyColumns (table_object->GetConstraintCatalogEntries ());
144+ const auto col_oids = index.second ->GetKeyAttrs ();
145+ for (const auto col_oid : col_oids) {
146+ if (pkey_cols_table.find (col_oid) != pkey_cols_table.end ()) {
147+ add_index = false ;
148+ break ;
149+ }
150+ }
151+ }
134152
135153 if (add_index) {
136154 index_triplets.emplace_back (db_oid, table_oid, index.first );
0 commit comments