Class: TransactionalExecutor

TransactionalExecutor

new TransactionalExecutor()

SQLTransaction管理・実行クラス

このオブジェクトは自分でnewすることはありません。
h5.api.sqldb.open().transaction()を呼び出した場合と、 Insert/Select/Update/Del/Sqlオブジェクトのexecute()が返すPromiseオブジェクトの、progressコールバックの引数に存在します。

ver1.1.7まではTransactionクラスとTransactionWrapperクラスが別々に存在していましたが、 ver1.1.8からはTransactionalExecutorクラスに統合されました。

本クラスに存在するexecute()add()の使用方法は、Transactionクラスのexecute()とadd()と同じです。

Source:

Methods

(static) add(statement) → {TransactionalExecutor}

1トランザクションで処理したいSQLをタスクに追加します。

このメソッドには、以下のクラスのインスタンスを追加することができます。

Parameters:
Name Type Description
statement Insert | Update | Del | Select | Sql Statementクラスのインスタンス
Returns:
Transactionオブジェクト
Type
TransactionalExecutor
Source:

(static) execute() → {Promise}

add()で追加された順にSQLを実行します

実行結果は、戻り値であるPromiseオブジェクトのprogress()に指定したコールバック関数、またはdone()に指定したコールバック関数に返されます。

 db.transaction()
  .add(db.insert('USER', {ID:10, NAME:TANAKA}))
  .add(db.insert('USER', {ID:11, NAME:YOSHIDA}))
  .add(db.insert('USER', {ID:12, NAME:SUZUKI})).execute().done(function(rs) {
  rs // 第一引数: 実行結果
 });
実行結果は配列(Array)で返され、結果の格納順序は、add()で追加した順序に依存します。
上記例の場合、3件 db.insert()をadd()で追加しているので、実行結果rsには3つのROWIDが格納されています。( [1, 2, 3]のような構造になっている )

また、progress()に指定したコールバック関数の第二引数には、トランザクションオブジェクトが格納され、このオブジェクトを使用することで、トランザクションを引き継ぐことができます。

 db.select('PRODUCT', ['ID']).where({NAME: 'ball'}).execute().progress(function(rs, tx) {
 db.transaction(tx)
  .add(db.update('UPDATE STOCK SET PRICE = 2000').where({ID: rs.item(0).ID}))
  .execute();
 });
select().execute()で返ってきたトランザクションを、db.transaction()の引数に指定することで、db.select()とdb.transaction()は同一トランザクションで実行されます。

ver1.1.8からの変更点
execute()が返すPromiseオブジェクトのprogressコールバックの第二引数(TransactionalExecutorインスタンス)に、 Select/Insert/Del/Update/Sqlインスタンスをaddすることができるようになりました。

下記のサンプルコードは、Statementインスタンスをtx.add()することにより、db.select()と同一トランザクションでSQLを実行しています。

 db.transaction().add(db.select('PRODUCT', ['ID']).where({NAME: 'ballA'})).execute().progress(function(rsArray, tx) {
  tx.add(db.sql(' STOCK', {COUNT:20}).where({ID: rsArray[0].item(0).ID})).execute();
 });
Returns:
Promiseオブジェクト
Type
Promise
Source:

(static) promise() → {Promise}

SQLの実行結果を受け取ることができる、Promiseオブジェクトを取得します
Returns:
Promiseオブジェクト
Type
Promise
Source: