40歳からのキャリアチェンジ

20代はエンジニア・PM、30代はWeb系エンジニア向けのキャリアアドバイザー。40代の今はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連あたり

013-JazzRecord(ActiveRecord for JavaScript (ORM)検証その1

JazzRecord(ActiveRecord for JavaScript (ORM)のソースは自分の中では結構読み易いから、自分が作っているアプリで参考になりそうなので気がしてます。

JazzRecordのページには

A JS ORM for Google Gears, Adobe AIR, and Appcelerator Titanium

JazzRecord currently supports Google Gears, Adobe AIR, and Appcelerator Titanium PR1, although support for additional JS environments (such as HTML 5 and Aptana Jaxer) is planned.

とTitaniumのPR1ならサポートとありますが、現在のバージョンで使えそうなのかgithubにあるadapter.jsのソースを眺めていたら、関連しそうなところが見つかったので一部引用します。

// 
JazzRecord.TitaniumMobileAdapter = function(options) {
  // use the synchronous DB API in Titanium which
  // is API compatible with Gears DB API
  JazzRecord.setOptions.call(this, options, {
    dbFile: "jazz_record"
  });
  JazzRecord.extend.call(this, JazzRecord.Adapter);

  this.db = Titanium.Database.open(this.options.dbFile);
  this.result = null;
};

JazzRecord.TitaniumMobileAdapter.prototype =  {
  run: function(query) {
    this.parent.run(query);
    this.result = this.db.execute(query);
    var rows = [];
    if(query.indexOf("CREATE") > -1) {
      return rows;
    }
    while(this.result.isValidRow()) {
      var row = {};
      for(var i = 0, j = this.result.getFieldCount(); i < j; i++) {
        var field = this.result.getFieldName(i);
        row[field] = this.result.field(i);
      }
      rows.push(row);
      this.result.next();
    }
    this.result.close();
    return rows;
  },
  
  count: function(query) {
    this.parent.count(query);
    this.result = this.db.execute(query);
    var number = this.result.field(0);
    this.result.close();
    return number;
  },
  
  save: function(query) {
    this.parent.save(query);
    this.db.execute(query);
    return this.db.lastInsertRowId;
  }
};

パッと見た限り使えそうな気がするので、まずはテストコード書いて試してみようと思います(次回続く)