Automatic documentation tools like Javadoc and Doxygen let you generate documentation for your programs automatically. HyperSQL lets you do the same for SQL code. “You feed it your project’s PL/SQL code, and optionally even Oracle Forms, and it turns it into a reference containing statistics (lines of code, comment percentage, and the like), usage references (which code calls what), and even dependency graphs,” says developer Andreas Itzchak Rehberg. “If you use Javadoc-like comments along with your code, you can make the generated HTML pages a full-featured project reference that automatically updates when you update your code.”
The tool, written in Python, is mainly targeted at Oracle database developers, Rehberg says, but anyone who wants to document SQL code can use it. It’s easy to set up and use, with only a few dependencies, and is highly configurable.
Rehberg got involved with the project earlier this year when he began working with a new customer, maintaining a huge project built mainly with PL/SQL and Oracle Forms. The code, as code will do, had grown haphazardly over the years, and needed to be made more consistent, with a common coding style and documentation. Finding a way for new team members to get an overview of the project would also be helpful. After searching for a tool to meet those requirements, Rehberg came across an old version of HyperSQL that hadn’t been updated in years. He took over development from creator Randy Phillips.
“The new developers who just joined our team loved HyperSQL from the first day,” Rehberg says. “And its automatically generated Todo, Bug, and Verification lists (the first two collected from Javadoc @todo and @bug tags, and the latter generated by HyperSQL directly) help us keep track of open issues.”
Rehberg plans more enhancements for the software, based on both what his customer requires and what other users suggest via enhancement requests in the project’s ticket system. He expects to work first on improving support for Oracle Forms, improving and introducing support for certain object types, and tweaking the code to make the app faster.