/*
* Copyright (C) 2012-2016 NS Solutions Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* hifive
*/
function Select() {
//
}
function Insert() {
//
}
function Update() {
//
}
function Del() {
//
}
function Sql() {
//
}
/**
* このオブジェクトに設定された情報からSQLステートメントとパラメータを生成し、SQLを実行します
* <p>
* 実行結果は、Promiseオブジェクトのprogress()に指定したコールバック関数または、done()に指定したコールバック関数に、<b>検索結果を保持するインスタンス</b>が返されます。
* <p>
* 検索結果へのアクセスは以下のように実行します。
*
* <pre>
* db.insert('USER', {ID:10, NAME:'TANAKA'}).execute().done(function(rows) {
* rows.item(0).ID // 検索にマッチした1件目のレコードのID
* rows.item(0).NAME // 検索にマッチした1件目のレコードのNAME
* });
* </pre>
*
* また、progress()に指定したコールバック関数の第二引数には、トランザクションオブジェクトが格納され、このオブジェクトを使用することで、トランザクションを引き継ぐことができます。
*
* <pre>
* db.select('PRODUCT', ['ID']).where({NAME: 'ball'}).execute().progress(function(rs, tx) {
* db.update('STOCK', {PRICE: 2000}, tx).where({ID: rs.item(0).ID}).execute();
* });
* </pre>
*
* db.select().execute()で返ってきたトランザクションを、db.update()の第三引数に指定することで、db.selec()とdb.update()は同一トランザクションで実行されます。
* <p>
* <h5>ver1.1.8からの変更点</h5>
* execute()が返すPromiseオブジェクトのprogressコールバックの第二引数(<b>TransactionalExecutor</b>インスタンス)に、
* Select/Insert/Del/Update/Sqlインスタンスをaddすることができるようになりました。
* <p>
* 下記のサンプルコードは、tx.add()で追加したStatementインスタンスを、一番最初に実行したdb.select()と同一トランザクションでSQLを実行します。
*
* <pre>
* db.select('PRODUCT', ['ID']).where({NAME:'ballA'}).execute().progress(function(rs, tx) {
* tx.add(db.select('STOCK', ['COUNT']).where({ID: rs.item(0).ID})).execute().done(function(rows) {
* alert(rows.item(0).COUNT);
* });
* });
* </pre>
*
* @function
* @memberOf Select
* @returns {Promise} Promiseオブジェクト
*/
Select.prototype.execute = function() {
//
};
/**
* このオブジェクトに設定された情報からSQLステートメントとパラメータを生成し、SQLを実行します
* <p>
* 実行結果は、Promiseオブジェクトのprogress()に指定したコールバック関数または、done()に指定したコールバック関数に、<b>登録に成功したレコードのIDを持つ配列</b>が返されます。
* <p>
* 検索結果へのアクセスは以下のように実行します。
*
* <pre>
* db.insert('USER', {ID:10, NAME:'TANAKA'}).execute().done(function(rows) {
* rows.item(0).ID // 検索にマッチした1件目のレコードのID
* rows.item(0).NAME // 検索にマッチした1件目のレコードのNAME
* });
* </pre>
*
* また、progress()に指定したコールバック関数の第二引数には、トランザクションオブジェクトが格納され、このオブジェクトを使用することで、トランザクションを引き継ぐことができます。
*
* <pre>
* db.select('STOCK', {ID:10, NAME:'ballA'}).execute().progress(function(rs, tx) { // ※1
* db.insert('STOCK', {ID:11, NAME:'ballB'}, tx).execute(); // ※2
* });
* </pre>
*
* ※1のprogress()で返ってきたトランザクション(tx)を、※2のinsert()の第三引数に指定することで、2つのdb.insert()は同一トランザクションで実行されます。 *
* <p>
* <h5>ver1.1.8からの変更点</h5>
* execute()が返すPromiseオブジェクトのprogressコールバックの第二引数(<b>TransactionalExecutor</b>インスタンス)に、
* Select/Insert/Del/Update/Sqlインスタンスをaddすることができるようになりました。
* <p>
* 下記のサンプルコードは、tx.add()で追加したStatementインスタンスを、一番最初に実行したdb.insert()と同一トランザクションでSQLを実行します。
*
* <pre>
* db.insert('PRODUCT', {ID:11, NAME:'ballA'}).execute().progress(function(rs, tx) {
* tx.add(db.insert('PRODUCT', {ID:12, NAME:'ballB'})).execute().done(function() {
* alert('success');
* });
* });
* </pre>
*
* @function
* @memberOf Insert
* @returns {Promise} Promiseオブジェクト
*/
Insert.prototype.execute = function() {
//
};
/**
* このオブジェクトに設定された情報からSQLステートメントとパラメータを生成し、SQLを実行します
* <p>
* 実行結果は、Promiseオブジェクトのprogress()に指定したコールバック関数または、done()に指定したコールバック関数に、<b>更新されたレコードの件数</b>が返されます。
*
* <pre>
* db.update('USER', {NAME:TANAKA}).where({ID:10}).execute().done(function(rowsAffected) {
* rowsAffected // 更新されたレコードの行数(Number型)
* });
* </pre>
*
* また、progress()に指定したコールバック関数の第二引数には、トランザクションオブジェクトが格納され、このオブジェクトを使用することで、トランザクションを引き継ぐことができます。
*
* <pre>
* db.select('PRODUCT', ['ID']).where({NAME: 'ball'}).execute().progress(function(rs, tx) {
* db.update('STOCK', {PRICE: 2000}, tx).where({ID: rs.item(0).ID}).execute();
* });
* </pre>
*
* db.select().execute()で返ってきたトランザクションを、db.update()の第三引数に指定することで、db.select()とdb.update()は同一トランザクションで実行されます。
* <p>
* <h5>ver1.1.8からの変更点</h5>
* execute()が返すPromiseオブジェクトのprogressコールバックの第二引数(<b>TransactionalExecutor</b>インスタンス)に、
* Select/Insert/Del/Update/Sqlインスタンスをaddすることができるようになりました。
* <p>
* 下記のサンプルコードは、tx.add()で追加したStatementインスタンスを、一番最初に実行したdb.select()と同一トランザクションでSQLを実行します。
*
* <pre>
* db.select('PRODUCT', ['ID']).where({NAME: 'ballA'}).execute().progress(function(rs, tx) {
* tx.add(db.update('STOCK', {COUNT: 10}).where({ID: rs.item(0).ID})).execute().done(function() {
* alert('success');
* });
* });
* </pre>
*
* @function
* @memberOf Update
* @returns {Promise} Promiseオブジェクト
*/
Update.prototype.execute = function() {
//
};
/**
* このオブジェクトに設定された情報からSQLステートメントとパラメータを生成し、SQLを実行します
* <p>
* 実行結果は、Promiseオブジェクトのprogress()に指定したコールバック関数または、done()に指定したコールバック関数に、<b>削除されたレコードの件数</b>が返されます。
*
* <pre>
* db.del('USER').where({ID:10}).execute().done(function(rowsAffected) {
* rowsAffected // 削除されたレコードの行数(Number型)
* });
* </pre>
*
* また、progress()に指定したコールバック関数の第二引数には、トランザクションオブジェクトが格納され、このオブジェクトを使用することで、トランザクションを引き継ぐことができます。
*
* <pre>
* db.select('PRODUCT', ['ID']).where({NAME: 'ball'}).execute().progress(function(rs, tx) {
* db.del('STOCK', tx).where({ID: rs.item(0).ID}).execute();
* });
* </pre>
*
* db.select().execute()で返ってきたトランザクションを、db.del()の第二引数に指定することで、db.select()とdb.del()は同一トランザクションで実行されます。 *
* <p>
* <h5>ver1.1.8からの変更点</h5>
* execute()が返すPromiseオブジェクトのprogressコールバックの第二引数(<b>TransactionalExecutor</b>インスタンス)に、
* Select/Insert/Del/Update/Sqlインスタンスをaddすることができるようになりました。
* <p>
* 下記のサンプルコードは、tx.add()で追加したStatementインスタンスを、一番最初に実行したdb.del()と同一トランザクションでSQLを実行します。
*
* <pre>
* db.del('USER').where({ID:1}).execute().progress(function(rs, tx) {
* tx.add(db.del('ROLE').where({ID:1})).execute().done(function() {
* alert('success');
* });
* });
* </pre>
*
* @function
* @memberOf Del
* @returns {Promise} Promiseオブジェクト
*/
Del.prototype.execute = function() {
//
};
/**
* このオブジェクトに設定された情報からSQLステートメントとパラメータを生成し、SQLを実行します
* <p>
* 実行結果は、戻り値であるPromiseオブジェクトのprogress()に指定したコールバック関数または、done()に指定したコールバック関数に、<b>実行結果を保持するオブジェクト</b>が返されます。
* <p>
* 実行結果オブジェクトは、以下のプロパティを持っています。<br>
* <table border="1">
* <tr>
* <td>プロパティ名</td>
* <td>説明</td>
* </tr>
* <tr>
* <td>rows</td>
* <td>検索(SELECT)を実行した場合、このプロパティに結果が格納されます。</td>
* </tr>
* <tr>
* <td>insertId</td>
* <td>登録(INSERT)を実行した場合、このプロパティに登録したレコードのIDが格納されます。</td>
* </tr>
* <tr>
* <td>rowsAffected</td>
* <td>削除(DELETE)や更新(UPDATE)した場合、このプロパティに変更のあったレコードの件数が格納されます。</td>
* </tr>
* </table>
* <p>
* 例.検索結果の取得
*
* <pre>
* db.sql('SELECT * FROM USER').execute().done(function(rs) {
* rs.rows // SQLResultSetRowList
* rs.insertId // Number
* rs.rowsAffected // Number
* });
* </pre>
*
* <p>
* <b>SQLResultSetRowList</b>は、以下のプロパティを持っています。<br>
* <table border="1">
* <tr>
* <td>プロパティ名</td>
* <td>説明</td>
* </tr>
* <tr>
* <td>length</td>
* <td>検索にマッチしたレコードの件数</td>
* </tr>
* <tr>
* <td>rows</td>
* <td>検索結果</td>
* </tr>
* </table>
* <p>
* 例.検索結果の取得する
*
* <pre>
* db.sql('SELECT ID, NAME FROM USER').execute().done(function(rs) {
* rs.rows.item(0).ID // 検索にマッチした1件目のレコードのID
* rs.rows.item(0).NAME // 検索にマッチした1件目のレコードのNAME
* });
* </pre>
*
* また、progress()に指定したコールバック関数の第二引数には、トランザクションオブジェクトが格納され、このオブジェクトを使用することで、トランザクションを引き継ぐことができます。
* <p>
* 例.同一トランザクションでdb.insert()とdb.sql()を実行する
*
* <pre>
* db.select('PRODUCT', ['ID']).where({NAME: 'ball'}).execute().progress(function(rs, tx) {
* db.sql('UPDATE STOCK SET PRICE = 2000', tx).where({ID: rs.item(0).ID}).execute();
* });
* </pre>
*
* db.select().execute()で返ってきたトランザクションを、db.sql()の第三引数に指定することで、db.select()とdb.sql()は同一トランザクションで実行されます。 *
* <p>
* <h5>ver1.1.8からの変更点</h5>
* execute()が返すPromiseオブジェクトのprogressコールバックの第二引数(<b>TransactionalExecutor</b>インスタンス)に、
* Select/Insert/Del/Update/Sqlインスタンスをaddすることができるようになりました。
* <p>
* 下記のサンプルコードは、tx.add()で追加したStatementインスタンスを、一番最初に実行したdb.select()と同一トランザクションでSQLを実行します。
*
* <pre>
* db.select('PRODUCT', ['ID']).where({NAME:'ballA'}).execute().progress(function(rs, tx) {
* tx.add(db.sql('SELECT COUNT FROM STOCK WHERE ID = '+ rs.item(0).ID')).execute().done(function(rs2) {
* alert(rs2.rows.item(0).COUNT);
* });
* });
* </pre>
*
* @function
* @memberOf Sql
* @returns {Promise} Promiseオブジェクト
*/
Sql.prototype.execute = function() {
//
};