Partie 16: Directive EXPLAIN
Lecture 3 min. âą
Table des matiĂšres
Les articles de la série
- Partie 1 : Construire le REPL
- Partie 2 : Sérialisation des données
- Partie 3 : Database
- Partie 4 : Tables
- Partie 5 : Parser les commandes, création de la boßte à outils
- Partie 6 : Parser les commandes SQL
- Partie 7 : Tuples de données
- Partie 8 : Contraindre les données via un schéma
- Partie 9 : Découper le stockage des tables en pages
- Partie 10 : Clefs primaires
- Partie 11 : Expressions Logiques SQL
- Partie 12 : Scans et filtrage
- Partie 13 : UTF-8 et caractÚres échappés
- Partie 14 : Attributs nullifiables
- Partie 15 : Index secondaires
- Partie 16 : Directive EXPLAIN
- Partie 17 : Logical Plan
- Partie 18 : Exécution du plan logique
- Partie 19 : Suppression d'enregistrements
- Partie 20 : Réindexation et compactation de tables
Bonjour Ă toutes et tous đ
Par lâintroduction des index secondaires, nous avons ouvert tout un champ des possibles sur de la recherche de donnĂ©es plus efficiente. Mais nous nâavons vraiment parcouru que la moitiĂ© du chemin: nous savons indexer, mais pas rechercher dans cet index.
Afin de permettre de comprendre quand le query engine dĂ©cide ou non de dĂ©cider de lâutilisation des index secondaires. Nous allons introduire un modificateur dâexĂ©cution que nous allons appeler EXPLAIN
. Ce sera notre mode de debug pour bĂątir des systĂšmes plus intelligents et complexes.
On a encore bien du pain sur la planche, mais au bout de 16 articles et je ne sais combien de millier de lignes de codes expliquĂ©es, vous commencez Ă prendre lâhabitude. đ
Parser
Tout commence par bĂątir un parser pour dĂ©tecter notre modificateur dâexĂ©cution.
Nous dĂ©cidons que si le premier token est EXPLAIN, alors la commande doit-ĂȘtre debugguĂ©e.
EXPLAIN SELECT ...
Nous devons ainsi reconnaĂźtre le token EXPLAIN
.
La structure reconnue est un peu étrange
;
Le usize
reprĂ©sentera le nombre de bytes consommĂ©e pour parser le âEXPLAINâ sâil existe.
On est désormais en capacité de détecter notre nouveau modificateur.
On réalise également un utilitaire qui reconnaßt directement notre modificateur.
Propagation du EXPLAIN
Une fois le modificateur EXPLAIN dĂ©tectĂ©e ou non, il faut le propager dans lâexĂ©cution.
Etant donné que le modificateur induit un comportement différent, nous allons avoir deux types de retours:
- des résultat de commandes
- le résultat du
EXPLAIN
.
Note
EXPLAIN va retourner une liste de dĂ©tails. DâoĂč le
Vec<String>
Pour permettre Ă toutes les commandes de bĂ©nĂ©ficier du EXPLAIN, la dĂ©tection est rĂ©alisĂ©e avant le parse de la commande elle-mĂȘme.
On modifie le trait Execute
en rajoutant un flag boolĂ©en qui permet de passer lâexĂ©cution en âdry runâ de debug ou non.
Le flag est propagĂ©, jusquâĂ atteindre la base de donnĂ©es et sa mĂ©thode select.
Pour le moment, nous nâen ferons rien, mais ce nâest quâune question de temps. đ
Conclusion
Lâarticle est court, mais va permettre de construire la suite plus simplement.
Dans la prochaine partie, nous allons attaquer le concept fondamental de la base de donnĂ©es quâest le logical plan.
Merci de votre lecture â€ïž