From e72f4d7fa17d03d36493912168490350a320e04f Mon Sep 17 00:00:00 2001 From: Elio Bischof Date: Thu, 21 Sep 2023 15:50:29 +0200 Subject: [PATCH] fix quota projection primary key --- cmd/setup/13/13_fix_quota_constraints.sql | 1 + internal/query/projection/quota.go | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/cmd/setup/13/13_fix_quota_constraints.sql b/cmd/setup/13/13_fix_quota_constraints.sql index d1f95d74ab1..9616cd8446c 100644 --- a/cmd/setup/13/13_fix_quota_constraints.sql +++ b/cmd/setup/13/13_fix_quota_constraints.sql @@ -2,3 +2,4 @@ ALTER TABLE IF EXISTS projections.quotas ALTER COLUMN from_anchor DROP NOT NULL; ALTER TABLE IF EXISTS projections.quotas ALTER COLUMN amount DROP NOT NULL; ALTER TABLE IF EXISTS projections.quotas ALTER COLUMN interval DROP NOT NULL; ALTER TABLE IF EXISTS projections.quotas ALTER COLUMN limit_usage DROP NOT NULL; +ALTER TABLE IF EXISTS projections.quotas ALTER PRIMARY KEY USING COLUMNS ( instance_id, unit, id ); diff --git a/internal/query/projection/quota.go b/internal/query/projection/quota.go index e6de8663acf..8801e740cd9 100644 --- a/internal/query/projection/quota.go +++ b/internal/query/projection/quota.go @@ -70,7 +70,7 @@ func newQuotaProjection(ctx context.Context, config crdb.StatementHandlerConfig) crdb.NewColumn(QuotaColumnInterval, crdb.ColumnTypeInterval, crdb.Nullable()), crdb.NewColumn(QuotaColumnLimit, crdb.ColumnTypeBool, crdb.Nullable()), }, - crdb.NewPrimaryKey(QuotaColumnInstanceID, QuotaColumnUnit), + crdb.NewPrimaryKey(QuotaColumnInstanceID, QuotaColumnUnit, QuotaColumnID), ), crdb.NewSuffixedTable( []*crdb.Column{ @@ -156,8 +156,9 @@ func (q *quotaProjection) reduceQuotaSet(event eventstore.Event) (*handler.State quotaConflictColumns := []handler.Column{ handler.NewCol(QuotaColumnInstanceID, e.Aggregate().InstanceID), handler.NewCol(QuotaColumnUnit, e.Unit), + handler.NewCol(QuotaColumnID, e.Aggregate().ID), } - quotaUpdateCols := make([]handler.Column, 0, 4+1+len(quotaConflictColumns)) + quotaUpdateCols := make([]handler.Column, 0, 4+len(quotaConflictColumns)) if e.Limit != nil { quotaUpdateCols = append(quotaUpdateCols, handler.NewCol(QuotaColumnLimit, *e.Limit)) } @@ -172,7 +173,6 @@ func (q *quotaProjection) reduceQuotaSet(event eventstore.Event) (*handler.State } if len(quotaUpdateCols) > 0 { // TODO: Add the quota ID to the primary key in a migration? - quotaUpdateCols = append(quotaUpdateCols, handler.NewCol(QuotaColumnID, e.Aggregate().ID)) quotaUpdateCols = append(quotaUpdateCols, quotaConflictColumns...) statements = append(statements, crdb.AddUpsertStatement(quotaConflictColumns, quotaUpdateCols)) }