| /* |
| * rr-mgr.cpp |
| * |
| * Created on: 23 Jul, 2014 |
| * Author: shock |
| */ |
| |
| #include "rr-mgr.hpp" |
| |
| namespace ndn { |
| namespace ndns{ |
| RRMgr::RRMgr(Zone& zone, Query& query, Response& response) |
| : m_count(0U) |
| , m_zone(zone) |
| , m_query(query) |
| , m_response(response) |
| { |
| |
| } |
| |
| |
| RRMgr::~RRMgr() { |
| // TODO Auto-generated destructor stub |
| } |
| |
| |
| |
| int |
| RRMgr::count() |
| { |
| std::string sql; |
| sql = "SELECT count(*) FROM rrs INNER JOIN rrsets ON rrs.rrset_id=rrsets.id"; |
| sql += " WHERE rrsets.zone_id="; |
| sql += std::to_string(m_zone.getId()); |
| sql += " AND "; |
| sql += "rrsets.type=\'"; |
| sql += RR::toString(m_query.getRrType()); |
| sql += "\' AND "; |
| sql += "rrsets.label LIKE\'"; |
| sql += m_query.getRrLabel().toUri()+"/%\'"; |
| |
| std::cout<<"sql="<<sql<<std::endl; |
| this->execute(sql, static_callback_countRr, this); |
| |
| if (this->getStatus() == DBMgr::DBError) |
| { |
| return -1; |
| } |
| |
| return this->m_count; |
| } |
| int |
| RRMgr::callback_countRr(int argc, char **argv, char **azColName) |
| { |
| this->addResultNum(); |
| |
| std::cout<<this->getResultNum()<<"th result: "<<"count="<<argv[0]<<std::endl; |
| m_count = std::atoi(argv[0]); |
| return 0; |
| } |
| |
| int RRMgr::lookup() |
| { |
| std::string sql; |
| |
| sql = "SELECT rrs.ttl, rrs.rrdata, rrs.id FROM rrs INNER JOIN rrsets ON rrs.rrset_id=rrsets.id"; |
| sql += " WHERE rrsets.zone_id="; |
| sql += std::to_string(m_zone.getId()); |
| sql += " AND "; |
| sql += "rrsets.type=\'"; |
| sql += RR::toString(m_query.getRrType()); |
| sql += "\' AND "; |
| sql += "rrsets.label=\'"; |
| sql += m_query.getRrLabel().toUri()+"\'"; |
| sql += " ORDER BY rrs.id"; |
| |
| std::cout<<"sql="<<sql<<std::endl; |
| this->execute(sql, static_callback_getRr, this); |
| |
| if (this->getStatus() == DBMgr::DBError) |
| { |
| return -1; |
| } |
| |
| //m_response.setQueryName(m_query.getAuthorityZone()); |
| return 0; |
| } |
| |
| int RRMgr::callback_getRr(int argc, char **argv, char **azColName) |
| { |
| this->addResultNum(); |
| if (argc < 1) |
| { |
| this->setErr("No RRType="+RR::toString(m_query.getRrType())+ |
| " and label="+m_query.getRrLabel().toUri()+ |
| " and zone="+m_zone.getAuthorizedName().toUri()); |
| return 0; |
| } |
| |
| std::cout<<this->getResultNum()<<"th result: "<<"id="<<argv[2] |
| <<" ttl="<<argv[0]<<" rrdata="<<argv[1]<<std::endl; |
| |
| m_response.setFreshness(time::milliseconds(std::atoi(argv[0]))); |
| |
| m_response.addRr(std::atoi(argv[2]), argv[1]); |
| //std::cout<<"after add a Rr: current size="<<m_response.getRrs().size()<<std::endl; |
| //m_response.setFreshness(time::milliseconds(std::atoi(argv[0]))); |
| return 0; |
| } |
| |
| }//namespace ndnsn |
| } /* namespace ndn */ |