From 16534364e49daee6d67b3ba32c16dba9472f73fc Mon Sep 17 00:00:00 2001 From: Aki Tuomi Date: Sat, 8 Feb 2014 22:56:41 +0200 Subject: [PATCH] Implementation for oracle backend --- modules/oraclebackend/oraclebackend.cc | 46 ++++++++++++++++++++++++++ modules/oraclebackend/oraclebackend.hh | 4 +++ 2 files changed, 50 insertions(+) diff --git a/modules/oraclebackend/oraclebackend.cc b/modules/oraclebackend/oraclebackend.cc index f07eecc0b..a6663992c 100644 --- a/modules/oraclebackend/oraclebackend.cc +++ b/modules/oraclebackend/oraclebackend.cc @@ -186,6 +186,13 @@ static const char *prevNextHashQueryDefaultSQL = " get_hashed_prev_next(:zoneid, :hash, :unhashed, :prev, :next);\n" "END;"; +static const char *getAllZoneMetadataQueryKey = "PDNS_Get_All_Zone_Metadata"; +static const char *getAllZoneMetadataQueryDefaultSQL = + "SELECT md.meta_key, md.meta_content " + "FROM Zones z JOIN ZoneMetadata md ON z.id = md.zone_id " + "WHERE z.name = lower(:name)" + "ORDER BY md.meta_ind"; + static const char *getZoneMetadataQueryKey = "PDNS_Get_Zone_Metadata"; static const char *getZoneMetadataQueryDefaultSQL = "SELECT md.meta_content " @@ -1240,6 +1247,45 @@ OracleBackend::createSlaveDomain(const string &ip, const string &domain, return true; } +bool +OracleBackend::getAllDomainMetadata (const string& name, std::map >& meta) +{ + if(!d_dnssecQueries) + return -1; + + DomainInfo di; + if (getDomainInfo(name, di) == false) return false; + + sword rc; + OCIStmt *stmt; + + stmt = prepare_query(pooledSvcCtx, getAllZoneMetadataQuerySQL, getAllZoneMetadataQueryKey); + bind_str_failokay(stmt, ":nsname", myServerName, sizeof(myServerName)); + bind_str(stmt, ":name", mQueryName, sizeof(mQueryName)); + define_output_str(stmt, 1, &mResultContentInd, mResultContent, sizeof(mResultContent)); + + string_to_cbuf(mQueryName, name, sizeof(mQueryName)); + + rc = OCIStmtExecute(pooledSvcCtx, stmt, oraerr, 1, 0, NULL, NULL, OCI_DEFAULT); + + while (rc != OCI_NO_DATA) { + if (rc == OCI_ERROR) { + throw OracleException("Oracle getAllDomainMetadata", oraerr); + } + check_indicator(mResultKindInd, true); + check_indicator(mResultContentInd, true); + + string kind = mResultKind; + string content = mResultContent; + meta[kind].push_back(content); + + rc = OCIStmtFetch2(stmt, oraerr, 1, OCI_FETCH_NEXT, 0, OCI_DEFAULT); + } + + release_query(stmt, getAllZoneMetadataQueryKey); + return true; +} + bool OracleBackend::getDomainMetadata (const string& name, const string& kind, vector& meta) diff --git a/modules/oraclebackend/oraclebackend.hh b/modules/oraclebackend/oraclebackend.hh index 8b7f80241..61db736ae 100644 --- a/modules/oraclebackend/oraclebackend.hh +++ b/modules/oraclebackend/oraclebackend.hh @@ -79,6 +79,7 @@ public: bool createSlaveDomain(const string &ip, const string &domain, const string &nameserver, const string &account); + bool getAllDomainMetadata(const string& name, std::map >& meta); bool getDomainMetadata(const string& name, const std::string& kind, std::vector& meta); bool setDomainMetadata(const string& name, const std::string& kind, const std::vector& meta); @@ -127,6 +128,7 @@ private: string prevNextNameQuerySQL; string prevNextHashQuerySQL; + string getAllZoneMetadataQuerySQL; string getZoneMetadataQuerySQL; string delZoneMetadataQuerySQL; string setZoneMetadataQuerySQL; @@ -161,6 +163,8 @@ private: sb2 mResultTTLInd; char mResultType[64]; sb2 mResultTypeInd; + char mResultKind[64]; + sb2 mResultKindInd; char mResultContent[4001]; sb2 mResultContentInd; int mResultZoneId; -- 2.50.0