Upgrade to ExtJS 3.0.0 - Released 07/06/2009
[extjs.git] / examples / tasks / db / ext-air-db.js
1 /*!
2  * Ext JS Library 3.0.0
3  * Copyright(c) 2006-2009 Ext JS, LLC
4  * licensing@extjs.com
5  * http://www.extjs.com/license
6  */
7  Ext.data.AirDB = Ext.extend(Ext.data.SqlDB, {\r
8         open : function(db, cb, scope){\r
9                 this.conn = new air.SQLConnection();\r
10 \r
11                 var file = air.File.applicationResourceDirectory.resolve(db);\r
12 \r
13                 this.conn.addEventListener(air.SQLEvent.OPEN, this.onOpen.createDelegate(this, [cb, scope]));\r
14                 this.conn.addEventListener(air.SQLEvent.CLOSE, this.onClose.createDelegate(this));\r
15                 this.conn.open(file, true);\r
16         },\r
17 \r
18         close : function(){\r
19                 this.conn.close();\r
20         },\r
21 \r
22         onOpen : function(cb, scope){\r
23                 this.openState = true;\r
24                 Ext.callback(cb, scope, [this]);\r
25                 this.fireEvent('open', this);\r
26         },\r
27 \r
28         onClose : function(){\r
29                 this.fireEvent('close', this);\r
30         },\r
31 \r
32         onError : function(e, stmt, type, cb, scope){\r
33                 Ext.callback(cb, scope, [false, e, stmt]);\r
34         },\r
35 \r
36         onResult : function(e, stmt, type, cb, scope){\r
37                 if(type == 'exec'){\r
38                         Ext.callback(cb, scope, [true, e, stmt]);\r
39                 }else{\r
40                         var r = [];\r
41                         var result = stmt.getResult();\r
42                         if(result && result.data){\r
43                         var len = result.data.length;\r
44                         for(var i = 0; i < len; i++) {\r
45                             r[r.length] = result.data[i];\r
46                         }\r
47                     }\r
48                         Ext.callback(cb, scope, [r, e, stmt]);\r
49                 }\r
50         },\r
51 \r
52         createStatement : function(type, cb, scope){\r
53 \r
54                 var stmt = new air.SQLStatement();\r
55 \r
56                 stmt.addEventListener(air.SQLErrorEvent.ERROR, this.onError.createDelegate(this, [stmt, type, cb, scope], true));\r
57                 stmt.addEventListener(air.SQLEvent.RESULT, this.onResult.createDelegate(this, [stmt, type, cb, scope], true));\r
58 \r
59                 stmt.sqlConnection = this.conn;\r
60 \r
61                 return stmt;\r
62         },\r
63 \r
64         exec : function(sql, cb, scope){\r
65                 var stmt = this.createStatement('exec', cb, scope);\r
66                 stmt.text = sql;\r
67                 stmt.execute();\r
68         },\r
69 \r
70         execBy : function(sql, args, cb, scope){\r
71                 var stmt = this.createStatement('exec', cb, scope);\r
72                 stmt.text = sql;\r
73                 this.addParams(stmt, args);\r
74                 stmt.execute();\r
75         },\r
76 \r
77         query : function(sql, cb, scope){\r
78                 var stmt = this.createStatement('query', cb, scope);\r
79                 stmt.text = sql;\r
80                 stmt.execute(this.maxResults);\r
81         },\r
82 \r
83         queryBy : function(sql, args, cb, scope){\r
84                 var stmt = this.createStatement('query', cb, scope);\r
85                 stmt.text = sql;\r
86                 this.addParams(stmt, args);\r
87                 stmt.execute(this.maxResults);\r
88         },\r
89 \r
90     addParams : function(stmt, args){\r
91                 if(!args){ return; }\r
92                 for(var key in args){\r
93                         if(args.hasOwnProperty(key)){\r
94                                 if(!isNaN(key)){\r
95                                         stmt.parameters[parseInt(key)+1] = args[key];\r
96                                 }else{\r
97                                         stmt.parameters[':' + key] = args[key];\r
98                                 }\r
99                         }\r
100                 }\r
101                 return stmt;\r
102         }\r
103 });