|
118 | 118 | Call this once during server startup, before using STORE for session operations." |
119 | 119 | (check-type store sqlite-store) |
120 | 120 | (with-store-lock (store) |
121 | | - (let ((table-name (store-table-name store))) |
| 121 | + (let ((table-name (sqlite-store-table-name store))) |
122 | 122 | (sqlite:execute-non-query |
123 | 123 | (sqlite-store-connection store) |
124 | 124 | (create-table-statement table-name)) |
|
136 | 136 | (defun %find-session (store session-id) |
137 | 137 | (car (sqlite:execute-to-list |
138 | 138 | (sqlite-store-connection store) |
139 | | - (find-session-by-id-statement (store-table-name store)) |
| 139 | + (find-session-by-id-statement (sqlite-store-table-name store)) |
140 | 140 | session-id))) |
141 | 141 |
|
142 | 142 | (defun %session-object-from-row (store row) |
143 | | - (make-session-object (row-column row 0) |
144 | | - (funcall (sqlite-store-data-deserializer store) (row-column row 1)) |
145 | | - (row-column row 2) |
146 | | - (row-column row 3) |
147 | | - (row-column row 4))) |
| 143 | + (%make-session-object (%row-column row 0) |
| 144 | + (funcall (sqlite-store-data-deserializer store) |
| 145 | + (%row-column row 1)) |
| 146 | + (%row-column row 2) |
| 147 | + (%row-column row 3) |
| 148 | + (%row-column row 4))) |
148 | 149 |
|
149 | 150 | (defun %recover-session (store session-id) |
150 | 151 | (let ((row (%find-session store session-id))) |
|
159 | 160 | (sqlite-store-max-age-seconds store))))) |
160 | 161 | (let ((row (car (sqlite:execute-to-list |
161 | 162 | (sqlite-store-connection store) |
162 | | - (insert-session-statement (store-table-name store)) |
| 163 | + (insert-session-statement (sqlite-store-table-name store)) |
163 | 164 | session-id |
164 | 165 | (funcall (sqlite-store-data-serializer store) data) |
165 | 166 | created-at |
|
169 | 170 |
|
170 | 171 | (defmethod io.github.cl-sdk.wst.session:recover-session ((store sqlite-store) session-id &key &allow-other-keys) |
171 | 172 | (with-store-lock (store) |
172 | | - (cleanup-expired-sessions store) |
| 173 | + (io.github.cl-sdk.wst.session:cleanup-expired-sessions store :before-date (now)) |
173 | 174 | (%recover-session store session-id))) |
174 | 175 |
|
175 | 176 | (defmethod io.github.cl-sdk.wst.session:update-session ((store sqlite-store) session &key &allow-other-keys) |
176 | 177 | (with-store-lock (store) |
177 | | - (cleanup-expired-sessions store) |
| 178 | + (io.github.cl-sdk.wst.session:cleanup-expired-sessions store :before-date (now)) |
178 | 179 | (let* ((id (getf session :id)) |
179 | 180 | (data (getf session :data)) |
180 | 181 | (updated-at (now)) |
|
184 | 185 | (error "Session object must include :id when updating.")) |
185 | 186 | (let ((row (car (sqlite:execute-to-list |
186 | 187 | (sqlite-store-connection store) |
187 | | - (update-session-statement (store-table-name store)) |
| 188 | + (update-session-statement (sqlite-store-table-name store)) |
188 | 189 | (funcall (sqlite-store-data-serializer store) data) |
189 | 190 | updated-at |
190 | 191 | expires-at |
191 | 192 | id)))) |
192 | 193 | (%session-object-from-row store row))))) |
193 | | - |
| 194 | +o |
194 | 195 | (defmethod io.github.cl-sdk.wst.session:session-exists-p ((store sqlite-store) session-id &key &allow-other-keys) |
195 | 196 | (with-store-lock (store) |
196 | | - (cleanup-expired-sessions store) |
| 197 | + (io.github.cl-sdk.wst.session:cleanup-expired-sessions store :before-date (now)) |
197 | 198 | (not (null (%find-session store session-id))))) |
198 | 199 |
|
199 | 200 | (defmethod io.github.cl-sdk.wst.session:renew-session ((store sqlite-store) session-id &optional additional-time &key &allow-other-keys) |
200 | 201 | (with-store-lock (store) |
201 | | - (cleanup-expired-sessions store) |
| 202 | + (io.github.cl-sdk.wst.session:cleanup-expired-sessions store :before-date (now)) |
202 | 203 | (let* ((row (%find-session store session-id))) |
203 | 204 | (when row |
204 | 205 | (let* ((new-expires-at (+ (now) |
205 | 206 | (or additional-time |
206 | 207 | (sqlite-store-max-age-seconds store)))) |
207 | 208 | (updated-row (car (sqlite:execute-to-list |
208 | 209 | (sqlite-store-connection store) |
209 | | - (renew-session-statement (store-table-name store)) |
| 210 | + (renew-session-statement (sqlite-store-table-name store)) |
210 | 211 | new-expires-at |
211 | 212 | (now) |
212 | 213 | session-id)))) |
|
217 | 218 | (with-store-lock (store) |
218 | 219 | (sqlite:execute-non-query |
219 | 220 | (sqlite-store-connection store) |
220 | | - (delete-session-statement (store-table-name store)) |
| 221 | + (delete-session-statement (sqlite-store-table-name store)) |
221 | 222 | session-id))) |
222 | 223 |
|
223 | | -(defmethod io.github.cl-sdk.wst.session:cleanup-expired-sessions ((store sqlite-store) &key date) |
| 224 | +(defmethod io.github.cl-sdk.wst.session:cleanup-expired-sessions ((store sqlite-store) &key before-date) |
224 | 225 | (with-slots (table-name connection) |
225 | 226 | store |
226 | 227 | (sqlite:execute-non-query connection |
227 | 228 | (delete-expired-session-statement table-name) |
228 | | - date))) |
| 229 | + before-date))) |
0 commit comments