diff --git a/pkg/generator/model.go b/pkg/generator/model.go index 60391662..47fd0da9 100644 --- a/pkg/generator/model.go +++ b/pkg/generator/model.go @@ -274,6 +274,10 @@ func BuildRelationTag(r *state.Relation) string { jsonTag := fmt.Sprintf("json:%q", utils.ToSnakeCase(r.Table)+",omitempty") tags = append(tags, jsonTag) + if r.Index != nil { + tags = append(tags, "indexed:true") + } + if r.Action != nil { onUpdate, onDelete := objects.RelationActionDefaultLabel, objects.RelationActionDefaultLabel diff --git a/pkg/generator/model_test.go b/pkg/generator/model_test.go index fcd9374e..fd1384ca 100644 --- a/pkg/generator/model_test.go +++ b/pkg/generator/model_test.go @@ -48,6 +48,7 @@ func TestGenerateModels(t *testing.T) { ForeignKey: "test_table_id", PrimaryKey: "id", Action: &relationshipAction, + Index: &objects.Index{Schema: "public", Table: "related_table", Name: "test_table_id", Definition: "CREATE INDEX test_table_id ON related_table(test_table_id);"}, }, }, Policies: objects.Policies{}, diff --git a/pkg/resource/import.go b/pkg/resource/import.go index 47b06b8b..b8a95896 100644 --- a/pkg/resource/import.go +++ b/pkg/resource/import.go @@ -44,6 +44,7 @@ func Import(flags *Flags, config *raiden.Config) error { if err != nil { return err } + ImportLogger.Trace("indexes", spResource.Indexes) spResource.Tables = tables.AttachIndexAndAction(spResource.Tables, spResource.Indexes, spResource.RelationActions) // create import state diff --git a/pkg/resource/tables/compare.go b/pkg/resource/tables/compare.go index ad7a43db..bea5946b 100644 --- a/pkg/resource/tables/compare.go +++ b/pkg/resource/tables/compare.go @@ -239,11 +239,15 @@ func compareRelations(table *objects.Table, source, target []objects.TablesRelat } if t.Index == nil && sc.Index == nil { - updateItems = append(updateItems, objects.UpdateRelationItem{ - Data: sc, - Type: objects.UpdateRelationCreateIndex, - }) + // updateItems = append(updateItems, objects.UpdateRelationItem{ + // Data: sc, + // Type: objects.UpdateRelationCreateIndex, + // }) Logger.Debug("create new index", "constrain-name", sc.ConstraintName) + } else { + Logger.Debug("check-index", "t-index", t.Index) + Logger.Debug("check-index", "sc-index", sc.Index) + Logger.Debug("updating index", "constrain-name", sc.ConstraintName) } if t.Action != nil && sc.Action != nil { diff --git a/pkg/state/table.go b/pkg/state/table.go index e295d55f..db6d30fb 100644 --- a/pkg/state/table.go +++ b/pkg/state/table.go @@ -172,6 +172,17 @@ func buildTableFromModel(model any) (ei ExtractTableItem) { } } + // check index field + indexed := field.Tag.Get("indexed") + if len(indexed) > 0 { + rel.Index = &objects.Index{ + Schema: ei.Table.Schema, + Table: rel.TargetTableName, + Name: fmt.Sprintf("ix_%s_%s", rel.TargetTableName, rel.TargetColumnName), + Definition: fmt.Sprintf("CREATE INDEX ix_%s_%s ON %s(%s);", rel.TargetTableName, rel.TargetColumnName, rel.TargetTableName, rel.TargetColumnName), + } + } + ei.Table.Relationships = append(ei.Table.Relationships, rel) } } diff --git a/pkg/state/table_test.go b/pkg/state/table_test.go index 5f12e7be..aeeb9c7d 100644 --- a/pkg/state/table_test.go +++ b/pkg/state/table_test.go @@ -24,7 +24,7 @@ type Submission struct { Acl string `json:"-" read:"anon" write:"anon"` // Relations - Candidate *Candidate `json:"candidate,omitempty" join:"joinType:hasOne;primaryKey:id;foreignKey:candidate_id" onUpdate:"cascade" onDelete:"cascade"` + Candidate *Candidate `json:"candidate,omitempty" join:"joinType:hasOne;primaryKey:id;foreignKey:candidate_id" onUpdate:"cascade" onDelete:"cascade" indexed:"true"` } type Candidate struct {