@@ -31,17 +31,44 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
31
restclient . sqlite = {
32
32
db : null ,
33
33
tables : {
34
- requests : "id TEXT PRIMARY KEY, name TEXT, favorite INT default 0, request_method TEXT, request_url TEXT, request_body TEXT, request TEXT,created_datetime TEXT,last_executed TEXT"
34
+ requests : " uuid TEXT NOT NULL PRIMARY KEY, \
35
+ requestName TEXT NOT NULL, \
36
+ requestUrl TEXT NOT NULL, \
37
+ requestMethod TEXT NOT NULL, \
38
+ request TEXT NOT NULL, \
39
+ creationTime INTEGER NOT NULL, \
40
+ lastAccess INTEGER NOT NULL" ,
41
+ labels : " labelName TEXT NOT NULL, \
42
+ uuid TEXT NOT NULL" ,
43
+ history : "requestId TEXT PRIMARY KEY, \
44
+ request TEXT NOT NULL, \
45
+ lastAccess INTEGER NOT NULL"
46
+ } ,
47
+ sql : {
48
+ queryHistory : 'SELECT request FROM history WHERE requestId = :requestId' ,
49
+ updateHistory : 'UPDATE history SET lastAccess = :lastAccess WHERE requestId = :requestId' ,
50
+ newHistory : 'INSERT INTO history (requestId, request, lastAccess) VALUES (:requestId, :request, :lastAccess)' ,
51
+ removeHistory : 'DELETE FROM history WHERE lastAccess < :lastAccess' ,
52
+
53
+ queryLabels : 'SELECT count(labelName),labelName FROM labels GROUP BY labelName' ,
54
+ newLabels : 'INSERT INTO labels (labelName, uuid) VALUES (:labelName, :uuid)' ,
55
+ removeLabels : 'DELETE FROM labels WHERE uuid = :uuid' ,
56
+
57
+ queryRequests : 'SELECT * FROM requests WHERE uuid = :uuid' ,
58
+ queryRequestsByLabel : 'SELECT * FROM requests WHERE uuid IN (SELECT uuid FROM labels WHERE labelName = :labelName)' ,
59
+ newRequests : 'INSERT INTO requests (uuid, requestName, requestUrl, requestMethod, request, creationTime, LastAccess) VALUES (:uuid, :requestName, :requestUrl, :requestMethod, :request, :creationTime, :LastAccess)' ,
60
+ removeRequests : 'DELETE FROM requests WHERE uuid = :uuid'
35
61
} ,
36
62
open : function ( ) {
37
63
try {
38
64
var file = restclient . FileUtils . getFile ( "ProfD" , [ "restclient.sqlite" ] ) ;
39
- //console .log(file.path);
65
+ restclient . log ( file . path ) ;
40
66
restclient . sqlite . db = restclient . Services . storage . openDatabase ( file ) ;
67
+ restclient . sqlite . initStatements ( ) ;
41
68
return true ;
42
69
}
43
70
catch ( e ) {
44
- console . error ( e ) ;
71
+ restclient . error ( e ) ;
45
72
}
46
73
return false ;
47
74
} ,
@@ -50,22 +77,104 @@ restclient.sqlite = {
50
77
restclient . db . asyncClose ( ) ;
51
78
}
52
79
catch ( e ) {
53
- console . error ( e ) ;
80
+ restclient . error ( e ) ;
54
81
}
55
82
} ,
56
- initTables : function ( force ) {
57
- if ( restclient . sqlite . db . tableExists ( 'requests' ) )
58
- {
59
- if ( force )
60
- {
61
- restclient . sqlite . db . executeSimpleSQL ( 'DELETE FROM requests WHERE favorite = 0' ) ;
62
- }
63
- }
64
- else
83
+ initTables : function ( ) {
84
+ try {
65
85
restclient . sqlite . db . createTable ( 'requests' , restclient . sqlite . tables [ 'requests' ] ) ;
86
+ restclient . sqlite . db . createTable ( 'labels' , restclient . sqlite . tables [ 'labels' ] ) ;
87
+ restclient . sqlite . db . createTable ( 'history' , restclient . sqlite . tables [ 'history' ] ) ;
88
+ }
89
+ catch ( e ) {
90
+ restclient . error ( e ) ;
91
+ }
92
+ } ,
93
+ getStatement : function ( sqlName ) {
94
+ return restclient . sqlite . db . createStatement ( restclient . sqlite . sql [ sqlName ] ) ;
66
95
} ,
67
- saveRequest : function ( request , name , favorite , labels , callback ) {
68
- var id = "request-" + restclient . helper . sha1 ( JSON . stringify ( request ) ) ;
96
+ getHistory : function ( requestId ) {
97
+ if ( typeof requestId !== 'string' || requestId === '' )
98
+ return false ;
99
+ var stmt = restclient . sqlite . getStatement ( 'queryHistory' ) ;
100
+ var params = stmt . newBindingParamsArray ( ) ,
101
+ binding = params . newBindingParams ( ) ;
102
+
103
+ binding . bindByName ( "requestId" , requestId ) ;
104
+ params . addParams ( binding ) ;
105
+ stmt . bindParameters ( params ) ;
106
+
107
+ while ( stmt . executeStep ( ) ) {
108
+ return stmt . row . request ;
109
+ }
110
+ return false ;
111
+ } ,
112
+ saveHistory : function ( request , success , handleError ) {
113
+ var requestStr = JSON . stringify ( request ) ;
114
+ var requestId = "r-" + restclient . helper . sha1 ( requestStr ) ;
115
+ var lastAccess = new Date ( ) . valueOf ( ) ;
116
+ var exists = restclient . sqlite . getHistory ( requestId ) ;
117
+
118
+ var sqlName = ( exists === false ) ? "newHistory" : "updateHistory" ;
119
+ var stmt = restclient . sqlite . getStatement ( sqlName ) ;
120
+ try {
121
+ var params = stmt . newBindingParamsArray ( ) ,
122
+ binding = params . newBindingParams ( ) ;
123
+
124
+ binding . bindByName ( "requestId" , requestId ) ;
125
+ if ( exists === false )
126
+ binding . bindByName ( "request" , requestStr ) ;
127
+ binding . bindByName ( "lastAccess" , lastAccess ) ;
128
+ params . addParams ( binding ) ;
129
+ stmt . bindParameters ( params ) ;
130
+ stmt . executeAsync ( {
131
+ handleError : function ( aError ) {
132
+ restclient . error ( aError ) ;
133
+ if ( typeof handleError === 'function' )
134
+ handleError . apply ( restclient . main , [ request ] ) ;
135
+ } ,
136
+ handleCompletion : function ( aReason ) {
137
+ if ( aReason == Components . interfaces . mozIStorageStatementCallback . REASON_FINISHED
138
+ && typeof success === 'function' )
139
+ success . apply ( restclient . main , [ requestId ] ) ;
140
+ }
141
+ } ) ;
142
+ } finally {
143
+ stmt . reset ( ) ;
144
+ }
145
+ } ,
146
+ removeHistory : function ( days , success , handleError ) {
147
+ var lastAccess = new Date ( ) ;
148
+ lastAccess . setDate ( date . getDate ( ) - days ) ;
149
+ lastAccess = lastAccess . valueOf ( ) ;
150
+ var stmt = restclient . sqlite . getStatement ( 'removeHistory' ) ;
151
+ try {
152
+ var params = stmt . newBindingParamsArray ( ) ,
153
+ binding = params . newBindingParams ( ) ;
154
+
155
+ binding . bindByName ( "lastAccess" , lastAccess ) ;
156
+
157
+ params . addParams ( binding ) ;
158
+ stmt . bindParameters ( params ) ;
159
+ stmt . executeAsync ( {
160
+ handleError : function ( aError ) {
161
+ restclient . error ( aError ) ;
162
+ if ( typeof handleError === 'function' )
163
+ handleError . apply ( restclient . main , [ request ] ) ;
164
+ } ,
165
+ handleCompletion : function ( aReason ) {
166
+ if ( aReason == Components . interfaces . mozIStorageStatementCallback . REASON_FINISHED
167
+ && typeof success === 'function' )
168
+ success . apply ( restclient . main , [ requestId ] ) ;
169
+ }
170
+ } ) ;
171
+ } finally {
172
+ stmt . reset ( ) ;
173
+ }
174
+ } ,
175
+ saveRequest : function ( request , name , labels , success , handleError ) {
176
+ return false ;
177
+ var id = "r-" + restclient . helper . sha1 ( JSON . stringify ( request ) ) ;
69
178
var savedRequest = restclient . sqlite . getRequest ( id ) ;
70
179
var last_executed = new Date ( ) . valueOf ( ) ;
71
180
name = name || '' ;
@@ -127,6 +236,7 @@ restclient.sqlite = {
127
236
} ) ;
128
237
}
129
238
} ,
239
+
130
240
getRequest : function ( id ) {
131
241
if ( typeof id !== 'string' || id === '' )
132
242
return false ;
@@ -142,8 +252,8 @@ restclient.sqlite = {
142
252
}
143
253
return false ;
144
254
} ,
145
- getRequestCount : function ( ) {
146
- var stmt = restclient . sqlite . db . createStatement ( "SELECT count(id ) as num FROM requests" ) ;
255
+ getLabels : function ( ) {
256
+ var stmt = restclient . sqlite . db . createStatement ( "SELECT sum(label ) as num FROM requests" ) ;
147
257
while ( stmt . executeStep ( ) ) {
148
258
return stmt . row . num ;
149
259
}
@@ -165,7 +275,7 @@ restclient.sqlite = {
165
275
dump ( 'savedRequest:' + requests ) ;
166
276
if ( requests === '' )
167
277
return false ;
168
-
278
+
169
279
restclient . sqlite . open ( ) ;
170
280
restclient . sqlite . initTables ( ) ;
171
281
restclient . sqlite . importRequestFromJSON ( JSON . parse ( requests ) ) ;
0 commit comments