Skip to content

Commit e890385

Browse files
authored
fix(tables): Flatten stripping relations (#884)
1 parent c68251c commit e890385

File tree

2 files changed

+34
-14
lines changed

2 files changed

+34
-14
lines changed

schema/table.go

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77

88
"github.com/apache/arrow/go/v13/arrow"
99
"github.com/cloudquery/plugin-sdk/v3/internal/glob"
10+
"golang.org/x/exp/slices"
1011
)
1112

1213
// TableResolver is the main entry point when a table is sync is called.
@@ -173,9 +174,10 @@ func (tt Tables) FilterDfsFunc(include, exclude func(*Table) bool, skipDependent
173174
}
174175

175176
func (tt Tables) ToArrowSchemas() Schemas {
176-
schemas := make(Schemas, 0, len(tt.FlattenTables()))
177-
for _, t := range tt.FlattenTables() {
178-
schemas = append(schemas, t.ToArrowSchema())
177+
flattened := tt.FlattenTables()
178+
schemas := make(Schemas, len(flattened))
179+
for i, t := range flattened {
180+
schemas[i] = t.ToArrowSchema()
179181
}
180182
return schemas
181183
}
@@ -228,19 +230,22 @@ func (tt Tables) FilterDfs(tables, skipTables []string, skipDependentTables bool
228230
func (tt Tables) FlattenTables() Tables {
229231
tables := make(Tables, 0, len(tt))
230232
for _, t := range tt {
231-
tables = append(tables, t)
233+
table := *t
234+
table.Relations = nil
235+
tables = append(tables, &table)
232236
tables = append(tables, t.Relations.FlattenTables()...)
233237
}
234-
tableNames := make(map[string]bool)
235-
dedupedTables := make(Tables, 0, len(tables))
238+
239+
seen := make(map[string]struct{})
240+
deduped := make(Tables, 0, len(tables))
236241
for _, t := range tables {
237-
if _, found := tableNames[t.Name]; !found {
238-
dedupedTables = append(dedupedTables, t)
239-
tableNames[t.Name] = true
242+
if _, found := seen[t.Name]; !found {
243+
deduped = append(deduped, t)
244+
seen[t.Name] = struct{}{}
240245
}
241246
}
242247

243-
return dedupedTables
248+
return slices.Clip(deduped)
244249
}
245250

246251
func (tt Tables) TableNames() []string {

schema/table_test.go

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55

66
"github.com/apache/arrow/go/v13/arrow"
77
"github.com/google/go-cmp/cmp"
8+
"github.com/stretchr/testify/require"
89
)
910

1011
var testTable = &Table{
@@ -19,11 +20,25 @@ var testTable = &Table{
1920
}
2021

2122
func TestTablesFlatten(t *testing.T) {
22-
tables := Tables{testTable}.FlattenTables()
23-
if len(tables) != 2 {
24-
t.Fatal("expected 2 tables")
23+
srcTables := Tables{testTable}
24+
tables := srcTables.FlattenTables()
25+
require.Equal(t, 1, len(srcTables)) // verify that the source Tables were left untouched
26+
require.Equal(t, 1, len(testTable.Relations))
27+
require.Equal(t, 2, len(tables))
28+
for _, table := range tables {
29+
require.Nil(t, table.Relations)
2530
}
26-
tables = Tables{testTable}.FlattenTables()
31+
32+
srcTables = Tables{testTable, testTable}
33+
tables = srcTables.FlattenTables()
34+
require.Equal(t, 2, len(srcTables)) // verify that the source Tables were left untouched
35+
require.Equal(t, 1, len(testTable.Relations))
36+
require.Equal(t, 2, len(tables))
37+
for _, table := range tables {
38+
require.Nil(t, table.Relations)
39+
}
40+
41+
tables = tables.FlattenTables()
2742
if len(tables) != 2 {
2843
t.Fatal("expected 2 tables")
2944
}

0 commit comments

Comments
 (0)