diff --git a/mitm_tooling/representation/sql_representation.py b/mitm_tooling/representation/sql_representation.py index fdb691e1e54ae24242d567cf373e8598c6cb02d1..6ab8a3db689b0524b34a91f470fc3fe1cb4d0c2c 100644 --- a/mitm_tooling/representation/sql_representation.py +++ b/mitm_tooling/representation/sql_representation.py @@ -237,7 +237,8 @@ _view_generators: tuple[MitMDBViewsGenerator, ...] = (_gen_denormalized_views,) def mk_sql_rep_schema(header: Header, view_generators: Iterable[MitMDBViewsGenerator] | None = (_gen_denormalized_views,), - override_schema: SchemaName | None = None) -> SQLRepresentationSchema: + override_schema: SchemaName | None = None, + skip_fk_constraints: bool = False) -> SQLRepresentationSchema: schema_name = override_schema if override_schema else SQL_REPRESENTATION_DEFAULT_SCHEMA mitm_def = get_mitm_def(header.mitm) meta = sa.MetaData(schema=schema_name) @@ -246,6 +247,7 @@ def mk_sql_rep_schema(header: Header, type_tables: ConceptTypeTablesDict = {} views: dict[str, sa.Table] = {} + base_schema_item_generators = (_gen_unique_constraint, _gen_pk_constraint, _gen_index,) for concept in mitm_def.main_concepts: concept_properties, concept_relations = mitm_def.get(concept) @@ -264,10 +266,11 @@ def mk_sql_rep_schema(header: Header, 'foreign': lambda: [(name, sa.Column(name, dt.sa_sql_type)) for _, resolved_fk in mitm_def.resolve_foreign_types(concept).items() for name, dt in resolved_fk.items()] - }, additional_column_generators=(_gen_within_concept_id_col,), schema_item_generators=( - _gen_unique_constraint, _gen_pk_constraint, _gen_index,), override_schema=schema_name) + }, additional_column_generators=(_gen_within_concept_id_col,), schema_item_generators=base_schema_item_generators, override_schema=schema_name) concept_tables[concept] = t + type_table_schema_item_generators = base_schema_item_generators + ( + _gen_foreign_key_constraints,) if not skip_fk_constraints else base_schema_item_generators for he in header.header_entries: he_concept = he.concept if has_type_tables(header.mitm, he_concept): @@ -291,9 +294,7 @@ def mk_sql_rep_schema(header: Header, 'attributes': lambda: [(name, sa.Column(name, dt.sa_sql_type)) for name, dt in zip(he.attributes, he.attribute_dtypes)], }, additional_column_generators=(_gen_within_concept_id_col,), - schema_item_generators=( - _gen_unique_constraint, _gen_pk_constraint, _gen_index, - _gen_foreign_key_constraints), + schema_item_generators=type_table_schema_item_generators, override_schema=schema_name) if he_concept not in type_tables: