Auto-increment and primary key support
After a long time without significant enhancements to Metabase, I am
finally adding support to database schema features like auto-increment
fields and primary keys. Future versions of Metastorage will generate
code that takes advantage of these features.
Currently the new Metabase version is in alpha stage as the support for
these features is not completely done. Here is the status:
- autoincrement is a new option of the schema of table fields. It
automatically expands to integer, notnull, default 0 and primary key.
- There are two new functions in the API GetNextKey and GetInsertedKey.
GetNextKey determines what to put in an insert statement in the place of
the value an auto-increment field. GetInsertedKey retrieves the last
inserted value in autoincrement field. These functions are run before
and after an insert query respectively.
- primarykey is a new section of table schema definition. The definition
is similar to indexes but you can only have one primary key per table.
- These features are implemented in the drivers for MySQL, PostgreSQL
and Oracle. If you have access to other databases like Microsoft SQL
server, Interbase, Informix, SQLite, Access/ODBC, mini-SQL, please let
me know because currently I am not able to test the new features in all
- Altering tables with primary keys or autoincrement fields is not yet
- There is a new database manager API function named
CreateDetailedTable. This is an extension of the CreateTable function to
allow for creation of tables with primary keys and other features in the
future. It supports a check mode that lets the schema manager know if
the described table can be created by the database driver.
- The schema manager now performs a safety check when installing or
altering databases with new tables. If it is not possible to install a
table because the current driver does not support some features, nothing
is changed in the database and the schema manager will return an
explanatory error message.
- Schema reverse engineering of database tables with auto-increment
fields or primary keys is not yet implemented.
- The driver test suite has now a new test named autoincrement that
tries to insert a few records in a new table with an autoincrement field
and verifies if it worked correctly. You may look into the
driver_test.php script for how auto-increment support works.
- There will be a new function to set a value of a prepared query to the
next auto-increment value of a table. This is not yet implemented but of
course will only work with insert queries.
These changes are available in CVS. You may find instructions on how to
obtain access to the CVS server or a download daily snapshots from here:
Please test these changes looking and running the driver_test.php script
and provide your feedback.
PHP Classes - Free ready to use OOP components written in PHP
PHP Reviews - Reviews of PHP books and other products
Metastorage - Data object relational mapping layer generator