1
1
import WebUtils from './WebUtils' ;
2
+ import WebSQL from './WebSQL' ;
3
+ import WebForage from './WebForage'
2
4
3
5
let dataBase = null ;
4
6
export default class Database {
5
- static initTables ( ) {
6
- if ( window . Settings . enableLog )
7
- WebUtils . log ( "Database.initTables()" ) ;
8
- let stmt = "CREATE TABLE IF NOT EXISTS PROJECTS (ID INTEGER PRIMARY KEY AUTOINCREMENT, CTIME DATETIME DEFAULT CURRENT_TIMESTAMP, MTIME DATETIME, ALTMD5 TEXT, POS INTEGER, NAME TEXT, JSON TEXT, THUMBNAIL TEXT, OWNER TEXT, GALLERY TEXT, DELETED TEXT, VERSION TEXT, ISGIFT INTEGER DEFAULT 0)" ;
9
- this . _exec ( stmt ) ;
10
- stmt = "CREATE TABLE IF NOT EXISTS USERSHAPES (ID INTEGER PRIMARY KEY AUTOINCREMENT, CTIME DATETIME DEFAULT CURRENT_TIMESTAMP, MD5 TEXT, ALTMD5 TEXT, WIDTH TEXT, HEIGHT TEXT, EXT TEXT, NAME TEXT, OWNER TEXT, SCALE TEXT, VERSION TEXT)" ;
11
- this . _exec ( stmt ) ;
12
- stmt = "CREATE TABLE IF NOT EXISTS USERBKGS (ID INTEGER PRIMARY KEY AUTOINCREMENT, CTIME DATETIME DEFAULT CURRENT_TIMESTAMP, MD5 TEXT, ALTMD5 TEXT, WIDTH TEXT, HEIGHT TEXT, EXT TEXT, OWNER TEXT, VERSION TEXT)" ;
13
- this . _exec ( stmt ) ;
14
- stmt = "CREATE TABLE IF NOT EXISTS USERFILES (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, CONTEXT TEXT)" ;
15
- this . _exec ( stmt ) ;
16
- }
17
-
18
7
//re 0:表示成功 其他表示:Error
19
8
static _fcnF ( fcn , re , data = null ) {
20
9
WebUtils . _fcnF ( fcn , re , data ) ;
21
10
}
22
11
23
- static open ( body ) {
12
+ static open ( userName ) {
24
13
if ( dataBase != null )
25
14
return ;
26
15
if ( window . Settings . enableLog )
27
- WebUtils . log ( "Database.open({0})" . format ( body ) ) ;
28
- dataBase = openDatabase ( body , "1.0" , "ScratchJr web database" , 1024 * 1024 , function ( ) { } ) ;
29
- this . initTables ( ) ;
16
+ WebUtils . log ( "Database.open({0})" . format ( userName ) ) ;
17
+ dataBase = new WebForage ( userName ) ;
30
18
return "0" ;
31
19
}
32
20
33
21
static close ( str ) {
34
22
if ( window . Settings . enableLog )
35
23
WebUtils . log ( "Database.close({0})" . format ( str ) ) ;
24
+ if ( dataBase != null )
25
+ dataBase . close ( str ) ;
36
26
return "0" ;
37
27
}
38
28
39
29
static _exec ( body , fcn ) {
40
30
//if (window.Settings.enableLog)
41
31
// WebUtils.log("Database._exec({0})".format(body));
42
- dataBase . transaction ( function ( tx ) {
43
- tx . executeSql ( body , [ ] ,
44
- function ( tx , results ) {
45
- //if (window.Settings.enableLog)
46
- // WebUtils.log("Database._exec({0} - success.)".format(body));
47
- Database . _fcnF ( fcn , true ) ;
48
- } ,
49
- function ( tx , error ) {
50
- //if (window.Settings.enableLog)
51
- // WebUtils.log("Database._exec({0} - Error:{1})".format(body, error.message));
52
- Database . _fcnF ( fcn , false ) ;
53
- }
54
- ) ;
55
- } ) ;
32
+ dataBase . _exec ( body , fcn ) ;
56
33
return "success" ;
57
34
}
58
35
59
- //executeSql函数有四个参数,其意义分别是:
60
- // 1)表示查询的字符串,使用的SQL语言是SQLite 3.6.19。(必选)
61
- // 2)插入到查询中问号所在处的字符串数据。(可选)
62
- // 3)成功时执行的回调函数。返回两个参数:tx和执行的结果。(可选)
63
- // 4)一个失败时执行的回调函数。返回两个参数:tx和失败的错误信息。(可选)
64
36
static stmt ( body , fcn ) {
65
37
if ( window . Settings . enableLog )
66
38
WebUtils . log ( "Database.stmt({0})" . format ( body ) ) ;
67
- let jsonData = JSON . parse ( body ) ;
68
- //"update db set fieldname = ?,mtime = ? where id = id"
69
- let stmtstr = jsonData [ "stmt" ] ;
70
- let values = jsonData [ "values" ] ;
71
-
72
- dataBase . transaction ( function ( tx ) {
73
- tx . executeSql ( stmtstr , values ,
74
- function ( tx , results ) {
75
- if ( window . Settings . enableLog )
76
- WebUtils . log ( "Database.stmt({0} - success.)" . format ( body ) ) ;
77
- try {
78
- Database . _fcnF ( fcn , results . insertId ) ;
79
- } catch ( error ) {
80
- Database . _fcnF ( fcn , true ) ;
81
- }
82
- } ,
83
- function ( tx , error ) {
84
- if ( window . Settings . enableLog )
85
- WebUtils . log ( "Database.stmt({0} - Error:{1})" . format ( body , error . message ) ) ;
86
- Database . _fcnF ( fcn , null ) ;
87
- }
88
- ) ;
89
- } ) ;
39
+ dataBase . stmt ( body , fcn )
90
40
}
91
41
92
42
static _stmtBool ( body , fcn ) {
93
43
if ( window . Settings . enableLog )
94
44
WebUtils . log ( "Database._stmtBool({0})" . format ( body ) ) ;
95
- let jsonData = JSON . parse ( body ) ;
96
- //"update db set fieldname = ?,mtime = ? where id = id"
97
- let stmtstr = jsonData [ "stmt" ] ;
98
- let values = jsonData [ "values" ] ;
99
-
100
- dataBase . transaction ( function ( tx ) {
101
- tx . executeSql ( stmtstr , values ,
102
- function ( tx , results ) {
103
- if ( window . Settings . enableLog )
104
- WebUtils . log ( "Database._stmtBool({0} - success.)" . format ( body ) ) ;
105
- Database . _fcnF ( fcn , true ) ;
106
- } ,
107
- function ( tx , error ) {
108
- if ( window . Settings . enableLog )
109
- WebUtils . log ( "Database._stmtBool({0} - Error:{1})" . format ( body , error . message ) ) ;
110
- Database . _fcnF ( fcn , false ) ;
111
- }
112
- ) ;
113
- } ) ;
45
+ dataBase . _stmtBool ( body , fcn ) ;
114
46
}
115
47
116
48
//{"stmt":"select name,thumbnail,id,isgift from projects where deleted = ? AND version = ? AND gallery IS NULL order by ctime desc",
@@ -135,30 +67,7 @@ export default class Database {
135
67
static _queryData ( body , fcn ) {
136
68
if ( window . Settings . enableLog )
137
69
WebUtils . log ( "Database.queryData({0})" . format ( body ) ) ;
138
- let jsonData = JSON . parse ( body ) ;
139
- let stmtstr = jsonData [ "stmt" ] ;
140
- let values = jsonData [ "values" ] ;
141
- dataBase . transaction ( function ( tx ) {
142
- tx . executeSql ( stmtstr , values ,
143
- function ( tx , results ) {
144
- if ( window . Settings . enableLog )
145
- WebUtils . log ( "Database.queryData({0} - success.)" . format ( body ) ) ;
146
- let resArray = [ ] ;
147
- let len = results . rows . length ;
148
- for ( let i = 0 ; i < len ; i ++ ) {
149
- let rowData = results . rows . item ( i ) ;
150
- if ( window . Settings . enableLog )
151
- WebUtils . log ( "Database.queryData() - results:{0})" . format ( JSON . stringify ( rowData ) ) ) ;
152
- resArray . push ( rowData ) ;
153
- }
154
- Database . _fcnF ( fcn , resArray ) ;
155
- } ,
156
- function ( tx , error ) {
157
- if ( window . Settings . enableLog )
158
- WebUtils . log ( "Database.queryData({0} - Error:{1})" . format ( body , error . message ) ) ;
159
- Database . _fcnF ( fcn , null ) ;
160
- } ) ;
161
- } ) ;
70
+ dataBase . _queryData ( body , fcn ) ;
162
71
}
163
72
164
73
static _findDataIn ( stmtstr , values , fcn ) {
@@ -169,38 +78,10 @@ export default class Database {
169
78
}
170
79
171
80
//--------------test--------------------------
172
- static _setfield ( db , id , fieldname , val , fcn ) {
173
- var json = { } ;
174
- var keylist = [ fieldname + ' = ?' , ] ;
175
- json . values = [ val ] ;
176
- json . stmt = 'update ' + db + ' set ' + keylist . toString ( ) + ' where id = ' + id ;
177
- return Database . _stmtBool ( JSON . stringify ( json ) , fcn ) ;
178
- }
179
-
180
81
static test ( ) {
181
82
if ( window . Settings . enableLog )
182
83
WebUtils . log ( "Database.test()" ) ;
183
- dataBase . transaction ( function ( tx ) {
184
- tx . executeSql ( 'CREATE TABLE IF NOT EXISTS LOGS (id unique, log)' ) ;
185
- tx . executeSql ( 'INSERT INTO LOGS (id, log) VALUES (1, "foobar")' ) ;
186
- tx . executeSql ( 'INSERT INTO LOGS (id, log) VALUES (2, "logmsg")' ) ;
187
- } ) ;
188
-
189
- Database . _setfield ( "LOGS" , 1 , "log" , "--foobar2--" ) ;
190
- // dataBase.transaction(function (tx) {
191
- // tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) {
192
- // let len = results.rows.length;
193
- // for (let i = 0; i < len; i++) {
194
- // let rowData = results.rows.item(i);
195
- // WebUtils.log("Database.test() - id:{0},log:{1}".format(rowData.id, rowData.log));
196
- // }
197
- // }, null);
198
- // });
199
-
200
- let queryJson = { } ;
201
- queryJson [ "stmt" ] = "select log from LOGS where id = ?" ;
202
- queryJson [ "values" ] = [ 1 ] ;
203
- Database . query ( JSON . stringify ( queryJson ) ) ;
84
+ dataBase . test ( ) ;
204
85
}
205
86
206
87
//----------File--------------
@@ -210,7 +91,7 @@ export default class Database {
210
91
211
92
static _getAllFiles ( fcn ) {
212
93
let queryJson = { } ;
213
- queryJson [ "stmt" ] = "SELECT NAME FROM USERFILES " ;
94
+ queryJson [ "stmt" ] = "select name from userfiles " ;
214
95
queryJson [ "values" ] = [ ] ;
215
96
Database . _queryData ( JSON . stringify ( queryJson ) , function ( listUserFiles ) {
216
97
let allFiles = [ ] ;
@@ -222,7 +103,7 @@ export default class Database {
222
103
let dictData = null ;
223
104
for ( let i = 0 ; i < listUserFiles . length ; i ++ ) {
224
105
dictData = listUserFiles [ i ] ;
225
- allFiles . push ( dictData . NAME ) ;
106
+ allFiles . push ( dictData . name ) ;
226
107
}
227
108
Database . _fcnF ( fcn , allFiles ) ;
228
109
} ) ;
@@ -257,9 +138,10 @@ export default class Database {
257
138
Database . _hasFile ( url , function ( bHas ) {
258
139
let queryJson = { } ;
259
140
if ( bHas )
260
- queryJson [ "stmt" ] = "UPDATE USERFILES SET CONTEXT = ? WHERE NAME = ?" ;
141
+ queryJson [ "stmt" ] = "update userfiles set context = ? where name = ?" ;
261
142
else
262
- queryJson [ "stmt" ] = "INSERT INTO USERFILES (CONTEXT,NAME) VALUES (?, ?)" ;
143
+ queryJson [ "stmt" ] = "insert into userfiles (context,name) values (?, ?)" ;
144
+
263
145
queryJson [ "values" ] = [ plaindata , url ] ;
264
146
Database . _stmtBool ( JSON . stringify ( queryJson ) , function ( ok ) {
265
147
let re = ( ! ok ) ? "-1" : url ;
@@ -278,7 +160,7 @@ export default class Database {
278
160
}
279
161
280
162
let queryJson = { } ;
281
- queryJson [ "stmt" ] = "SELECT CONTEXT FROM USERFILES WHERE NAME = ?" ;
163
+ queryJson [ "stmt" ] = "select context from userfiles where name = ?" ;
282
164
queryJson [ "values" ] = [ url ] ;
283
165
Database . _queryData ( JSON . stringify ( queryJson ) , function ( listData ) {
284
166
if ( listData == null ) {
@@ -289,7 +171,7 @@ export default class Database {
289
171
return ;
290
172
}
291
173
292
- let strContent = listData [ 0 ] . CONTEXT ;
174
+ let strContent = listData [ 0 ] . context ;
293
175
Database . _fcnF ( fcn , strContent ) ;
294
176
} ) ;
295
177
} ) ;
@@ -305,21 +187,21 @@ export default class Database {
305
187
let key = Database . getMD5 ( contents ) ;
306
188
let md5 = "{0}.{1}" . format ( key , ext ) ;
307
189
if ( window . Settings . enableLog )
308
- WebUtils . log ( "Database.setmedia({0}) - {1}" . format ( ext , md5 ) ) ;
190
+ WebUtils . log ( "Database.setmedia({0}) - {1}" . format ( ext , md5 ) ) ;
309
191
Database . _writeToURL ( md5 , contents , fcn ) ;
310
192
}
311
193
312
194
static getmedia ( filename , fcn ) {
313
195
if ( window . Settings . enableLog )
314
196
WebUtils . log ( "Database.getmedia({0})" . format ( filename ) ) ;
315
- let url = Database . _getDocumentPath ( filename ) ;
316
- Database . _initWithContentsOfURL ( url , function ( data ) {
317
- if ( data == null ) {
318
- Database . _fcnF ( fcn , null ) ;
319
- return ;
320
- }
321
- Database . _fcnF ( fcn , data ) ;
322
- } ) ;
197
+ let url = Database . _getDocumentPath ( filename ) ;
198
+ Database . _initWithContentsOfURL ( url , function ( data ) {
199
+ if ( data == null ) {
200
+ Database . _fcnF ( fcn , null ) ;
201
+ return ;
202
+ }
203
+ Database . _fcnF ( fcn , data ) ;
204
+ } ) ;
323
205
}
324
206
325
207
static getMD5 ( str ) {
@@ -338,7 +220,7 @@ export default class Database {
338
220
}
339
221
340
222
let queryJson = { } ;
341
- queryJson [ "stmt" ] = "DELETE FROM USERFILES WHERE NAME = ?" ;
223
+ queryJson [ "stmt" ] = "delete from userfiles where name = ?" ;
342
224
queryJson [ "values" ] = [ str ] ;
343
225
Database . _stmtBool ( JSON . stringify ( queryJson ) , function ( ok ) {
344
226
Database . _fcnF ( fcn , ok ) ;
@@ -350,7 +232,7 @@ export default class Database {
350
232
if ( window . Settings . enableLog )
351
233
WebUtils . log ( "Database.removeAllFiles()" ) ;
352
234
let queryJson = { } ;
353
- queryJson [ "stmt" ] = "DELETE FROM USERFILES " ;
235
+ queryJson [ "stmt" ] = "delete from userfiles " ;
354
236
queryJson [ "values" ] = [ ] ;
355
237
Database . _stmtBool ( JSON . stringify ( queryJson ) , function ( ok ) {
356
238
Database . _fcnF ( fcn , ok ) ;
0 commit comments