jeudi 9 mai 2013

Formater une requête avec sed

Dans libreoffice base, nous créons une requête en mode SQL en veillant à la bonne lisibilité du code grâce à un formatage judicieux, comme illustré ci-dessous:


Cependant lorsque plus tard nous sommes amené à éditer cette requête, nous constatons (avec horreur) que notre magnifique formatage a disparu:

Qu'à cela ne tienne, introduisons dans un (émulateur de) terminal (virtuel) la commande

sed -r 's/\,|AND|WHERE|FROM|CASE|WHEN|END/\n&/g'

suivie d'un appui sur la touche ENTER:


Aucun nom de fichier ne lui ayant été fourni, sed est en attente des données qu'il doit traiter et qui vont lui être communiquées via l'entrée standard (stdin).
Dans libreoffice, nous sélectionnons puis coupons l'instruction SQL avant de la coller dans le terminal:


Un appui sur ENTER envoie les données vers sed et nous terminons avec CTRL-D:


Il reste à effectuer un copier-coller de la requête formatée vers la fenêtre d'édition de libreoffice:


Et voilà: nous pouvons maintenant travailler de manière plus agréable.
Si nous sommes intéressé par le procédé, il peut être utile de définir un alias:

alias fq="sed -r 's/AND|WHERE|FROM|CASE|END/\n&/g;s/WHEN/\n  &/g'"

dont la définition sera permanente si elle est ajoutée au fichier ~/.bashrc

(fq est mis pour format query)

Cette fois nous ne considérons pas les virgules car si les traiter était, dans notre exemple,  justifié (pour une meilleure lisibilité), ce ne serait plus le cas en de présence de fonctions dont les arguments sont séparés par des virgules