From f0dbefe7696150c324ae29371ee9b1bfb821325f Mon Sep 17 00:00:00 2001 From: Luke Oldenburg <87272260+Luke-Oldenburg@users.noreply.github.com> Date: Sun, 19 Jul 2026 21:43:40 +0000 Subject: [PATCH 1/3] [CEM / CPEM] Make indexes unique --- app/models/canonical_event_mapping.rb | 2 +- app/models/canonical_pending_event_mapping.rb | 3 ++- app/models/canonical_pending_settled_mapping.rb | 4 ++-- ...ical_event_mappings_on_canonical_transaction_id.rb | 11 +++++++++++ ...x_to_canonical_pending_event_mappings_on_cpt_id.rb | 11 +++++++++++ ...l_pending_event_mappings_on_event_id_and_cpt_id.rb | 9 +++++++++ db/schema.rb | 11 ++++++----- 7 files changed, 42 insertions(+), 9 deletions(-) create mode 100644 db/migrate/20260719120000_add_unique_index_to_canonical_event_mappings_on_canonical_transaction_id.rb create mode 100644 db/migrate/20260719120001_add_unique_index_to_canonical_pending_event_mappings_on_cpt_id.rb create mode 100644 db/migrate/20260719120002_add_unique_index_to_canonical_pending_event_mappings_on_event_id_and_cpt_id.rb diff --git a/app/models/canonical_event_mapping.rb b/app/models/canonical_event_mapping.rb index 07978a2825..8e4ced2877 100644 --- a/app/models/canonical_event_mapping.rb +++ b/app/models/canonical_event_mapping.rb @@ -14,7 +14,7 @@ # # Indexes # -# index_canonical_event_mappings_on_canonical_transaction_id (canonical_transaction_id) +# index_canonical_event_mappings_on_canonical_transaction_id (canonical_transaction_id) UNIQUE # index_canonical_event_mappings_on_event_id (event_id) # index_canonical_event_mappings_on_subledger_id (subledger_id) # index_canonical_event_mappings_on_user_id (user_id) diff --git a/app/models/canonical_pending_event_mapping.rb b/app/models/canonical_pending_event_mapping.rb index 60ca88fcf0..10503434cb 100644 --- a/app/models/canonical_pending_event_mapping.rb +++ b/app/models/canonical_pending_event_mapping.rb @@ -13,9 +13,10 @@ # # Indexes # -# index_canonical_pending_event_map_on_canonical_pending_tx_id (canonical_pending_transaction_id) +# index_canonical_pending_event_map_on_canonical_pending_tx_id (canonical_pending_transaction_id) UNIQUE # index_canonical_pending_event_mappings_on_event_id (event_id) # index_canonical_pending_event_mappings_on_subledger_id (subledger_id) +# index_cpem_event_id_cpt_id_uniqueness (event_id,canonical_pending_transaction_id) UNIQUE # # Foreign Keys # diff --git a/app/models/canonical_pending_settled_mapping.rb b/app/models/canonical_pending_settled_mapping.rb index 47a9e905eb..e53e22bc6c 100644 --- a/app/models/canonical_pending_settled_mapping.rb +++ b/app/models/canonical_pending_settled_mapping.rb @@ -12,8 +12,8 @@ # # Indexes # -# index_canonical_pending_settled_map_on_canonical_pending_tx_id (canonical_pending_transaction_id) -# index_canonical_pending_settled_mappings_on_canonical_tx_id (canonical_transaction_id) +# index_cpsm_on_cpt_id (canonical_pending_transaction_id) UNIQUE +# index_cpsm_on_ct_id (canonical_transaction_id) UNIQUE # # Foreign Keys # diff --git a/db/migrate/20260719120000_add_unique_index_to_canonical_event_mappings_on_canonical_transaction_id.rb b/db/migrate/20260719120000_add_unique_index_to_canonical_event_mappings_on_canonical_transaction_id.rb new file mode 100644 index 0000000000..cadcb088d9 --- /dev/null +++ b/db/migrate/20260719120000_add_unique_index_to_canonical_event_mappings_on_canonical_transaction_id.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class AddUniqueIndexToCanonicalEventMappingsOnCanonicalTransactionId < ActiveRecord::Migration[8.0] + disable_ddl_transaction! + + def change + remove_index :canonical_event_mappings, :canonical_transaction_id + + add_index :canonical_event_mappings, :canonical_transaction_id, unique: true, algorithm: :concurrently + end +end diff --git a/db/migrate/20260719120001_add_unique_index_to_canonical_pending_event_mappings_on_cpt_id.rb b/db/migrate/20260719120001_add_unique_index_to_canonical_pending_event_mappings_on_cpt_id.rb new file mode 100644 index 0000000000..54d215660f --- /dev/null +++ b/db/migrate/20260719120001_add_unique_index_to_canonical_pending_event_mappings_on_cpt_id.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class AddUniqueIndexToCanonicalPendingEventMappingsOnCptId < ActiveRecord::Migration[8.0] + disable_ddl_transaction! + + def change + remove_index :canonical_pending_event_mappings, :canonical_pending_transaction_id + + add_index :canonical_pending_event_mappings, :canonical_pending_transaction_id, unique: true, name: "index_canonical_pending_event_map_on_canonical_pending_tx_id", algorithm: :concurrently + end +end diff --git a/db/migrate/20260719120002_add_unique_index_to_canonical_pending_event_mappings_on_event_id_and_cpt_id.rb b/db/migrate/20260719120002_add_unique_index_to_canonical_pending_event_mappings_on_event_id_and_cpt_id.rb new file mode 100644 index 0000000000..5e43bc4efb --- /dev/null +++ b/db/migrate/20260719120002_add_unique_index_to_canonical_pending_event_mappings_on_event_id_and_cpt_id.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AddUniqueIndexToCanonicalPendingEventMappingsOnEventIdAndCptId < ActiveRecord::Migration[8.0] + disable_ddl_transaction! + + def change + add_index :canonical_pending_event_mappings, [:event_id, :canonical_pending_transaction_id], unique: true, name: "index_cpem_event_id_cpt_id_uniqueness", algorithm: :concurrently + end +end diff --git a/db/schema.rb b/db/schema.rb index 72d9ac95f5..4e476c3ae5 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -12,7 +12,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[8.0].define(version: 2026_07_16_120000) do +ActiveRecord::Schema[8.0].define(version: 2026_07_19_120002) do create_schema "google_sheets" # These are extensions that must be enabled in order to support this database @@ -336,7 +336,7 @@ t.bigint "subledger_id" t.datetime "updated_at", null: false t.bigint "user_id" - t.index ["canonical_transaction_id"], name: "index_canonical_event_mappings_on_canonical_transaction_id" + t.index ["canonical_transaction_id"], name: "index_canonical_event_mappings_on_canonical_transaction_id", unique: true t.index ["event_id", "canonical_transaction_id"], name: "index_cem_event_id_canonical_transaction_id_uniqueness", unique: true t.index ["event_id"], name: "index_canonical_event_mappings_on_event_id" t.index ["subledger_id"], name: "index_canonical_event_mappings_on_subledger_id" @@ -365,7 +365,8 @@ t.bigint "event_id", null: false t.bigint "subledger_id" t.datetime "updated_at", null: false - t.index ["canonical_pending_transaction_id"], name: "index_canonical_pending_event_map_on_canonical_pending_tx_id" + t.index ["canonical_pending_transaction_id"], name: "index_canonical_pending_event_map_on_canonical_pending_tx_id", unique: true + t.index ["event_id", "canonical_pending_transaction_id"], name: "index_cpem_event_id_cpt_id_uniqueness", unique: true t.index ["event_id"], name: "index_canonical_pending_event_mappings_on_event_id" t.index ["subledger_id"], name: "index_canonical_pending_event_mappings_on_subledger_id" end @@ -375,8 +376,8 @@ t.bigint "canonical_transaction_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["canonical_pending_transaction_id"], name: "index_canonical_pending_settled_map_on_canonical_pending_tx_id" - t.index ["canonical_transaction_id"], name: "index_canonical_pending_settled_mappings_on_canonical_tx_id" + t.index ["canonical_pending_transaction_id"], name: "index_cpsm_on_cpt_id", unique: true + t.index ["canonical_transaction_id"], name: "index_cpsm_on_ct_id", unique: true end create_table "canonical_pending_transactions", force: :cascade do |t| From b6837cc9902e5691c01c7d082a4adc6f5b80b707 Mon Sep 17 00:00:00 2001 From: Luke Oldenburg <87272260+Luke-Oldenburg@users.noreply.github.com> Date: Sun, 19 Jul 2026 21:45:22 +0000 Subject: [PATCH 2/3] Fix annotations --- app/models/canonical_pending_settled_mapping.rb | 4 ++-- db/schema.rb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/models/canonical_pending_settled_mapping.rb b/app/models/canonical_pending_settled_mapping.rb index e53e22bc6c..9e8dfbad87 100644 --- a/app/models/canonical_pending_settled_mapping.rb +++ b/app/models/canonical_pending_settled_mapping.rb @@ -12,8 +12,8 @@ # # Indexes # -# index_cpsm_on_cpt_id (canonical_pending_transaction_id) UNIQUE -# index_cpsm_on_ct_id (canonical_transaction_id) UNIQUE +# idx_on_canonical_pending_transaction_id_d803a74980 (canonical_pending_transaction_id) +# idx_on_canonical_transaction_id_b8c2c28a37 (canonical_transaction_id) # # Foreign Keys # diff --git a/db/schema.rb b/db/schema.rb index 4e476c3ae5..14f9071025 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -376,8 +376,8 @@ t.bigint "canonical_transaction_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["canonical_pending_transaction_id"], name: "index_cpsm_on_cpt_id", unique: true - t.index ["canonical_transaction_id"], name: "index_cpsm_on_ct_id", unique: true + t.index ["canonical_pending_transaction_id"], name: "idx_on_canonical_pending_transaction_id_d803a74980" + t.index ["canonical_transaction_id"], name: "idx_on_canonical_transaction_id_b8c2c28a37" end create_table "canonical_pending_transactions", force: :cascade do |t| From 99db03c89384bad6c1216f98fd644148e54f94a4 Mon Sep 17 00:00:00 2001 From: Luke Oldenburg <87272260+Luke-Oldenburg@users.noreply.github.com> Date: Mon, 20 Jul 2026 03:42:01 +0000 Subject: [PATCH 3/3] annotate --- app/models/canonical_pending_settled_mapping.rb | 4 ++-- db/schema.rb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/models/canonical_pending_settled_mapping.rb b/app/models/canonical_pending_settled_mapping.rb index 9e8dfbad87..47a9e905eb 100644 --- a/app/models/canonical_pending_settled_mapping.rb +++ b/app/models/canonical_pending_settled_mapping.rb @@ -12,8 +12,8 @@ # # Indexes # -# idx_on_canonical_pending_transaction_id_d803a74980 (canonical_pending_transaction_id) -# idx_on_canonical_transaction_id_b8c2c28a37 (canonical_transaction_id) +# index_canonical_pending_settled_map_on_canonical_pending_tx_id (canonical_pending_transaction_id) +# index_canonical_pending_settled_mappings_on_canonical_tx_id (canonical_transaction_id) # # Foreign Keys # diff --git a/db/schema.rb b/db/schema.rb index 14f9071025..2769f57d60 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -376,8 +376,8 @@ t.bigint "canonical_transaction_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.index ["canonical_pending_transaction_id"], name: "idx_on_canonical_pending_transaction_id_d803a74980" - t.index ["canonical_transaction_id"], name: "idx_on_canonical_transaction_id_b8c2c28a37" + t.index ["canonical_pending_transaction_id"], name: "index_canonical_pending_settled_map_on_canonical_pending_tx_id" + t.index ["canonical_transaction_id"], name: "index_canonical_pending_settled_mappings_on_canonical_tx_id" end create_table "canonical_pending_transactions", force: :cascade do |t|