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;
}
});