From e80cbe713a6918814633c8912bea724cc5c01afd Mon Sep 17 00:00:00 2001 From: bbernays Date: Wed, 9 Sep 2026 13:27:25 -0500 Subject: [PATCH 1/2] Update resolvers.go --- scheduler/resolvers/resolvers.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scheduler/resolvers/resolvers.go b/scheduler/resolvers/resolvers.go index f5d3387530..ef2b91af9b 100644 --- a/scheduler/resolvers/resolvers.go +++ b/scheduler/resolvers/resolvers.go @@ -14,7 +14,7 @@ import ( "github.com/thoas/go-funk" ) -func resolveColumn(ctx context.Context, logger zerolog.Logger, m *metrics.Metrics, selector metrics.Selector, client schema.ClientMeta, resource *schema.Resource, column schema.Column, c *caser.Caser, classifier schema.ErrorClassifier) { +func resolveColumn(ctx context.Context, logger zerolog.Logger, m *metrics.Metrics, selector metrics.Selector, client schema.ClientMeta, resource *schema.Resource, column schema.Column, colIndex int, c *caser.Caser, classifier schema.ErrorClassifier) { columnStartTime := time.Now() defer func() { if err := recover(); err != nil { @@ -47,7 +47,7 @@ func resolveColumn(ctx context.Context, logger zerolog.Logger, m *metrics.Metric // base use case: try to get column with CamelCase name v := funk.Get(resource.GetItem(), c.ToPascal(column.Name), funk.WithAllowZero()) if v != nil { - if err := resource.Set(column.Name, v); err != nil { + if err := resource.SetWithIndex(column.Name, colIndex, v); err != nil { handleErr(err) } } @@ -124,8 +124,8 @@ func ResolveResourcesChunkWithClassifier(ctx context.Context, logger zerolog.Log resources = filtered } for _, resource := range resources { - for _, column := range table.Columns { - resolveColumn(ctx, tableLogger, m, selector, client, resource, column, c, classifier) + for colIndex, column := range table.Columns { + resolveColumn(ctx, tableLogger, m, selector, client, resource, column, colIndex, c, classifier) } } From 14e5f2e3cefc6c1b22442cb781fdbbbe9d0b75e3 Mon Sep 17 00:00:00 2001 From: bbernays Date: Wed, 9 Sep 2026 13:27:27 -0500 Subject: [PATCH 2/2] Update resource.go --- schema/resource.go | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/schema/resource.go b/schema/resource.go index 0ac7eb7ccc..49e5b5da02 100644 --- a/schema/resource.go +++ b/schema/resource.go @@ -65,6 +65,16 @@ func (r *Resource) Set(columnName string, value any) error { return nil } +func (r *Resource) SetWithIndex(columnName string, index int, value any) error { + if index < 0 || index >= len(r.Table.Columns) || r.Table.Columns[index].Name != columnName { + return r.Set(columnName, value) + } + if err := r.data[index].Set(value); err != nil { + panic(fmt.Errorf("failed to set column %s: %w", columnName, err)) + } + return nil +} + // Override original item (this is useful for apis that follow list/details pattern) func (r *Resource) SetItem(item any) { r.Item = item @@ -113,22 +123,24 @@ func calculateCqIDValue(r *Resource, cols []string) hash.Hash { func (r *Resource) storeCQID(value uuid.UUID) error { // We skip if _cq_id is not present. // Mostly the problem here is because the transformation step is baked into the resolving step - if r.Table.Columns.Get(CqIDColumn.Name) == nil { + index := r.Table.Columns.Index(CqIDColumn.Name) + if index == -1 { return nil } b, err := value.MarshalBinary() if err != nil { return err } - return r.Set(CqIDColumn.Name, b) + return r.SetWithIndex(CqIDColumn.Name, index, b) } func (r *Resource) StoreCQClientID(clientID string) error { // We skip if _cq_client_id is not present. - if r.Table.Columns.Get(CqClientIDColumn.Name) == nil { + index := r.Table.Columns.Index(CqClientIDColumn.Name) + if index == -1 { return nil } - return r.Set(CqClientIDColumn.Name, clientID) + return r.SetWithIndex(CqClientIDColumn.Name, index, clientID) } type PKError struct {