MySQL Workbench comes with a Visual Explain feature that is written in Python using Cairo. This project simply extracts that code and provides a minimalist CLI for it.
Since Cairo supports both PNG and SVG, with only a few line changes, I was able to add support for SVG. However, due to the fact that underlying code vectorizes input text, the SVG output is generally larger than PNG output.
Provided releases are Python 3 zipapp.
sudo apt-get install python3-cairocffi
curl -L https://github.com/leonyu/mysql-visual-explain-cli/releases/latest/download/mysql_visual_explain_cli.pyz -o ./mysql_visual_explain_cli
chmod +x ./mysql_visual_explain_cli
./mysql_visual_explain_cli explain.json explain.png
./mysql_visual_explain_cli explain.json explain.svg
mysql --raw --skip-column-names -e "EXPLAIN FORMAT=JSON SELECT * FROM INFORMATION_SCHEMA.COLUMNS;" | ./mysql_visual_explain_cli - columns_explained.png
PNG | SVG |
---|---|
The MySQL Workbench Python code calls Cairo C ABI via SWIG bindings, thus this project depends on CairoCFFI which provides a similar facility via FFI.
MySQL Workbench uses Swig typemap to wrap some C functions so the function signatures exposed are more Pythonic. Those wrapped functions with different APIs include cairo.cairo_text_extents()
and cairo.cairo_set_dash()
. The Swig typemap also performed str
to byte
conversion for the Python code. These changes have to be unpatched in this project.
This project is a derivative work of MySQL Workbench which is GPLv2. Meaning unless I have money for a lawyer, it will forever be GPLv2 as well.