blob: 51e0e3b7b40fe96f560cdd345a512b59e6b05be8 [file] [log] [blame]
/*
* 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 */