Sun, 07 Jun 09

AirDB Updates

A summary of the several improvements committed to AirDB in the last five weeks.  1. Support for has-many and belongs-to associations 1. Support for multiple associations for a given Modeler class. 1. More smarts and existence checks for automatic schema migration 1. Call-chaining for Associations e.g. post.author.comments.count 1. Miscellaneous fixes, improvements and optimizations


Highlights of the major new additions since I wrote about the initial design.

The Migrator handles schema versioning, checking and automatic migrations.

public class Migrator implements IMigratable
{
  public function Migrator(klass:Class, options:Object, directives:Array) {
     // setup table structures, prototype fields, existing schema
     DB.migrate(this);
  }
  // Supported migration directives

  // create a table after processing the provided function block
  public function createTable(block:Function):void { ..}

  // specify a column, if it does not exist, it is created.
  public function column(name:String, dataType:uint, options:Object = null):void {..}

  // make a join table to handle many-many associations with specified class
  public function joinTable(klass:Class):void { .. }

  // map a foreign key for belongs-to association
  public function belongsTo(klass:Class):void { .. }
}

The Associator handles associations which are specified via class meta-data. The improvements under the hood make it easier to make associations between Modeler object instances. For example

// Use the record ID of the target to specify associations
// Post has-many comments
post.comments.push(3);

// Chain the target for further calls
// Post belongs-to author and Author has-many comments

// Obtain field value of associated target
var nm:String = post.author.name;

// Make further associations on associated target
post.author.comments.push(new Comment({title: 'hello there'}));

Join queries and foreign-key lookups are now a breeze with AirDB.

Sun, 07 Jun 09