Skip to content

Commit 62aca65

Browse files
authored
Remove ununsed models from model config (#94)
1 parent 29d9d70 commit 62aca65

5 files changed

Lines changed: 35 additions & 5 deletions

File tree

build/ci/integration-test.sh

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,3 @@ if [[ $MONGO_RESULTS_LENGTH -ne 1 ]]; then
2525
echo "Expected 1 row in mongodb_test, got $MONGO_RESULTS_LENGTH"
2626
exit 1
2727
fi
28-
29-
30-
echo "Information schema results from test suite:"
31-
echo $(bin/preen query -f json"select * from preen_information_schema;")

build/ci/models.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,4 @@ models:
3434
test_data_types.mysql_field_set,
3535
test_data_types.mysql_field_json
3636
from
37-
test_data_types;
37+
test_data_types;

build/ci/models/unused.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
name: unused
2+
type: database
3+
query: |
4+
select
5+
test_data_types.not_used
6+
from
7+
test_data_types;

internal/engine/config.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ func ValidateConfigs(sc *SourceConfig, mc *ModelConfig) error {
2323
return fmt.Errorf("error on missing models: %w", err)
2424
}
2525

26+
if err := removeUnusedModels(sc, mc); err != nil {
27+
return fmt.Errorf("error removing unused models: %w", err)
28+
}
29+
2630
if err := parseModels(mc); err != nil {
2731
return fmt.Errorf("error parsing models: %w", err)
2832
}

internal/engine/models.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,10 @@ func BuildModels(sc *SourceConfig, mc *ModelConfig) error {
125125
return fmt.Errorf("error building information schema: %w", err)
126126
}
127127

128+
if err := removeUnusedModels(sc, mc); err != nil {
129+
return fmt.Errorf("error removing unused models: %w", err)
130+
}
131+
128132
columnMetadata, err := BuildColumnMetadata()
129133
if err != nil {
130134
return fmt.Errorf("error building column metadata: %w", err)
@@ -277,3 +281,22 @@ func errorOnMissingModels(sc *SourceConfig, mc *ModelConfig) error {
277281
}
278282
return nil
279283
}
284+
285+
// Remove unused models from ModelConfig. If a model is not referenced in any source, it is unused.
286+
func removeUnusedModels(sc *SourceConfig, mc *ModelConfig) error {
287+
usedModels := make([]string, 0)
288+
for _, source := range sc.Sources {
289+
for _, modelName := range source.Models {
290+
usedModels = append(usedModels, string(modelName))
291+
}
292+
}
293+
294+
for i, model := range mc.Models {
295+
if !slices.Contains(usedModels, string(model.Name)) {
296+
Info(fmt.Sprintf("Removing unused model: %s", model.Name))
297+
mc.Models = append(mc.Models[:i], mc.Models[i+1:]...)
298+
}
299+
}
300+
301+
return nil
302+
}

0 commit comments

Comments
 (0)