]> git.ipfire.org Git - thirdparty/pdns.git/blob - pdns/backends/gsql/gsqlbackend.hh
Merge pull request #11162 from omoerbeek/auth-print-algo-mnemonic
[thirdparty/pdns.git] / pdns / backends / gsql / gsqlbackend.hh
1 /*
2 * This file is part of PowerDNS or dnsdist.
3 * Copyright -- PowerDNS.COM B.V. and its contributors
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of version 2 of the GNU General Public License as
7 * published by the Free Software Foundation.
8 *
9 * In addition, for the avoidance of any doubt, permission is granted to
10 * link this program with OpenSSL and to (re)distribute the binaries
11 * produced as the result of such linking.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 */
22 #pragma once
23 #include <string>
24 #include <map>
25 #include "ssql.hh"
26 #include "pdns/arguments.hh"
27
28 #include "pdns/namespaces.hh"
29
30 bool isDnssecDomainMetadata (const string& name);
31
32 /*
33 GSQLBackend is a generic backend used by other sql backends
34 */
35 class GSQLBackend : public DNSBackend
36 {
37 public:
38 GSQLBackend(const string &mode, const string &suffix); //!< Makes our connection to the database. Throws an exception if it fails.
39 virtual ~GSQLBackend()
40 {
41 freeStatements();
42 d_db.reset();
43 }
44
45 void setDB(SSql *db)
46 {
47 freeStatements();
48 d_db=std::unique_ptr<SSql>(db);
49 if (d_db) {
50 d_db->setLog(::arg().mustDo("query-logging"));
51 }
52 }
53
54 protected:
55 virtual void allocateStatements()
56 {
57 if (d_db) {
58 d_NoIdQuery_stmt = d_db->prepare(d_NoIdQuery, 2);
59 d_IdQuery_stmt = d_db->prepare(d_IdQuery, 3);
60 d_ANYNoIdQuery_stmt = d_db->prepare(d_ANYNoIdQuery, 1);
61 d_ANYIdQuery_stmt = d_db->prepare(d_ANYIdQuery, 2);
62 d_listQuery_stmt = d_db->prepare(d_listQuery, 2);
63 d_listSubZoneQuery_stmt = d_db->prepare(d_listSubZoneQuery, 3);
64 d_MasterOfDomainsZoneQuery_stmt = d_db->prepare(d_MasterOfDomainsZoneQuery, 1);
65 d_InfoOfDomainsZoneQuery_stmt = d_db->prepare(d_InfoOfDomainsZoneQuery, 1);
66 d_InfoOfAllSlaveDomainsQuery_stmt = d_db->prepare(d_InfoOfAllSlaveDomainsQuery, 0);
67 d_SuperMasterInfoQuery_stmt = d_db->prepare(d_SuperMasterInfoQuery, 2);
68 d_GetSuperMasterIPs_stmt = d_db->prepare(d_GetSuperMasterIPs, 2);
69 d_AddSuperMaster_stmt = d_db->prepare(d_AddSuperMaster, 3);
70 d_RemoveAutoPrimary_stmt = d_db->prepare(d_RemoveAutoPrimaryQuery, 2);
71 d_ListAutoPrimaries_stmt = d_db->prepare(d_ListAutoPrimariesQuery, 0);
72 d_InsertZoneQuery_stmt = d_db->prepare(d_InsertZoneQuery, 4);
73 d_InsertRecordQuery_stmt = d_db->prepare(d_InsertRecordQuery, 9);
74 d_InsertEmptyNonTerminalOrderQuery_stmt = d_db->prepare(d_InsertEmptyNonTerminalOrderQuery, 4);
75 d_UpdateMasterOfZoneQuery_stmt = d_db->prepare(d_UpdateMasterOfZoneQuery, 2);
76 d_UpdateKindOfZoneQuery_stmt = d_db->prepare(d_UpdateKindOfZoneQuery, 2);
77 d_UpdateAccountOfZoneQuery_stmt = d_db->prepare(d_UpdateAccountOfZoneQuery, 2);
78 d_UpdateSerialOfZoneQuery_stmt = d_db->prepare(d_UpdateSerialOfZoneQuery, 2);
79 d_UpdateLastCheckOfZoneQuery_stmt = d_db->prepare(d_UpdateLastCheckOfZoneQuery, 2);
80 d_InfoOfAllMasterDomainsQuery_stmt = d_db->prepare(d_InfoOfAllMasterDomainsQuery, 0);
81 d_DeleteDomainQuery_stmt = d_db->prepare(d_DeleteDomainQuery, 1);
82 d_DeleteZoneQuery_stmt = d_db->prepare(d_DeleteZoneQuery, 1);
83 d_DeleteRRSetQuery_stmt = d_db->prepare(d_DeleteRRSetQuery, 3);
84 d_DeleteNamesQuery_stmt = d_db->prepare(d_DeleteNamesQuery, 2);
85 d_firstOrderQuery_stmt = d_db->prepare(d_firstOrderQuery, 1);
86 d_beforeOrderQuery_stmt = d_db->prepare(d_beforeOrderQuery, 2);
87 d_afterOrderQuery_stmt = d_db->prepare(d_afterOrderQuery, 2);
88 d_lastOrderQuery_stmt = d_db->prepare(d_lastOrderQuery, 1);
89 d_updateOrderNameAndAuthQuery_stmt = d_db->prepare(d_updateOrderNameAndAuthQuery, 4);
90 d_updateOrderNameAndAuthTypeQuery_stmt = d_db->prepare(d_updateOrderNameAndAuthTypeQuery, 5);
91 d_nullifyOrderNameAndUpdateAuthQuery_stmt = d_db->prepare(d_nullifyOrderNameAndUpdateAuthQuery, 3);
92 d_nullifyOrderNameAndUpdateAuthTypeQuery_stmt = d_db->prepare(d_nullifyOrderNameAndUpdateAuthTypeQuery, 4);
93 d_RemoveEmptyNonTerminalsFromZoneQuery_stmt = d_db->prepare(d_RemoveEmptyNonTerminalsFromZoneQuery, 1);
94 d_DeleteEmptyNonTerminalQuery_stmt = d_db->prepare(d_DeleteEmptyNonTerminalQuery, 2);
95 d_AddDomainKeyQuery_stmt = d_db->prepare(d_AddDomainKeyQuery, 5);
96 d_GetLastInsertedKeyIdQuery_stmt = d_db->prepare(d_GetLastInsertedKeyIdQuery, 0);
97 d_ListDomainKeysQuery_stmt = d_db->prepare(d_ListDomainKeysQuery, 1);
98 d_GetAllDomainMetadataQuery_stmt = d_db->prepare(d_GetAllDomainMetadataQuery, 1);
99 d_GetDomainMetadataQuery_stmt = d_db->prepare(d_GetDomainMetadataQuery, 2);
100 d_ClearDomainMetadataQuery_stmt = d_db->prepare(d_ClearDomainMetadataQuery, 2);
101 d_ClearDomainAllMetadataQuery_stmt = d_db->prepare(d_ClearDomainAllMetadataQuery, 1);
102 d_SetDomainMetadataQuery_stmt = d_db->prepare(d_SetDomainMetadataQuery, 3);
103 d_RemoveDomainKeyQuery_stmt = d_db->prepare(d_RemoveDomainKeyQuery, 2);
104 d_ActivateDomainKeyQuery_stmt = d_db->prepare(d_ActivateDomainKeyQuery, 2);
105 d_DeactivateDomainKeyQuery_stmt = d_db->prepare(d_DeactivateDomainKeyQuery, 2);
106 d_PublishDomainKeyQuery_stmt = d_db->prepare(d_PublishDomainKeyQuery, 2);
107 d_UnpublishDomainKeyQuery_stmt = d_db->prepare(d_UnpublishDomainKeyQuery, 2);
108 d_ClearDomainAllKeysQuery_stmt = d_db->prepare(d_ClearDomainAllKeysQuery, 1);
109 d_getTSIGKeyQuery_stmt = d_db->prepare(d_getTSIGKeyQuery, 1);
110 d_setTSIGKeyQuery_stmt = d_db->prepare(d_setTSIGKeyQuery, 3);
111 d_deleteTSIGKeyQuery_stmt = d_db->prepare(d_deleteTSIGKeyQuery, 1);
112 d_getTSIGKeysQuery_stmt = d_db->prepare(d_getTSIGKeysQuery, 0);
113 d_getAllDomainsQuery_stmt = d_db->prepare(d_getAllDomainsQuery, 1);
114 d_ListCommentsQuery_stmt = d_db->prepare(d_ListCommentsQuery, 1);
115 d_InsertCommentQuery_stmt = d_db->prepare(d_InsertCommentQuery, 6);
116 d_DeleteCommentRRsetQuery_stmt = d_db->prepare(d_DeleteCommentRRsetQuery, 3);
117 d_DeleteCommentsQuery_stmt = d_db->prepare(d_DeleteCommentsQuery, 1);
118 d_SearchRecordsQuery_stmt = d_db->prepare(d_SearchRecordsQuery, 3);
119 d_SearchCommentsQuery_stmt = d_db->prepare(d_SearchCommentsQuery, 3);
120 }
121 }
122
123 virtual void freeStatements() {
124 d_NoIdQuery_stmt.reset();
125 d_IdQuery_stmt.reset();
126 d_ANYNoIdQuery_stmt.reset();
127 d_ANYIdQuery_stmt.reset();
128 d_listQuery_stmt.reset();
129 d_listSubZoneQuery_stmt.reset();
130 d_MasterOfDomainsZoneQuery_stmt.reset();
131 d_InfoOfDomainsZoneQuery_stmt.reset();
132 d_InfoOfAllSlaveDomainsQuery_stmt.reset();
133 d_SuperMasterInfoQuery_stmt.reset();
134 d_GetSuperMasterIPs_stmt.reset();
135 d_AddSuperMaster_stmt.reset();
136 d_RemoveAutoPrimary_stmt.reset();
137 d_ListAutoPrimaries_stmt.reset();
138 d_InsertZoneQuery_stmt.reset();
139 d_InsertRecordQuery_stmt.reset();
140 d_InsertEmptyNonTerminalOrderQuery_stmt.reset();
141 d_UpdateMasterOfZoneQuery_stmt.reset();
142 d_UpdateKindOfZoneQuery_stmt.reset();
143 d_UpdateAccountOfZoneQuery_stmt.reset();
144 d_UpdateSerialOfZoneQuery_stmt.reset();
145 d_UpdateLastCheckOfZoneQuery_stmt.reset();
146 d_InfoOfAllMasterDomainsQuery_stmt.reset();
147 d_DeleteDomainQuery_stmt.reset();
148 d_DeleteZoneQuery_stmt.reset();
149 d_DeleteRRSetQuery_stmt.reset();
150 d_DeleteNamesQuery_stmt.reset();
151 d_firstOrderQuery_stmt.reset();
152 d_beforeOrderQuery_stmt.reset();
153 d_afterOrderQuery_stmt.reset();
154 d_lastOrderQuery_stmt.reset();
155 d_updateOrderNameAndAuthQuery_stmt.reset();
156 d_updateOrderNameAndAuthTypeQuery_stmt.reset();
157 d_nullifyOrderNameAndUpdateAuthQuery_stmt.reset();
158 d_nullifyOrderNameAndUpdateAuthTypeQuery_stmt.reset();
159 d_RemoveEmptyNonTerminalsFromZoneQuery_stmt.reset();
160 d_DeleteEmptyNonTerminalQuery_stmt.reset();
161 d_AddDomainKeyQuery_stmt.reset();
162 d_GetLastInsertedKeyIdQuery_stmt.reset();
163 d_ListDomainKeysQuery_stmt.reset();
164 d_GetAllDomainMetadataQuery_stmt.reset();
165 d_GetDomainMetadataQuery_stmt.reset();
166 d_ClearDomainMetadataQuery_stmt.reset();
167 d_ClearDomainAllMetadataQuery_stmt.reset();
168 d_SetDomainMetadataQuery_stmt.reset();
169 d_RemoveDomainKeyQuery_stmt.reset();
170 d_ActivateDomainKeyQuery_stmt.reset();
171 d_DeactivateDomainKeyQuery_stmt.reset();
172 d_PublishDomainKeyQuery_stmt.reset();
173 d_UnpublishDomainKeyQuery_stmt.reset();
174 d_ClearDomainAllKeysQuery_stmt.reset();
175 d_getTSIGKeyQuery_stmt.reset();
176 d_setTSIGKeyQuery_stmt.reset();
177 d_deleteTSIGKeyQuery_stmt.reset();
178 d_getTSIGKeysQuery_stmt.reset();
179 d_getAllDomainsQuery_stmt.reset();
180 d_ListCommentsQuery_stmt.reset();
181 d_InsertCommentQuery_stmt.reset();
182 d_DeleteCommentRRsetQuery_stmt.reset();
183 d_DeleteCommentsQuery_stmt.reset();
184 d_SearchRecordsQuery_stmt.reset();
185 d_SearchCommentsQuery_stmt.reset();
186 }
187
188 public:
189 void lookup(const QType &, const DNSName &qdomain, int zoneId, DNSPacket *p=nullptr) override;
190 bool list(const DNSName &target, int domain_id, bool include_disabled=false) override;
191 bool get(DNSResourceRecord &r) override;
192 void getAllDomains(vector<DomainInfo>* domains, bool getSerial, bool include_disabled) override;
193 void alsoNotifies(const DNSName &domain, set<string> *ips) override;
194 bool startTransaction(const DNSName &domain, int domain_id=-1) override;
195 bool commitTransaction() override;
196 bool abortTransaction() override;
197 bool feedRecord(const DNSResourceRecord &r, const DNSName &ordername, bool ordernameIsNSEC3=false) override;
198 bool feedEnts(int domain_id, map<DNSName,bool>& nonterm) override;
199 bool feedEnts3(int domain_id, const DNSName &domain, map<DNSName,bool> &nonterm, const NSEC3PARAMRecordContent& ns3prc, bool narrow) override;
200 bool createDomain(const DNSName& domain, const DomainInfo::DomainKind kind, const vector<ComboAddress>& masters, const string& account) override;
201 bool createSlaveDomain(const string& ip, const DNSName& domain, const string& nameserver, const string& account) override;
202 bool deleteDomain(const DNSName &domain) override;
203 bool superMasterAdd(const AutoPrimary& primary) override;
204 bool autoPrimaryRemove(const AutoPrimary& primary) override;
205 bool autoPrimariesList(std::vector<AutoPrimary>& primaries) override;
206 bool superMasterBackend(const string &ip, const DNSName &domain, const vector<DNSResourceRecord>&nsset, string *nameserver, string *account, DNSBackend **db) override;
207 void setStale(uint32_t domain_id) override;
208 void setFresh(uint32_t domain_id) override;
209 void getUnfreshSlaveInfos(vector<DomainInfo> *domains) override;
210 void getUpdatedMasters(vector<DomainInfo> *updatedDomains) override;
211 bool getDomainInfo(const DNSName &domain, DomainInfo &di, bool getSerial=true) override;
212 void setNotified(uint32_t domain_id, uint32_t serial) override;
213 bool setMasters(const DNSName &domain, const vector<ComboAddress> &masters) override;
214 bool setKind(const DNSName &domain, const DomainInfo::DomainKind kind) override;
215 bool setAccount(const DNSName &domain, const string &account) override;
216
217 bool getBeforeAndAfterNamesAbsolute(uint32_t id, const DNSName& qname, DNSName& unhashed, DNSName& before, DNSName& after) override;
218 bool updateDNSSECOrderNameAndAuth(uint32_t domain_id, const DNSName& qname, const DNSName& ordername, bool auth, const uint16_t=QType::ANY) override;
219
220 bool updateEmptyNonTerminals(uint32_t domain_id, set<DNSName>& insert ,set<DNSName>& erase, bool remove) override;
221 bool doesDNSSEC() override;
222
223 bool replaceRRSet(uint32_t domain_id, const DNSName& qname, const QType& qt, const vector<DNSResourceRecord>& rrset) override;
224 bool listSubZone(const DNSName &zone, int domain_id) override;
225 bool addDomainKey(const DNSName& name, const KeyData& key, int64_t& id) override;
226 bool getDomainKeys(const DNSName& name, std::vector<KeyData>& keys) override;
227 bool getAllDomainMetadata(const DNSName& name, std::map<std::string, std::vector<std::string> >& meta) override;
228 bool getDomainMetadata(const DNSName& name, const std::string& kind, std::vector<std::string>& meta) override;
229 bool setDomainMetadata(const DNSName& name, const std::string& kind, const std::vector<std::string>& meta) override;
230
231 bool removeDomainKey(const DNSName& name, unsigned int id) override;
232 bool activateDomainKey(const DNSName& name, unsigned int id) override;
233 bool deactivateDomainKey(const DNSName& name, unsigned int id) override;
234 bool publishDomainKey(const DNSName& name, unsigned int id) override;
235 bool unpublishDomainKey(const DNSName& name, unsigned int id) override;
236
237 bool getTSIGKey(const DNSName& name, DNSName* algorithm, string* content) override;
238 bool setTSIGKey(const DNSName& name, const DNSName& algorithm, const string& content) override;
239 bool deleteTSIGKey(const DNSName& name) override;
240 bool getTSIGKeys(std::vector< struct TSIGKey > &keys) override;
241
242 bool listComments(const uint32_t domain_id) override;
243 bool getComment(Comment& comment) override;
244 void feedComment(const Comment& comment) override;
245 bool replaceComments(const uint32_t domain_id, const DNSName& qname, const QType& qt, const vector<Comment>& comments) override;
246 string directBackendCmd(const string &query) override;
247 bool searchRecords(const string &pattern, int maxResults, vector<DNSResourceRecord>& result) override;
248 bool searchComments(const string &pattern, int maxResults, vector<Comment>& result) override;
249
250 protected:
251 string pattern2SQLPattern(const string& pattern);
252 void extractRecord(SSqlStatement::row_t& row, DNSResourceRecord& rr);
253 void extractComment(SSqlStatement::row_t& row, Comment& c);
254 void setLastCheck(uint32_t domain_id, time_t lastcheck);
255 bool isConnectionUsable() {
256 if (d_db) {
257 return d_db->isConnectionUsable();
258 }
259 return false;
260 }
261 void reconnectIfNeeded()
262 {
263 if (inTransaction() || isConnectionUsable()) {
264 return;
265 }
266
267 reconnect();
268 }
269 virtual void reconnect() { }
270 virtual bool inTransaction() override
271 {
272 return d_inTransaction;
273 }
274
275 bool d_list{false};
276 string d_query_name;
277 DNSName d_qname;
278 SSqlStatement::result_t d_result;
279 unique_ptr<SSqlStatement>* d_query_stmt;
280
281 private:
282 string d_NoIdQuery;
283 string d_IdQuery;
284 string d_ANYNoIdQuery;
285 string d_ANYIdQuery;
286
287 string d_listQuery;
288 string d_listSubZoneQuery;
289 string d_logprefix;
290
291 string d_MasterOfDomainsZoneQuery;
292 string d_InfoOfDomainsZoneQuery;
293 string d_InfoOfAllSlaveDomainsQuery;
294 string d_SuperMasterInfoQuery;
295 string d_GetSuperMasterName;
296 string d_GetSuperMasterIPs;
297 string d_AddSuperMaster;
298 string d_RemoveAutoPrimaryQuery;
299 string d_ListAutoPrimariesQuery;
300
301 string d_InsertZoneQuery;
302 string d_InsertRecordQuery;
303 string d_InsertEmptyNonTerminalOrderQuery;
304 string d_UpdateMasterOfZoneQuery;
305 string d_UpdateKindOfZoneQuery;
306 string d_UpdateAccountOfZoneQuery;
307 string d_UpdateSerialOfZoneQuery;
308 string d_UpdateLastCheckOfZoneQuery;
309 string d_InfoOfAllMasterDomainsQuery;
310 string d_DeleteDomainQuery;
311 string d_DeleteZoneQuery;
312 string d_DeleteRRSetQuery;
313 string d_DeleteNamesQuery;
314
315 string d_firstOrderQuery;
316 string d_beforeOrderQuery;
317 string d_afterOrderQuery;
318 string d_lastOrderQuery;
319
320 string d_updateOrderNameAndAuthQuery;
321 string d_updateOrderNameAndAuthTypeQuery;
322 string d_nullifyOrderNameAndUpdateAuthQuery;
323 string d_nullifyOrderNameAndUpdateAuthTypeQuery;
324
325 string d_RemoveEmptyNonTerminalsFromZoneQuery;
326 string d_DeleteEmptyNonTerminalQuery;
327
328 string d_AddDomainKeyQuery;
329 string d_GetLastInsertedKeyIdQuery;
330 string d_ListDomainKeysQuery;
331 string d_GetAllDomainMetadataQuery;
332 string d_GetDomainMetadataQuery;
333 string d_ClearDomainMetadataQuery;
334 string d_ClearDomainAllMetadataQuery;
335 string d_SetDomainMetadataQuery;
336
337 string d_RemoveDomainKeyQuery;
338 string d_ActivateDomainKeyQuery;
339 string d_DeactivateDomainKeyQuery;
340 string d_PublishDomainKeyQuery;
341 string d_UnpublishDomainKeyQuery;
342 string d_ClearDomainAllKeysQuery;
343
344 string d_getTSIGKeyQuery;
345 string d_setTSIGKeyQuery;
346 string d_deleteTSIGKeyQuery;
347 string d_getTSIGKeysQuery;
348
349 string d_getAllDomainsQuery;
350
351 string d_ListCommentsQuery;
352 string d_InsertCommentQuery;
353 string d_DeleteCommentRRsetQuery;
354 string d_DeleteCommentsQuery;
355
356 string d_SearchRecordsQuery;
357 string d_SearchCommentsQuery;
358
359
360 unique_ptr<SSqlStatement> d_NoIdQuery_stmt;
361 unique_ptr<SSqlStatement> d_IdQuery_stmt;
362 unique_ptr<SSqlStatement> d_ANYNoIdQuery_stmt;
363 unique_ptr<SSqlStatement> d_ANYIdQuery_stmt;
364 unique_ptr<SSqlStatement> d_listQuery_stmt;
365 unique_ptr<SSqlStatement> d_listSubZoneQuery_stmt;
366 unique_ptr<SSqlStatement> d_MasterOfDomainsZoneQuery_stmt;
367 unique_ptr<SSqlStatement> d_InfoOfDomainsZoneQuery_stmt;
368 unique_ptr<SSqlStatement> d_InfoOfAllSlaveDomainsQuery_stmt;
369 unique_ptr<SSqlStatement> d_SuperMasterInfoQuery_stmt;
370 unique_ptr<SSqlStatement> d_GetSuperMasterIPs_stmt;
371 unique_ptr<SSqlStatement> d_AddSuperMaster_stmt;
372 unique_ptr<SSqlStatement> d_RemoveAutoPrimary_stmt;
373 unique_ptr<SSqlStatement> d_ListAutoPrimaries_stmt;
374 unique_ptr<SSqlStatement> d_InsertZoneQuery_stmt;
375 unique_ptr<SSqlStatement> d_InsertRecordQuery_stmt;
376 unique_ptr<SSqlStatement> d_InsertEmptyNonTerminalOrderQuery_stmt;
377 unique_ptr<SSqlStatement> d_UpdateMasterOfZoneQuery_stmt;
378 unique_ptr<SSqlStatement> d_UpdateKindOfZoneQuery_stmt;
379 unique_ptr<SSqlStatement> d_UpdateAccountOfZoneQuery_stmt;
380 unique_ptr<SSqlStatement> d_UpdateSerialOfZoneQuery_stmt;
381 unique_ptr<SSqlStatement> d_UpdateLastCheckOfZoneQuery_stmt;
382 unique_ptr<SSqlStatement> d_InfoOfAllMasterDomainsQuery_stmt;
383 unique_ptr<SSqlStatement> d_DeleteDomainQuery_stmt;
384 unique_ptr<SSqlStatement> d_DeleteZoneQuery_stmt;
385 unique_ptr<SSqlStatement> d_DeleteRRSetQuery_stmt;
386 unique_ptr<SSqlStatement> d_DeleteNamesQuery_stmt;
387 unique_ptr<SSqlStatement> d_firstOrderQuery_stmt;
388 unique_ptr<SSqlStatement> d_beforeOrderQuery_stmt;
389 unique_ptr<SSqlStatement> d_afterOrderQuery_stmt;
390 unique_ptr<SSqlStatement> d_lastOrderQuery_stmt;
391 unique_ptr<SSqlStatement> d_updateOrderNameAndAuthQuery_stmt;
392 unique_ptr<SSqlStatement> d_updateOrderNameAndAuthTypeQuery_stmt;
393 unique_ptr<SSqlStatement> d_nullifyOrderNameAndUpdateAuthQuery_stmt;
394 unique_ptr<SSqlStatement> d_nullifyOrderNameAndUpdateAuthTypeQuery_stmt;
395 unique_ptr<SSqlStatement> d_RemoveEmptyNonTerminalsFromZoneQuery_stmt;
396 unique_ptr<SSqlStatement> d_DeleteEmptyNonTerminalQuery_stmt;
397 unique_ptr<SSqlStatement> d_AddDomainKeyQuery_stmt;
398 unique_ptr<SSqlStatement> d_GetLastInsertedKeyIdQuery_stmt;
399 unique_ptr<SSqlStatement> d_ListDomainKeysQuery_stmt;
400 unique_ptr<SSqlStatement> d_GetAllDomainMetadataQuery_stmt;
401 unique_ptr<SSqlStatement> d_GetDomainMetadataQuery_stmt;
402 unique_ptr<SSqlStatement> d_ClearDomainMetadataQuery_stmt;
403 unique_ptr<SSqlStatement> d_ClearDomainAllMetadataQuery_stmt;
404 unique_ptr<SSqlStatement> d_SetDomainMetadataQuery_stmt;
405 unique_ptr<SSqlStatement> d_RemoveDomainKeyQuery_stmt;
406 unique_ptr<SSqlStatement> d_ActivateDomainKeyQuery_stmt;
407 unique_ptr<SSqlStatement> d_DeactivateDomainKeyQuery_stmt;
408 unique_ptr<SSqlStatement> d_PublishDomainKeyQuery_stmt;
409 unique_ptr<SSqlStatement> d_UnpublishDomainKeyQuery_stmt;
410 unique_ptr<SSqlStatement> d_ClearDomainAllKeysQuery_stmt;
411 unique_ptr<SSqlStatement> d_getTSIGKeyQuery_stmt;
412 unique_ptr<SSqlStatement> d_setTSIGKeyQuery_stmt;
413 unique_ptr<SSqlStatement> d_deleteTSIGKeyQuery_stmt;
414 unique_ptr<SSqlStatement> d_getTSIGKeysQuery_stmt;
415 unique_ptr<SSqlStatement> d_getAllDomainsQuery_stmt;
416 unique_ptr<SSqlStatement> d_ListCommentsQuery_stmt;
417 unique_ptr<SSqlStatement> d_InsertCommentQuery_stmt;
418 unique_ptr<SSqlStatement> d_DeleteCommentRRsetQuery_stmt;
419 unique_ptr<SSqlStatement> d_DeleteCommentsQuery_stmt;
420 unique_ptr<SSqlStatement> d_SearchRecordsQuery_stmt;
421 unique_ptr<SSqlStatement> d_SearchCommentsQuery_stmt;
422
423 protected:
424 std::unique_ptr<SSql> d_db{nullptr};
425 bool d_dnssecQueries;
426 bool d_inTransaction{false};
427 bool d_upgradeContent{false};
428 };