From: Chris Hofstaedtler Date: Thu, 9 Jul 2020 19:35:12 +0000 (+0200) Subject: gsqlbackend: allow backend-specific queries X-Git-Tag: rec-4.4.0-beta1~44^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8e740765290ff3e56ca623a3db308dcc93f731cf;p=thirdparty%2Fpdns.git gsqlbackend: allow backend-specific queries --- diff --git a/modules/gmysqlbackend/gmysqlbackend.cc b/modules/gmysqlbackend/gmysqlbackend.cc index ef80c9d88a..49c6f92fb4 100644 --- a/modules/gmysqlbackend/gmysqlbackend.cc +++ b/modules/gmysqlbackend/gmysqlbackend.cc @@ -62,6 +62,7 @@ void gMySQLBackend::reconnect() getArgAsNum("timeout"), mustDo("thread-cleanup"), mustDo("ssl"))); + allocateStatements(); } class gMySQLFactory : public BackendFactory diff --git a/modules/godbcbackend/godbcbackend.cc b/modules/godbcbackend/godbcbackend.cc index 02139c24c4..7939ea6d69 100644 --- a/modules/godbcbackend/godbcbackend.cc +++ b/modules/godbcbackend/godbcbackend.cc @@ -47,6 +47,8 @@ gODBCBackend::gODBCBackend (const std::string & mode, const std::string & suffix throw PDNSException( "Unable to launch " + mode + " connection: " + e.txtReason()); } + allocateStatements(); + g_log << Logger::Warning << mode << " Connection successful" << std::endl; } diff --git a/modules/gpgsqlbackend/gpgsqlbackend.cc b/modules/gpgsqlbackend/gpgsqlbackend.cc index 53833ee65a..aead98326f 100644 --- a/modules/gpgsqlbackend/gpgsqlbackend.cc +++ b/modules/gpgsqlbackend/gpgsqlbackend.cc @@ -52,6 +52,8 @@ gPgSQLBackend::gPgSQLBackend(const string &mode, const string &suffix) : GSQLBa g_log<execute("PRAGMA synchronous="+getArg("pragma-synchronous")); } diff --git a/pdns/backends/gsql/gsqlbackend.hh b/pdns/backends/gsql/gsqlbackend.hh index a98b3a8380..60e2ef9af1 100644 --- a/pdns/backends/gsql/gsqlbackend.hh +++ b/pdns/backends/gsql/gsqlbackend.hh @@ -48,11 +48,11 @@ public: d_db=std::unique_ptr(db); if (d_db) { d_db->setLog(::arg().mustDo("query-logging")); - allocateStatements(); } } - void allocateStatements() +protected: + virtual void allocateStatements() { if (d_db) { d_NoIdQuery_stmt = d_db->prepare(d_NoIdQuery, 2); @@ -117,7 +117,7 @@ public: } } - void freeStatements() { + virtual void freeStatements() { d_NoIdQuery_stmt.reset(); d_IdQuery_stmt.reset(); d_ANYNoIdQuery_stmt.reset(); @@ -179,6 +179,7 @@ public: d_SearchCommentsQuery_stmt.reset(); } +public: void lookup(const QType &, const DNSName &qdomain, int zoneId, DNSPacket *p=nullptr) override; bool list(const DNSName &target, int domain_id, bool include_disabled=false) override; bool get(DNSResourceRecord &r) override; @@ -263,11 +264,12 @@ protected: return d_inTransaction; } -private: string d_query_name; DNSName d_qname; SSqlStatement::result_t d_result; + unique_ptr* d_query_stmt; +private: string d_NoIdQuery; string d_IdQuery; string d_ANYNoIdQuery; @@ -342,7 +344,6 @@ private: string d_SearchRecordsQuery; string d_SearchCommentsQuery; - unique_ptr* d_query_stmt; unique_ptr d_NoIdQuery_stmt; unique_ptr d_IdQuery_stmt;