-
Notifications
You must be signed in to change notification settings - Fork 128
Documentation Guide (Doxygen)
fschopp edited this page Feb 16, 2011
·
12 revisions
- SQL documentation is supported by a Doxygen filter that translates CREATE FUNCTION / CREATE AGGREGATE statements to (empty) C++ function definitions. This functionality is currently in beta status. Let me (Florian) know of bugs or feature requests. If you are interested, the source code for the SQL2C++ filter consists of the flex and bison files sql.ll and sql.yy at https://github.com/madlib/madlib/tree/master/doc/etc.
- Current features:
- Translate CREATE FUNCTION and CREATE AGGREGATE statements into empty C++ function definitions
- Both inline (C-style) comments of the form
/** ... */and end-of-line comments of the form--! ...\nare recognized as Doxygen comments - Since PostgreSQL/GP disallow labeling the arguments of aggregate functions, the filter will automatically uncomment C-style comment that start with
/*+(currently only at spots where it makes sense). The same can be used for default arguments (not supported by Greenplum or PostgreSQL <= 8.2). Example : CREATE AGGREGATE fancyAggregate(/*+ "identifierA" / INTEGER) ( ... ) CREATE FUNCTION amazingFn(val DOUBLE PRECISION /+ DEFAULT .01 */) RETURNS INTEGER ... will be translated into: fancyAggregate(integer identifierA) { }; integer amazingFn(float8 val = .01) { }; - For aggregates, the return type will be automatically inferred from the transition state / final function
- Capitalization of identifiers will be preserved if put in quotes
"iDeNtiFiEr" - Line numbers are preserved
- Still to be implemented:
- Support for all PostgreSQL types
- Automatically generate documentation for type definitions
- All module documentation should be moved to .sql_in files. See bayes.sql_in and regression.sql_in as examples.
- All uninstallation SQL files should end in "_drop.sql_in". Otherwise, they show up in doxygen as visual clutter in the file list.
- All files containing a "/sql/" in their path are excluded. These files are assumed to belong to regression tests and should not clutter the file list, either.
- When in doubt, stick to the best practices of the language you are using. E.g., Python gives the following advice for its docstrings: http://www.python.org/dev/peps/pep-0257
- Create a new group for your module (in methods/mainpage.dox) and use
@addtogroup your_module. - Write
@aboutsection to describe your algorithm. - Write
@prereqsection, for example:Requires SVEC MADlib module.Nothing about PostreSQL or Greenplum. - Write
@usagesection to describe the API. (In the future we may need to split this into os-level side and in-db side. - Write
@exampsection. The reason we say 'examp' (instead of example) is because we don't want to see this on a Doxygen example tab. - Use
@literatureto list your references.
See bayes.sql_in for an example.