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\"") +}