13 Dec 2002 jfrisby   » (Journeyer)

I haven't posted much about it recently but the status of EasyORM is thus: EasyORM 0.5.0-alpha9 has proven in our reasonably stressful production environment to be quite robust. The Java version is very very slowly progressing, having been scrapped and restarted.

Basically, I'm building a set of components that will make implementation of a tool such as EasyORM a lot easier:

  • Templates - A generalized nested (heirarchical) template system intended for use by code-generators. This is 100% done and I really should establish a Freshmeat project for it.
  • BeanBuilder - Using Templates, this tool takes a description of a JavaBean and produces source for that bean. Allows terse description of robust beans, including type-safe collections as attributes and so forth. This is about 98% done -- using it to build SQL (see below) has proven quite instructive and so I'm making it a bit more flexible before releasing it.
  • SQL - A toolkit for modeling the structure of relational schema, including a MySQL DDL parser. The parser is written using ANTLR and is about 98% completed and quite robust in its support of MySQL's DDL (as it's IMPLEMENTED, not how it's DESCRIBED in the docs -- the docs have a number of mistakes). The model is written using BeanBuilder and is about 85% complete.
There will doubtless be several more such packages/tools built before or during the construction of EasyORM. One such toolkit is likely to be an analogue of the SQL package but for object models, rather than relational schema.

Ultimately I want each of these tools to do as little as possible because I know that each piece will probably undergo MASSIVE revision as I learn more about it. It may not seem like it on the surface but O/R mapping contains a LOT of non-trivial problems to deal with: Besides the obvious (mapping objects to relational schema), things like robust generation of efficient and reliable code aren't as trivial as they might at first seem. There's also issues of usability with respect to the mapping definition language, GUIs, etc.

Setting aside EasyORM for a moment, I made a simple but handy little tool called DataDiff which will compare the contents of identically-named tables in two databases on a MySQL server and return rows that differ between the two. Sort of like a NATURAL FULL OUTER JOIN, except that MySQL doesn't do FULL joins, and NATURAL joins don't give the desired results if columns contain NULLs. In addition, the tool will optionally ignore the values in DATE/TIME/DATETIME/TIMESTAMP columns. Basically, this tool was built as part of an initiative to have a push-button release process that included extensive regression testing. It isn't enough to ensure that the front-end produced the "right" answer, one must also ensure that it did the right thing in the back-end as well. DataDiff allows us to do this.

DataDiff is one of a handful of small tools developed internally for our Java-based development efforts, and as time permits I'll release the others. All of these tools are focused on quality-management by automating testing and to a smaller-extent enforcement of "best practices" where applicable.

Latest blog entries     Older blog entries

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!