-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
462 improving uniqueness management in multi table schemas #484
462 improving uniqueness management in multi table schemas #484
Conversation
e3ac126
to
8fc4f20
Compare
// Unicite des instances de la classe // - soit la classe est racine // - soit elle contient des attributs de type relation non calcules, ce qui implique une unicite // de ses instances pour que chaque enregistrement de sous-table soit rattache de facon // unique a son enregistrement parent dans le schema multi-table hierachique // L'unicite est controlee uniquement au moment de la lecture des donnes a partir d'une base // pour des dictionnaire ayant des cles. Cela ne concerne pas les dictionnaires avec ou sans cle // utilise pour la construction de table en memoire // Cette caracteristique est calculee au moment de l'indexation de la classe KWClass::IsUnique Impacts principaux de la gestion de l'unicite - KWClass - Set|GetForceUnique: methode protected avancee pour forcer l'unicite, meme pour une classe sans sous-tables - KWDatabase - BuildPhysicalClass: memorisation par SetForceUnique de l'unicite de la classe physique, meme si ses attributs relation non calcules sont supprimes, car non utilises - KWMTDatabase - DMTMPhysicalRead: gestion de l'unicite lors de la lecture selon le caractere IsUnique (et non GetRoot) de la classe Quelques typos ou details corriges par ailleur - KWDataPreparationTask::ComputeNecessaryClassAttributeMemory - KWMTDatabase.h - Standard.cpp - Ermgt.cpp WIP
Gestion du ForceUnique de la classe pour la lecture/ecriture de dictionnaire dans les fichiers Permet de transferer cette information "privee", par exemple pour une tache parallele On en profite pour normaliser la terminologie des methodes de gestion de ces meta-donnees prives. Impacts: - KWClass - WritePrivateMetaData, ReadPrivateMetaData: - KWAttribute - WritePrivateMetaData, ReadPrivateMetaData: KWCLex: supression de caracteres accentues d'un commentaire
Ce renommage permet de clarifier la difference entre classe Root, utile pour la gestion des table externes, et classe principale, la classe d'analyse qui n'est pas necessairement Root Cette confusion existait dans le nom de la variable rootMultiTableMapping, avec nombreux impacts dans: - KWMTDatabase - PLMTDatabaseTextFile - KWMTDatabaseStream On fait un commit a part pour ne pas perturber l'analyse des autres commit
…nced table Contexte: Les tables externes sont gerees par la le referenceSolver (classe KWObjectReferenceResolver), pour retrouver les objets Root references. Dans le cas particulier d'un objet principal Root, celui ci est enregitre temporairement dans le referenceSolver pour gerer ses reference internes. C'est le cas par exemple pour le dictionnaire Molecules, pour chainer ses atomes et liaisons avec des references internes au flocon d'une molecule. Le bug etait que l'objet principal etait enregistre des qu'il avait des champs cles, alors qu'il ne doit etre enregistre que s'il est Root Impacts: - KWMTDatabase - PhysicalReadAllReferenceObjects - MutatePhysicalObject - IsPhysicalObjectSelected
…and KWClassDomain Il a souvent dans le code une confusion entre: - main dictionary: dictionnaire d'analyse principal, pas necessairement Root - root dictionary: dictionnaire racine identifie de facon unique, pour gerer les tables externes Recherche systematique des utilisations de root dans le code, pour clarifier la terminologie - renommage des methodes concernees si necessaire - on passe principalement de RootClass a MainClass (Class signifie dictionaire en terminologie interne) - renommage indique car -> dans les notes de commit - renommage des parametres et des variable locales concernes - renommage egalement des commentaires (racine -> principal) Impacts - KWMTDatabase - CheckPartially - CheckObjectConsistency - KWClassDomain - WriteFileFromClass - CloneFromClass - ComputeClassDependence - GetClassDependanceUsedMemory
…apping - KWMTDatabaseMapping - GetDataRoot: supression de cette methode obsolete, jamais utilisee
…exer - KWDatabaseIndexer - GetChunkPreviousRootKeyAt -> GetChunkPreviousMainKeyAt - ComputeRootTableBasicIndexation -> ComputeMainTableBasicIndexation - ComputeRootTableIndexation -> ComputeMainTableIndexation - ExtractRootSampleKeyPositions -> ExtractMainSampleKeyPositions
…nkBuilder - KWDatabaseChunkBuilder - GetChunkLastRootKeyAt -> GetChunkLastMainKeyAt
…ataset - KWArtificialDataset - CreateDataset
…FinderTask - KWKeyPositionFinderTask - TestWithArtificialRootAndSecondaryTables -> TestWithArtificialMainAndSecondaryTables
…eTransfer - KWTestDatabaseTransfer - MTTest - MTTestWithArtificialDatabase - MTMainTestReadWrite - MTTestReadWrite
…aluator - KWPredictorEvaluator - RenameDatabaseClasses
…table dictionary" Cette fonctionnalite de la boite de dialogue "Data table key extractor" permet de construire un schéma en etoile a partir d'une table de log, avec un table principale ayant des identifiant uniques. L'impllementation actuel cree un dictionnaire principal, non Root, donc conforme a la nouvelle terminologie. Par contre, l'aide dans les info-bulle reference la a tort notion de root dictionary, au lieuy de main dictionary Corrections dans les info-bulles - KWLearningProblemActionView - KWDataTableKeyExtractorView - KWMTClassBuilderView
8fc4f20
to
54788bd
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A few questions and typo correction suggestions.
54788bd
to
e06fbb2
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See pending comments.
Gestion des cles uniques dans les drivers de fichier et les bases de donnes - conditionne par la methode IsUnique de KWClass (auraravant GetRoot) - uniformisation de la terminologie, en passant de root a main, principalement pour la gestion des cles - dans les noms de methodes (rappele dans les notes de commit) - dans les noms d'attributs, de parametres ou de variables locales - dans les commentaires (racine -> principal) Impacts principaux - KWMTDatabase - PhysicalSkip: conditionnements sur le IsUnique au lieu de GetRoot - KWDatabaseTask - input_ChunkLastRootKey -> input_ChunkLastMainKey - PLMTDatabaseTextFile - SetLastReadRootKey -> SetLastReadMainKey - KWDataTableDriver - GetLastReadRootKey -> GetLastReadMainKey - KWDataTableDriverTextFile - SkipRootRecord -> SkipMainRecord - ivRootKeyIndexes -> ivMainKeyIndexes - nombreux conditionnements sur le IsUnique au lieu de GetRoot des dictionnaires - PLDataTableDriverTextFile - GetConstRootKeyIndexes -> GetConstMainKeyIndexes - GetRootKeyIndexes -> GetMainKeyIndexes Autres impacts mineurs, uniquement dans les commentaires Ajout du jeu de test: LearningTest\TestKhiops\MultiTables\NoRootSnowflakeDuplicates - test avec schema en flocon, sans dictionnaire Root, et doublons dans les tables principale et secondaires - verification que les doublons sont correctement detectees Autres tests effectues a la main, sur des cas plus volumineux, ou avec une seule table avec cle, en mode Root ou non Tests complets sur LearningTest Les commits de type "Improve terminology between root and main in..." ne concernent que du renommage, sans aucun impact sur le code: - ils peuvent etre survoles lors du review - ils pourraient etre fusionnes en un seul commit
e06fbb2
to
a7d8ba4
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Gestion des clés uniques dans les drivers de fichier et les base
Les commits de type "Improve terminology between root and main in..." ne concernent que du renommage,
sans aucun impact sur le code:
Noveau test dédié sur LearningTest\TestKhiops\MultiTables\NoRootSnowflakeDuplicates
Tests complet sur tout LearningTest
Création d'un issue à discuter: #483