Ext.sql.AirConnection = Ext.extend(Ext.sql.Connection, {
       
// abstract methods
    open
: function(db){
       
this.conn = new air.SQLConnection();
               
var file = air.File.applicationDirectory.resolvePath(db);
               
this.conn.open(file);
       
this.openState = true;
               
this.fireEvent('open', this);
   
},

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

        createStatement
: function(type){
               
var stmt = new air.SQLStatement();
                stmt
.sqlConnection = this.conn;
               
return stmt;
       
},

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

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

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

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

    addParams
: function(stmt, args){
               
if(!args){ return; }
               
for(var key in args){
                       
if(args.hasOwnProperty(key)){
                               
if(!isNaN(key)){
                                       
var v = args[key];
                                       
if(Ext.isDate(v)){
                                                v
= v.format(Ext.sql.Proxy.DATE_FORMAT);
                                       
}
                                        stmt
.parameters[parseInt(key)] = v;
                               
}else{
                                        stmt
.parameters[':' + key] = args[key];
                               
}
                       
}
               
}
               
return stmt;
       
},

    readResults
: function(rs){
       
var r = [];
       
if(rs && rs.data){
                   
var len = rs.data.length;
               
for(var i = 0; i < len; i++) {
                    r
[r.length] = rs.data[i];
               
}
       
}
       
return r;
   
}
});