My favorites | Sign in
Project Home Downloads Wiki Issues Source
Search
for
AlexRecord_ja  

Featured, Phase-Design
Updated Jul 27, 2009 by shumpei....@gmail.com

サマリ

AlexRecordは、HTML5 Web DatabaseをベースとしたO/R Mappingフレームワークです。

Web Databaseにおける基本的なDB操作は全て非同期なため、AlexRecordのAPIは非同期処理が基本です。Web Database仕様においては、ワーカ内でのみ使用できる同期処理API(openDatabaseSync())も存在しますが、現時点においては実装しているブラウザが存在しないため、AlexRecordでも実装を見送っています(将来的にはサポートを予定しています)。

オンラインデモ

オンラインデモはこちらのページになります。 HTML5のWeb Databaseをサポートしたブラウザ(2009/7/28時点ではSafari4のみ)でご覧下さい。

チュートリアル

AlexRecordを利用するには、まず<script>タグを用いてJavaScriptファイルを読み込みます。

<script type="text/javascript" src="alex.core.js"></script>
<script type="text/javascript" src="alex.record.js"></script>

次に、alex.record.configオブジェクトをセットアップし、設定を行います。

alex.record.config = {
    databases: {
        "default": {
            version: 1,
            displayName: "Default DB",
            estimatedSize: 1024 * 1024
        }
    }
};

データベースのテーブルに対応したクラスを作成します。 このクラスには、テーブルに対する操作(テーブルの作成/削除など)がstaticメソッドとして、テーブル内のレコードに対する操作(レコードの保存/削除など)をインスタンスメソッドとして定義されます。 また、カラムの名前に対応するsetter/getterメソッドも定義されます。

var Book = alex.record.Class({
    tableName: "Book",
    columns: [{
        name: "id",
        type: "integer",
        primaryKey: true,
        autoIncrement: true
    }, {
        name: "title",
        type: "string",
        notNull: true
    }, {
        name: "price",
        type: "integer",
        notNull: true
    }, {
        name: "ISBN",
        type: "string"
    }]
});

テーブルを作成します。非同期で実行されるため、処理結果はコールバック関数で受け取ります。

Book.createTable(function(result, error) {
  if (error) {
    // error handling
    return;
  }
  ...
});

コールバック関数のシグネチャは、メソッドが正常終了したときの結果オブジェクトが第一引数、メソッドがエラー終了したときのエラーオブジェクトが第二引数として渡されます。 alex.recordでは、全ての非同期コールバックがこの形式です。

レコードを作成するには、先ほど作成したクラスをコンストラクタとしてnew演算子を使用します。コンストラクタの引数を用いてレコードを初期化する事が出来ます。

var book = new Book({title: "HTML5 Reference", price: 1000});

カラム名に対応したsetterメソッドを使って値を設定する事も出来ます。

book.setISBN("487311389X");

このレコードを保存するには、save()メソッドを用います。

book.save(function(result, error) {
  if (error) {
    // error handling
  }
});

APIリファレンス

RecordClass alex.record.Class(Object spec)

テーブルと一対一で対応するクラスを作成します。 引数のspecには、以下の値を指定する事が出来ます。

  • tableName - テーブルの名称です。必須。
  • columns - カラムの設定を配列で指定します。カラムの設定には、以下の値を指定できます。
    • name - カラム名
    • propertyName - setter/getterメソッドのベースとなるプロパティ名です(省略時はカラム名が使用される)
    • type - カラムの型。integer, string, realを指定可能です(省略時はstring)
    • primaryKey - この列が主キーかどうかをboolean型で指定します。
    • autoIncrement - 列の値が自動でインクリメントされるかどうかをbooleanで指定します。
    • unique - 列の値がユニークかどうかをbooleanで指定します。
    • notNull - 列がNULLを許容するかどうかをbooleanで指定します。
    • defaultValue - 列のデフォルト値を文字列で指定します。
    • reference - 外部キーの設定です。以下の設定を行えます。
      • propertyName - setter/getterメソッドのベースとなるプロパティ名です。
      • tableName - 参照先のテーブル名です。
      • columnName - 外部キーの参照先カラム名です。
      • type - 参照のタイプです。"one_to_many", "many_to_one", "one_to_one"を指定できます。
      • fetchType - 検索時、参照先のテーブルをJOINで取得する("eager")か、getterメソッドを呼び出されたときに遅延フェッチするか("lazy")を指定します。参照のタイプが"many_to_one", "one_to_one"の場合、"eager"を設定する事が出来ます。デフォルトは"lazy"です。

Database alex.record.database(DOMString dbName)

データベース名を指定し、Web Database仕様におけるDatabaseオブジェクトを取得します。指定したDBがオープンされていなければ、自動でオープンします。また、一度オープンしたDatabaseオブジェクトはキャッシュされます。

