More About Table Construction
Tables are very versatile, but before we can take advantage of them we should know how to construct them to our liking in Tabular-C++. So we shall now go over all the details of how our tables are constructed in Python.
Table Module
Tabular-C++ users can use Python modules to define their tables.
The tables are expressed as Python dicts, and an arbitary number of these are placed in an array called tables
.
The constructor script tabcpp.sh
will go through each table and insert appropriate C++ code in a nominated header file.
Table Name
The 'name'
of a table should agree with the name given in the header file by the comments //TABLE_BEGIN <name>
and //TABLE_END <name>
.
Fields
The columns of our table are refered to as fields. A field is a Python dict e.g.,
{'type': 'float', 'name': 'height'}
but we may also construct this with a function defined in the tabcpp
Python module,
tabcpp.field('float', 'height')
Fields are given together in the table dict, in an array under the key 'fields'
.
All field datatypes must be avaiable at the location indicated in the target header file.
Keys
Every row in a table can be identified by its unique key value. There are two major types of key:
- Automatic ('auto') keys - The table manages these itself. Useful for when no field naturally identifies a row.
- Manual ('man') keys - The user manages this, it being one of the table's fields. Useful for when rows can be uniquely determined by a particular field value.
In the Python module, keys are given by a dict e.g.
{'type': 'auto', 'datatype': 'short', 'name': id}
or use a function from tabcpp
,
tabcpp.key('auto', 'short', 'id')
The key is given in the table dict under the key 'key'
.
Inserting the Table in a Header File
Code insersion is performed using the tabcpp.sh
script, which wraps the real workhorse construct_table.py
. You shoud ensure that the table Python module and the target header file are in the same directory. The command syntax is,
$ tabcpp.sh load <path-to-table> <header-name> <table-python-module-name>
In the target header file, it is necessary to have the header tabcpp.hpp
is included.
Otherwise the table code will give an error.