To Do List Short term: - Track multiple historical versions of a schema like VMWare's snapshot/clone system. Store each copy separately on disk for efficiency. - Make RDBMSRules query driver for more stuff (max identifier length, reverse engineering, etc.). This will require an active driver when a new schema is created, however. - Overhaul foreign key objects so that one relationship has one such object, shared by two tables. - Add constraints to output SQL for MySQL (InnoDB tables will actually use them). - Make sense of foreign key definitions for InnoDB tables in MySQL. - Table update & delete. - Update & delete "handles", to avoid having to regenerate SQL over and over. - Batch insert ? - Add Alzabo::Runtime::Schema->clone method. - allow defaults to be marked as functions ( NOW() ) so they're not quoted in DDL SQL. Medium term: - reconsider MethodMaker's pre/post hooks and try to re-implement in a more flexible/sane manner. - Abort during Build.PL if supplied username/pw cannot connect to DB (and try to test privs too). Suggested by Robert Creager. - Output Dia XML. - Make a tool to convert schemas from one RDBMS to another. This will probably require user prompting because some things are unresolvable without a loss of information. - Add an Alzabo::Database class between the schema and table. This will allow multiple databases in a schema (on multiple platforms ideally) and allow you to do joins between these databases. This probably raises all sorts of horrid transactional issues I haven't yet thought of. - Attempt to guess relationships when reverse engineering a schema without foreign key information. - More drivers & rules (Oracle, Sybase, Interbase, Solid, and so on) - Integrate data validation into the code and schema creator in such a way that Alzabo::MethodMaker can automatically create pre_insert and pre_update methods. - Expand regression tests for core API - SQLMaker, RDBMSRules. - Give the options to save objects to disk in something a bit more robust than a serialized object form. Eventually, Alzabo will spit out some sort of XML. Ongoing: - Support 'feature probing' via the rules for user interface and to determine whether to try to do things (like use transactions). This is a broad idea and includes things such as returning a list of possible column types to the user interface or having a flag for supporting transactions. - Robin Berjon suggested a single documentation 'page' that contains a list of all the method and what objects they apply to. This exists as Alzabo::QuickRef. - Support any and all SQL, of arbitrary complexity. This is fairly far along. - Non-Mason interface(s) (curses, plain CGI)