void alex.record.executeSql(DOMString sql, optional Array args, optional Function callback, optional any dbOrTransaction

SQLを非同期実行します。引数の意味は次の通りです。

  • sql - SQL文字列。プレースホルダとして「?」を指定する事が可能です。
  • args - プレースホルダを置換するための引数です。
  • callback - 結果を取得するためのコールバック関数です。結果はalex.record.ResultSetクラスのオブジェクトです。
  • dbOrTransaction - データベース名、もしくはWeb Database仕様におけるTransactionオブジェクトを指定します。データベース名を指定した場合は、そのデータベースに対するトランザクションが自動的に開始/終了されます。Transactionを指定した場合は、そのトランザクション内でSQLが実行されます。

class alex.record.ResultSet

SQLを実行した結果にアクセスするためのインターフェースです。Web Database仕様におけるResultSetオブジェクトをラップして、使いやすいAPIを追加するのが主目的です。

insertId

insert文の結果生成されたIDを取得します。

rowsAffected

更新操作が影響を与えたレコード行数を返します。

alex.record.ResultSet(rs)

コンストラクタ。Web Database仕様におけるResultSetオブジェクトを指定します。

void each(Function callback)

結果セットを先頭から最後まで繰り返し、コールバック関数をループの都度呼び出します。

ResultSet next()

結果セットのカーソルを一つ先に進めます。カーソルが最後に達すると、メソッドの戻り値はnullとなります。

void close()

結果セットをクローズします。

any get(DOMString fieldName)

フィールド名を指定して、現在のカーソル位置の行に含まれる値を取得します。

Object object()

現在のカーソルが指す行を、JavaScriptオブジェクトとして取得します。結果オブジェクトのプロパティ名は、結果セットのフィールド名に対応します。

Record record(RecordClass recordClass)

現在のカーソルが指す行を、レコードのオブジェクトとして取得します。このメソッドを使用するには、結果セットから「テーブル名カラム名」と言うフィールド名で値を取得できるようになっている必要があります。

RecordClass

alex.record.Classで作成する、テーブルと一対一に対応するクラスをRecordClassと呼びます。

static boolean isAlexRecord

常にtrueを返します。

static DOMString tableName

テーブル名です。

static DOMString database

データベース名です。

static Array refColumns

外部キー列の定義です。

static rowIdColumn

rowid(テーブルの行を特定することのできる整数型のキー)を表す列の定義です。

static pkColumn

テーブルの主キーを表す列の定義です。

static void addEventListener(DOMString eventName, Function listener)

レコードに対する操作をフックするためのイベントリスナを追加します。現在監視できるイベントは以下の通りです。

  • beforeSave/afterSave
  • beforeRemove/afterRemove
  • beforeUpdate/afterUpdate

また、イベントハンドラに渡されるEventオブジェクトは、以下のプロパティを持ちます。

  • record - 処理の対象となっているイベント

static void removeEventListener(DOMString eventName, Function listener)

イベントリスナを削除します。

static void createTable(Function callback, Object options)

テーブルを作成します。既にテーブルが存在する場合は何も行われません。以下のようなオプションを第二引数に渡す事が出来ます(さらに多くのオプションが追加される予定です)。

  • temporary - データベースがクローズされると同時に削除される、一時的なテーブルを作成するかどうかをbooleanで指定します。

static void dropTable(Function callback)

テーブルを削除します。テーブルが存在しない場合は何も行われません。

static void create(Object props, Function callback, Transaction tx)

レコードを作成します。以下のコードとほぼ等価です。

new Record(props).save(callback, tx);

static void find(any id, Function callback, tx)

指定したIDでDBを検索し、結果をRecordClassのインスタンスとして取得します。IDに対応するレコードがない場合は、nullが返されます。

static alex.record.query.Query filter(DOMString expr, variadic args)

テーブルに対する検索クエリを作成します。

void set(DOMString propName, any value)

プロパティに値を設定します。

any get(DOMString propName)

プロパティから値を取得します。

void setByColumnName(DOMString columnName, any value)

プロパティ名(propertyName)ではなくカラム名(name)を用いて、プロパティに値を設定します。

any getByColumnName(DOMString propName)

プロパティ名(propertyName)ではなくカラム名(name)を用いて、プロパティから値を取得します。

void populate(Object values)

JavaScriptオブジェクトを引数にとり、プロパティの値をまとめてセットします。以下のように使用します。

book.populate({ title: "title", price: 100 });

void populateByColumnName(Object values)

プロパティ名(propertyName)ではなくカラム名(name)を用いて、プロパティの値をまとめてセットします。

void save(Function callback, optional Transaction tx)

レコードをデータベースに保存します。

void update(Function callback, optional Transaction tx)

データベース上のレコードを更新します。レコードを特定するためのRowIDがセットされていない場合、エラーとなります。

void remove(Function callback, optional Transaction tx)

データベース上のレコードを削除します。レコードを特定するためのRowIDがセットされていない場合、エラーとなります。

integer getRowId()

RowIdを取得します。

class alex.record.query.Query

検索クエリを抽象化したクラスです。RecordClass.filter()の戻り値に使用されます。

alex.record.query.Query(RecordClass recordClass)

コンストラクタ。検索対象のRecordClassを指定します。

Query filter(DOMString expr, variadic args)

フィルタを追加します。

Query orderBy(variadic columns)

ORDER BY句の列名を指定します。列名を文字列で指定すると、昇順になります。降順で並べ替えたい場合は、JavaScriptオブジェクトを使用します。

// タイトルは降順を指定
query.orderBy("price", {column: "title", desc: true});

Query limit()

LIMIT句に用いる数値を指定します。

Query offset()

OFFSET句に用いる数値を指定します。

integer count()

クエリを実行した結果の行数を返します。

void fetch(Function callback, any dbOrTransaction)

非同期で実行した結果を取得します。結果の型はResultSetクラスのオブジェクトになります。

void fetchRecords(Function callback, any dbOrTransaction)

非同期で実行した結果を取得します。結果の型はRecordClassの配列になります。

void fetchArray(Function callback, any dbOrTransaction)

非同期で実行した結果を取得します。結果の型はオブジェクト(ResultSet.object())の配列になります。


Sign in to add a comment
Powered by Google Project Hosting