/**
 * @private
 */
Ext.define('Ext.device.storage.HTML5.Database', {
    requires: ["Ext.device.storage.HTML5.SQLStatement"],
    db: null,
 
    constructor: function(config) {
        this.db = window.openDatabase(config.name, config.version, config.displayName, config.size);
    },
 
    getVersion: function() {
        if (this.db) {
            return this.db.version;
        }
 
        //<debug>
        Ext.Logger.warn('Database has not been opened before calling function #getVersion');
        //</debug>
 
        return null;
    },
 
    /**
     * @param {String/String[]/Object/Object[]/SQLStatement/SQLStatement[]} sql SQL Command to run with optional arguments and callbacks
     * @param {Function} success callback for successful transaction
     * @param {Function} failure callback for failed transaction
     */
    transaction: function(sql, success, failure) {
        if (!this.db) {
            //<debug>
            Ext.Logger.warn('Database has not been opened before calling function #transaction');
 
            //</debug>
            return;
        }
 
        if (!Ext.isArray(sql)) {
            sql = [sql];
        }
 
        var txFn = function(tx) {
            Ext.each(sql, function(sqlStatement) {
                if (Ext.isString(sqlStatement)) {
                    tx.executeSql(sqlStatement);
                }
                else if (Ext.isObject(sqlStatement)) {
                    tx.executeSql(sqlStatement.sql, sqlStatement.arguments, sqlStatement.success, sqlStatement.failure);
                }
            });
        };
 
        this.db.transaction(txFn, failure, success);
    }
});