Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix inconsistency in snowflake schema with intermediate unused table
Probleme explique en commentaire du nouvel attribut KWDatabase::nkdMutationClasses // Dictionnaire des classes de mutation, avec en cle la classe physique des objets a muter // et en valeur la classe suite a la mutation // // Dans la majorite des cas, la classe de mutation est la classe logique de meme nom, // qui garde les attributs charges en memoire de la classe logique, alors que la classe physique // a potentiellement plus d'attributs charges en memoire, en unused dans la classe logique, mais // necessaires dans la classe physique pour le calcul des attribut derives // // Dans des cas a effet de bord, la classe de mutation peut rester la classe physique si la classe // logique est en unused, mais est necessaire en tant qu'attribut de type relation non charge en // memoire, mais a garder pour la destruction des objets (cf. UnloadedOwnedRelationAttribute dans KWClass) // Exemple d'effet de bord: // La classe Customer a des Services en Unused, ses services on des Usages, et la classe Customer // a tous ses usages utilises via la regle TableSubUnion(Services, Usages) // Dans ce cas, les Services physiques sont gardes dans leur classe physique pour gerer recursivement // la destruction des Usages, mais ils ne sont pas mutes, car non utilises au niveau logique Impacts principaux - KWDatabase - BuildPhysicalClass: memorisation des classes de mutation dans le nouvel attribut nkdMutationClasses - MutatePhysicalObject: utilisation de nkdMutationClasses en parametre supplementaire - KWDataTableSliceSet - PhysicalRead: adaptation miimaliste pour le parametrage supplementaire de la methode Mutate - KWObject - Mutate: prend nkdMutationClasses pour gere les classe de mutation destination - on distingue la mutation de l'objet, qui n'est effectuee que si la classe de mutation est une nouvelle classe, de la mutation des attributs de type relation charges en memoire, qui est effectuee systematiquement - ajout de trace facilitant l'analyse des problème mémoire dans les methodes suivantes - KWObject (constructeur) - ComputeAllValues - DeleteAttributes - Mutate - PrettyWrite Tous les tests de LearningTest passent, y compris en debug, sans fuite memoire
- Loading branch information