I described the implementation of the data dictionary in a previous post. I have updated the implementation to include support for dropping tables.
I stated in my last post that the creation of the table definitions would be handled as post commit actions. In the end this wasn't necessary, and the table creation is logged against the page 0 of the virtual container 0. This container is pre-created with a single page when a new database is created. This allows arbitrary actions to be logged against the page (0,0). Logging as post commit action would not have worked as the definitions should be created before any container that depends on these is created.
I also fixed issues with the logging of the table and container creation so that these are now logged as undoable log records, and in the event the transaction aborts, the table creation is undone. I will describe the changes in a separate post.
The action to drop the table definition is handled as a post commit action. This is because we want to avoid dropping any object until we are sure that the transaction will be committed.