Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

/*
 * Ext JS Library 2.0.2
 * Copyright(c) 2006-2008, Ext JS, LLC.
 * licensing@extjs.com
 * 
 * http://extjs.com/license
 */

 Ext.data.AirDB = Ext.extend(Ext.data.SqlDB, {
        open : function(db, cb, scope){
                this.conn = new air.SQLConnection();

                var file = air.File.applicationResourceDirectory.resolve(db);

                this.conn.addEventListener(air.SQLEvent.OPEN, this.onOpen.createDelegate(this, [cb, scope]));
                this.conn.addEventListener(air.SQLEvent.CLOSE, this.onClose.createDelegate(this));
                this.conn.open(file, true);
        },

        close : function(){
                this.conn.close();
        },

        onOpen : function(cb, scope){
                this.openState = true;
                Ext.callback(cb, scope, [this]);
                this.fireEvent('open', this);
        },

        onClose : function(){
                this.fireEvent('close', this);
        },

        onError : function(e, stmt, type, cb, scope){
                Ext.callback(cb, scope, [false, e, stmt]);
        },

        onResult : function(e, stmt, type, cb, scope){
                if(type == 'exec'){
                        Ext.callback(cb, scope, [true, e, stmt]);
                }else{
                        var r = [];
                        var result = stmt.getResult();
                        if(result && result.data){
                        var len = result.data.length;
                        for(var i = 0; i < len; i++) {
                            r[r.length] = result.data[i];
                        }
                    }
                        Ext.callback(cb, scope, [r, e, stmt]);
                }
        },

        createStatement : function(type, cb, scope){

                var stmt = new air.SQLStatement();

                stmt.addEventListener(air.SQLErrorEvent.ERROR, this.onError.createDelegate(this, [stmt, type, cb, scope], true));
                stmt.addEventListener(air.SQLEvent.RESULT, this.onResult.createDelegate(this, [stmt, type, cb, scope], true));

                stmt.sqlConnection = this.conn;

                return stmt;
        },

        exec : function(sql, cb, scope){
                var stmt = this.createStatement('exec', cb, scope);
                stmt.text = sql;
                stmt.execute();
        },

        execBy : function(sql, args, cb, scope){
                var stmt = this.createStatement('exec', cb, scope);
                stmt.text = sql;
                this.addParams(stmt, args);
                stmt.execute();
        },

        query : function(sql, cb, scope){
                var stmt = this.createStatement('query', cb, scope);
                stmt.text = sql;
                stmt.execute(this.maxResults);
        },

        queryBy : function(sql, args, cb, scope){
                var stmt = this.createStatement('query', cb, scope);
                stmt.text = sql;
                this.addParams(stmt, args);
                stmt.execute(this.maxResults);
        },

    addParams : function(stmt, args){
                if(!args){ return; }
                for(var key in args){
                        if(args.hasOwnProperty(key)){
                                if(!isNaN(key)){
                                        stmt.parameters[parseInt(key)+1] = args[key];
                                }else{
                                        stmt.parameters[':' + key] = args[key];
                                }
                        }
                }
                return stmt;
        }
});