I wanted to create a post detailing the work we are doing for version 1.1 of Objecto and why it is taking a bit longer than first anticipated.
Whilst version 1.0 is a stable and usable product, the release did highlight some flaws which we are now addressing.
The most common issue is that one of broken inheritance chains. In version 1.0, you can inherit from a base classes so that you reuse that functionality and the provider will automatically adjust the underlying database schema to support the inheritance. Unfortuneately there was no way to update a newly created subclass that inherited from an instance of an object alredy in the database. An update would throw a
NotFoundException and an insert would raise a
DuplicatekeyException caused by the underlying record.
Whilst at first this seemed like a trivial correction to make, the change in functionality rippled through the product, causing a major rewrite of the stored procedure engine in the SqlServer provider classes. The good news now is that in version 1.1, the provider Insert method fully supports partial inheritance chains.
Secondly, in v 1.0 the SqlProvider engine creates some query procedures that we werent happy with - due mainly to performance. When optimizing the code used to generate procs for the SqlProvider Query engine, it became fairly obvious that a fresh approach was needed to the way in which the procedures worked and the query engine in the Sql Provider. In v 1.1, the query procedure will now return one sql result set across all subqueries, instead of breaking down the result sets by query. This leads to dramatically faster performance, on par with a normal hand coded procedure but the SqlFormatter and Sqlcommand classes had to again be drastically altered to cater for the change in processing these results. Reflexive joins and outer are now fully supported and the query procedures produced are now much more readable.
We have also had requests from developers who wanted to adjust the engine for use with other methodologies to our Object/Sql schema. The refection parsing engine now supports a fully customizable and extensible set of class attributes, so that you can achieve object persistance by marking your classes and columns with your own set of attributes. Simply register your reflectionParser class with the ReflectionCache.
Lastly, other items that we already announced for v 1.1 have been included, they are
- Results filtering
- Abstract classes
- Interface based attribute declarations
I will let everyone know via the forums as soon as a version of 1.1 is available for testing. I suggest signing up for the RSS feed if you havent already done so.