]> git.proxmox.com Git - ceph.git/blame - ceph/src/rgw/store/dbstore/sqlite/sqliteDB.h
buildsys: change download over to reef release
[ceph.git] / ceph / src / rgw / store / dbstore / sqlite / sqliteDB.h
CommitLineData
20effc67
TL
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2// vim: ts=8 sw=2 smarttab
3
4#ifndef SQLITE_DB_H
5#define SQLITE_DB_H
6
7#include <errno.h>
8#include <stdlib.h>
9#include <string>
10#include <sqlite3.h>
11#include "rgw/store/dbstore/common/dbstore.h"
12
13using namespace std;
14using namespace rgw::store;
15
16class SQLiteDB : public DB, virtual public DBOp {
17 private:
18 sqlite3_mutex *mutex = NULL;
19
20 protected:
21 CephContext *cct;
22
23 public:
24 sqlite3_stmt *stmt = NULL;
25 DBOpPrepareParams PrepareParams;
26
27 SQLiteDB(sqlite3 *dbi, string db_name, CephContext *_cct) : DB(db_name, _cct), cct(_cct) {
28 db = (void*)dbi;
29 InitPrepareParams(get_def_dpp(), PrepareParams);
30 }
31 SQLiteDB(string db_name, CephContext *_cct) : DB(db_name, _cct), cct(_cct) {
32 InitPrepareParams(get_def_dpp(), PrepareParams);
33 }
34 ~SQLiteDB() {}
35
36 uint64_t get_blob_limit() override { return SQLITE_LIMIT_LENGTH; }
37 void *openDB(const DoutPrefixProvider *dpp) override;
38 int closeDB(const DoutPrefixProvider *dpp) override;
39 int InitializeDBOps(const DoutPrefixProvider *dpp) override;
40 int FreeDBOps(const DoutPrefixProvider *dpp) override;
41
42 int InitPrepareParams(const DoutPrefixProvider *dpp, DBOpPrepareParams &params) override { return 0; }
43
44 int exec(const DoutPrefixProvider *dpp, const char *schema,
45 int (*callback)(void*,int,char**,char**));
46 int Step(const DoutPrefixProvider *dpp, DBOpInfo &op, sqlite3_stmt *stmt,
47 int (*cbk)(const DoutPrefixProvider *dpp, DBOpInfo &op, sqlite3_stmt *stmt));
48 int Reset(const DoutPrefixProvider *dpp, sqlite3_stmt *stmt);
49 /* default value matches with sqliteDB style */
50
51 int createTables(const DoutPrefixProvider *dpp);
52 int createBucketTable(const DoutPrefixProvider *dpp, DBOpParams *params);
53 int createUserTable(const DoutPrefixProvider *dpp, DBOpParams *params);
54 int createObjectTable(const DoutPrefixProvider *dpp, DBOpParams *params);
55 int createObjectDataTable(const DoutPrefixProvider *dpp, DBOpParams *params);
56 int createQuotaTable(const DoutPrefixProvider *dpp, DBOpParams *params);
57
58 int createLCTables(const DoutPrefixProvider *dpp) override;
59
60 int DeleteBucketTable(const DoutPrefixProvider *dpp, DBOpParams *params);
61 int DeleteUserTable(const DoutPrefixProvider *dpp, DBOpParams *params);
62 int DeleteObjectTable(const DoutPrefixProvider *dpp, DBOpParams *params);
63 int DeleteObjectDataTable(const DoutPrefixProvider *dpp, DBOpParams *params);
64 int DeleteQuotaTable(const DoutPrefixProvider *dpp, DBOpParams *params);
65 int DeleteLCEntryTable(const DoutPrefixProvider *dpp, DBOpParams *params);
66 int DeleteLCHeadTable(const DoutPrefixProvider *dpp, DBOpParams *params);
67
68 int ListAllBuckets(const DoutPrefixProvider *dpp, DBOpParams *params) override;
69 int ListAllUsers(const DoutPrefixProvider *dpp, DBOpParams *params) override;
70 int ListAllObjects(const DoutPrefixProvider *dpp, DBOpParams *params) override;
71};
72
73class SQLObjectOp : public ObjectOp {
74 private:
75 sqlite3 **sdb = NULL;
76 CephContext *cct;
77
78 public:
79 SQLObjectOp(sqlite3 **sdbi, CephContext *_cct) : sdb(sdbi), cct(_cct) {};
80 ~SQLObjectOp() {}
81
82 int InitializeObjectOps(string db_name, const DoutPrefixProvider *dpp);
83 int FreeObjectOps(const DoutPrefixProvider *dpp);
84};
85
86class SQLInsertUser : public SQLiteDB, public InsertUserOp {
87 private:
88 sqlite3 **sdb = NULL;
89 sqlite3_stmt *stmt = NULL; // Prepared statement
90
91 public:
92 SQLInsertUser(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
93 ~SQLInsertUser() {
94 if (stmt)
95 sqlite3_finalize(stmt);
96 }
97 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
98 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
99 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
100};
101
102class SQLRemoveUser : public SQLiteDB, public RemoveUserOp {
103 private:
104 sqlite3 **sdb = NULL;
105 sqlite3_stmt *stmt = NULL; // Prepared statement
106
107 public:
108 SQLRemoveUser(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
109 ~SQLRemoveUser() {
110 if (stmt)
111 sqlite3_finalize(stmt);
112 }
113 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
114 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
115 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
116};
117
118class SQLGetUser : public SQLiteDB, public GetUserOp {
119 private:
120 sqlite3 **sdb = NULL;
121 sqlite3_stmt *stmt = NULL; // Prepared statement
122 sqlite3_stmt *email_stmt = NULL; // Prepared statement to query by useremail
123 sqlite3_stmt *ak_stmt = NULL; // Prepared statement to query by access_key_id
124 sqlite3_stmt *userid_stmt = NULL; // Prepared statement to query by user_id
125
126 public:
127 SQLGetUser(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
128 ~SQLGetUser() {
129 if (stmt)
130 sqlite3_finalize(stmt);
131 if (email_stmt)
132 sqlite3_finalize(email_stmt);
133 if (ak_stmt)
134 sqlite3_finalize(ak_stmt);
135 if (userid_stmt)
136 sqlite3_finalize(userid_stmt);
137 }
138 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
139 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
140 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
141};
142
143class SQLInsertBucket : public SQLiteDB, public InsertBucketOp {
144 private:
145 sqlite3 **sdb = NULL;
146 sqlite3_stmt *stmt = NULL; // Prepared statement
147
148 public:
149 SQLInsertBucket(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
150 ~SQLInsertBucket() {
151 if (stmt)
152 sqlite3_finalize(stmt);
153 }
154 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
155 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
156 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
157};
158
159class SQLUpdateBucket : public SQLiteDB, public UpdateBucketOp {
160 private:
161 sqlite3 **sdb = NULL;
162 sqlite3_stmt *info_stmt = NULL; // Prepared statement
163 sqlite3_stmt *attrs_stmt = NULL; // Prepared statement
164 sqlite3_stmt *owner_stmt = NULL; // Prepared statement
165
166 public:
167 SQLUpdateBucket(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
168 ~SQLUpdateBucket() {
169 if (info_stmt)
170 sqlite3_finalize(info_stmt);
171 if (attrs_stmt)
172 sqlite3_finalize(attrs_stmt);
173 if (owner_stmt)
174 sqlite3_finalize(owner_stmt);
175 }
176 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
177 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
178 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
179};
180
181class SQLRemoveBucket : public SQLiteDB, public RemoveBucketOp {
182 private:
183 sqlite3 **sdb = NULL;
184 sqlite3_stmt *stmt = NULL; // Prepared statement
185
186 public:
187 SQLRemoveBucket(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
188 ~SQLRemoveBucket() {
189 if (stmt)
190 sqlite3_finalize(stmt);
191 }
192 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
193 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
194 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
195};
196
197class SQLGetBucket : public SQLiteDB, public GetBucketOp {
198 private:
199 sqlite3 **sdb = NULL;
200 sqlite3_stmt *stmt = NULL; // Prepared statement
201
202 public:
203 SQLGetBucket(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
204 ~SQLGetBucket() {
205 if (stmt)
206 sqlite3_finalize(stmt);
207 }
208 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
209 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
210 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
211};
212
213class SQLListUserBuckets : public SQLiteDB, public ListUserBucketsOp {
214 private:
215 sqlite3 **sdb = NULL;
216 sqlite3_stmt *stmt = NULL; // Prepared statement
217
218 public:
219 SQLListUserBuckets(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
220 ~SQLListUserBuckets() {
221 if (stmt)
222 sqlite3_finalize(stmt);
223 }
224 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
225 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
226 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
227};
228
229class SQLPutObject : public SQLiteDB, public PutObjectOp {
230 private:
231 sqlite3 **sdb = NULL;
232 sqlite3_stmt *stmt = NULL; // Prepared statement
233
234 public:
235 SQLPutObject(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
236 SQLPutObject(sqlite3 **sdbi, string db_name, CephContext *cct) : SQLiteDB(*sdbi, db_name, cct), sdb(sdbi) {}
237
238 ~SQLPutObject() {
239 if (stmt)
240 sqlite3_finalize(stmt);
241 }
242 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
243 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
244 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
245};
246
247class SQLDeleteObject : public SQLiteDB, public DeleteObjectOp {
248 private:
249 sqlite3 **sdb = NULL;
250 sqlite3_stmt *stmt = NULL; // Prepared statement
251
252 public:
253 SQLDeleteObject(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
254 SQLDeleteObject(sqlite3 **sdbi, string db_name, CephContext *cct) : SQLiteDB(*sdbi, db_name, cct), sdb(sdbi) {}
255
256 ~SQLDeleteObject() {
257 if (stmt)
258 sqlite3_finalize(stmt);
259 }
260 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
261 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
262 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
263};
264
265class SQLGetObject : public SQLiteDB, public GetObjectOp {
266 private:
267 sqlite3 **sdb = NULL;
268 sqlite3_stmt *stmt = NULL; // Prepared statement
269
270 public:
271 SQLGetObject(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
272 SQLGetObject(sqlite3 **sdbi, string db_name, CephContext *cct) : SQLiteDB(*sdbi, db_name, cct), sdb(sdbi) {}
273
274 ~SQLGetObject() {
275 if (stmt)
276 sqlite3_finalize(stmt);
277 }
278 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
279 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
280 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
281};
282
283class SQLUpdateObject : public SQLiteDB, public UpdateObjectOp {
284 private:
285 sqlite3 **sdb = NULL;
286 sqlite3_stmt *omap_stmt = NULL; // Prepared statement
287 sqlite3_stmt *attrs_stmt = NULL; // Prepared statement
288 sqlite3_stmt *meta_stmt = NULL; // Prepared statement
289 sqlite3_stmt *mp_stmt = NULL; // Prepared statement
290
291 public:
292 SQLUpdateObject(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
293 SQLUpdateObject(sqlite3 **sdbi, string db_name, CephContext *cct) : SQLiteDB(*sdbi, db_name, cct), sdb(sdbi) {}
294
295 ~SQLUpdateObject() {
296 if (omap_stmt)
297 sqlite3_finalize(omap_stmt);
298 if (attrs_stmt)
299 sqlite3_finalize(attrs_stmt);
300 if (meta_stmt)
301 sqlite3_finalize(meta_stmt);
302 }
303
304 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
305 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
306 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
307};
308
309class SQLListBucketObjects : public SQLiteDB, public ListBucketObjectsOp {
310 private:
311 sqlite3 **sdb = NULL;
312 sqlite3_stmt *stmt = NULL; // Prepared statement
313
314 public:
315 SQLListBucketObjects(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
316 SQLListBucketObjects(sqlite3 **sdbi, string db_name, CephContext *cct) : SQLiteDB(*sdbi, db_name, cct), sdb(sdbi) {}
317
318 ~SQLListBucketObjects() {
319 if (stmt)
320 sqlite3_finalize(stmt);
321 }
322 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
323 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
324 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
325};
326
327class SQLPutObjectData : public SQLiteDB, public PutObjectDataOp {
328 private:
329 sqlite3 **sdb = NULL;
330 sqlite3_stmt *stmt = NULL; // Prepared statement
331
332 public:
333 SQLPutObjectData(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
334 SQLPutObjectData(sqlite3 **sdbi, string db_name, CephContext *cct) : SQLiteDB(*sdbi, db_name, cct), sdb(sdbi) {}
335
336 ~SQLPutObjectData() {
337 if (stmt)
338 sqlite3_finalize(stmt);
339 }
340 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
341 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
342 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
343};
344
345class SQLUpdateObjectData : public SQLiteDB, public UpdateObjectDataOp {
346 private:
347 sqlite3 **sdb = NULL;
348 sqlite3_stmt *stmt = NULL; // Prepared statement
349
350 public:
351 SQLUpdateObjectData(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
352 SQLUpdateObjectData(sqlite3 **sdbi, string db_name, CephContext *cct) : SQLiteDB(*sdbi, db_name, cct), sdb(sdbi) {}
353
354 ~SQLUpdateObjectData() {
355 if (stmt)
356 sqlite3_finalize(stmt);
357 }
358 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
359 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
360 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
361};
362
363class SQLGetObjectData : public SQLiteDB, public GetObjectDataOp {
364 private:
365 sqlite3 **sdb = NULL;
366 sqlite3_stmt *stmt = NULL; // Prepared statement
367
368 public:
369 SQLGetObjectData(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
370 SQLGetObjectData(sqlite3 **sdbi, string db_name, CephContext *cct) : SQLiteDB(*sdbi, db_name, cct), sdb(sdbi) {}
371
372 ~SQLGetObjectData() {
373 if (stmt)
374 sqlite3_finalize(stmt);
375 }
376 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
377 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
378 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
379};
380
381class SQLDeleteObjectData : public SQLiteDB, public DeleteObjectDataOp {
382 private:
383 sqlite3 **sdb = NULL;
384 sqlite3_stmt *stmt = NULL; // Prepared statement
385
386 public:
387 SQLDeleteObjectData(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
388 SQLDeleteObjectData(sqlite3 **sdbi, string db_name, CephContext *cct) : SQLiteDB(*sdbi, db_name, cct), sdb(sdbi) {}
389
390 ~SQLDeleteObjectData() {
391 if (stmt)
392 sqlite3_finalize(stmt);
393 }
394 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
395 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
396 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
397};
398
399class SQLInsertLCEntry : public SQLiteDB, public InsertLCEntryOp {
400 private:
401 sqlite3 **sdb = NULL;
402 sqlite3_stmt *stmt = NULL; // Prepared statement
403
404 public:
405 SQLInsertLCEntry(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
406 ~SQLInsertLCEntry() {
407 if (stmt)
408 sqlite3_finalize(stmt);
409 }
410 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
411 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
412 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
413};
414
415class SQLRemoveLCEntry : public SQLiteDB, public RemoveLCEntryOp {
416 private:
417 sqlite3 **sdb = NULL;
418 sqlite3_stmt *stmt = NULL; // Prepared statement
419
420 public:
421 SQLRemoveLCEntry(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
422 ~SQLRemoveLCEntry() {
423 if (stmt)
424 sqlite3_finalize(stmt);
425 }
426 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
427 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
428 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
429};
430
431class SQLGetLCEntry : public SQLiteDB, public GetLCEntryOp {
432 private:
433 sqlite3 **sdb = NULL;
434 sqlite3_stmt *stmt = NULL; // Prepared statement
435 sqlite3_stmt *next_stmt = NULL; // Prepared statement
436
437 public:
438 SQLGetLCEntry(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
439 ~SQLGetLCEntry() {
440 if (stmt)
441 sqlite3_finalize(stmt);
442 if (next_stmt)
443 sqlite3_finalize(next_stmt);
444 }
445 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
446 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
447 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
448};
449
450class SQLListLCEntries : public SQLiteDB, public ListLCEntriesOp {
451 private:
452 sqlite3 **sdb = NULL;
453 sqlite3_stmt *stmt = NULL; // Prepared statement
454
455 public:
456 SQLListLCEntries(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
457 ~SQLListLCEntries() {
458 if (stmt)
459 sqlite3_finalize(stmt);
460 }
461 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
462 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
463 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
464};
465
466class SQLInsertLCHead : public SQLiteDB, public InsertLCHeadOp {
467 private:
468 sqlite3 **sdb = NULL;
469 sqlite3_stmt *stmt = NULL; // Prepared statement
470
471 public:
472 SQLInsertLCHead(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
473 ~SQLInsertLCHead() {
474 if (stmt)
475 sqlite3_finalize(stmt);
476 }
477 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
478 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
479 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
480};
481
482class SQLRemoveLCHead : public SQLiteDB, public RemoveLCHeadOp {
483 private:
484 sqlite3 **sdb = NULL;
485 sqlite3_stmt *stmt = NULL; // Prepared statement
486
487 public:
488 SQLRemoveLCHead(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
489 ~SQLRemoveLCHead() {
490 if (stmt)
491 sqlite3_finalize(stmt);
492 }
493 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
494 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
495 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
496};
497
498class SQLGetLCHead : public SQLiteDB, public GetLCHeadOp {
499 private:
500 sqlite3 **sdb = NULL;
501 sqlite3_stmt *stmt = NULL; // Prepared statement
502
503 public:
504 SQLGetLCHead(void **db, string db_name, CephContext *cct) : SQLiteDB((sqlite3 *)(*db), db_name, cct), sdb((sqlite3 **)db) {}
505 ~SQLGetLCHead() {
506 if (stmt)
507 sqlite3_finalize(stmt);
508 }
509 int Prepare(const DoutPrefixProvider *dpp, DBOpParams *params);
510 int Execute(const DoutPrefixProvider *dpp, DBOpParams *params);
511 int Bind(const DoutPrefixProvider *dpp, DBOpParams *params);
512};
513
514#endif