From 19fa45f8a240cb1a016208ad2fb72254eaa2839c Mon Sep 17 00:00:00 2001 From: erezrokah Date: Tue, 1 Apr 2025 18:18:41 +0100 Subject: [PATCH] feat: Error if both PKs and PK components are set --- transformers/tables.go | 3 +++ transformers/tables_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 transformers/tables_test.go diff --git a/transformers/tables.go b/transformers/tables.go index 17bf2f9f30..5fb33a9a89 100644 --- a/transformers/tables.go +++ b/transformers/tables.go @@ -26,6 +26,9 @@ func TransformTables(tables schema.Tables) error { if err := TransformTables(table.Relations); err != nil { return err } + if len(table.PrimaryKeys()) > 0 && len(table.PrimaryKeyComponents()) > 0 { + return fmt.Errorf("primary keys and primary key components cannot both be set for table %q", table.Name) + } } return nil } diff --git a/transformers/tables_test.go b/transformers/tables_test.go new file mode 100644 index 0000000000..c1f10933b3 --- /dev/null +++ b/transformers/tables_test.go @@ -0,0 +1,27 @@ +package transformers + +import ( + "testing" + + "github.com/apache/arrow-go/v18/arrow" + "github.com/cloudquery/plugin-sdk/v4/schema" + "github.com/stretchr/testify/require" +) + +func TestTransformTablesErrorOnPKFieldsAndPKComponentFields(t *testing.T) { + type testStructWithPKComponent struct { + ID int `json:"id"` + Name string `json:"name"` + } + + testTable := &schema.Table{ + Name: "test", + Transform: TransformWithStruct(testStructWithPKComponent{}, WithPrimaryKeys("id")), + Columns: []schema.Column{ + {Name: "name", Type: arrow.BinaryTypes.String, PrimaryKeyComponent: true}, + }, + } + + err := TransformTables([]*schema.Table{testTable}) + require.Error(t, err, "primary keys and primary key components cannot both be set for table \"test\"") +}