blob: 0d4588da06547c7f36b6e3bdc0c6c0d7ba66a2df [file] [log] [blame]
shockjianga5ae48c2014-07-27 23:21:41 -07001/*
2 * rr-mgr.cpp
3 *
4 * Created on: 23 Jul, 2014
5 * Author: shock
6 */
7
8#include "rr-mgr.hpp"
9
10namespace ndn {
shockjiang99ad3892014-08-03 14:56:13 -070011namespace ndns {
shockjianga5ae48c2014-07-27 23:21:41 -070012RRMgr::RRMgr(Zone& zone, Query& query, Response& response)
13 : m_count(0U)
14 , m_zone(zone)
15 , m_query(query)
16 , m_response(response)
17{
18
19}
20
shockjiang99ad3892014-08-03 14:56:13 -070021RRMgr::~RRMgr()
22{
shockjianga5ae48c2014-07-27 23:21:41 -070023 // TODO Auto-generated destructor stub
24}
25
shockjiang99ad3892014-08-03 14:56:13 -070026int RRMgr::count()
shockjianga5ae48c2014-07-27 23:21:41 -070027{
28 std::string sql;
shockjiang99ad3892014-08-03 14:56:13 -070029 sql = "SELECT count(*) FROM rrs INNER JOIN rrsets ON rrs.rrset_id=rrsets.id";
shockjianga5ae48c2014-07-27 23:21:41 -070030 sql += " WHERE rrsets.zone_id=";
31 sql += std::to_string(m_zone.getId());
32 sql += " AND ";
33 sql += "rrsets.type=\'";
34 sql += RR::toString(m_query.getRrType());
35 sql += "\' AND ";
36 sql += "rrsets.label LIKE\'";
shockjiang99ad3892014-08-03 14:56:13 -070037 sql += m_query.getRrLabel().toUri() + "/%\'";
shockjianga5ae48c2014-07-27 23:21:41 -070038
shockjiang99ad3892014-08-03 14:56:13 -070039 std::cout << "sql=" << sql << std::endl;
shockjianga5ae48c2014-07-27 23:21:41 -070040 this->execute(sql, static_callback_countRr, this);
41
shockjiang99ad3892014-08-03 14:56:13 -070042 if (this->getStatus() == DBMgr::DBError) {
shockjianga5ae48c2014-07-27 23:21:41 -070043 return -1;
44 }
45
46 return this->m_count;
47}
shockjiang99ad3892014-08-03 14:56:13 -070048int RRMgr::callback_countRr(int argc, char **argv, char **azColName)
shockjianga5ae48c2014-07-27 23:21:41 -070049{
50 this->addResultNum();
51
shockjiang99ad3892014-08-03 14:56:13 -070052 std::cout << this->getResultNum() << "th result: " << "count=" << argv[0]
53 << std::endl;
shockjianga5ae48c2014-07-27 23:21:41 -070054 m_count = std::atoi(argv[0]);
55 return 0;
56}
57
58int RRMgr::lookup()
59{
60 std::string sql;
61
shockjiang99ad3892014-08-03 14:56:13 -070062 sql =
63 "SELECT rrs.ttl, rrs.rrdata, rrs.id FROM rrs INNER JOIN rrsets ON rrs.rrset_id=rrsets.id";
shockjianga5ae48c2014-07-27 23:21:41 -070064 sql += " WHERE rrsets.zone_id=";
65 sql += std::to_string(m_zone.getId());
66 sql += " AND ";
67 sql += "rrsets.type=\'";
68 sql += RR::toString(m_query.getRrType());
69 sql += "\' AND ";
70 sql += "rrsets.label=\'";
shockjiang99ad3892014-08-03 14:56:13 -070071 sql += m_query.getRrLabel().toUri() + "\'";
shockjianga5ae48c2014-07-27 23:21:41 -070072 sql += " ORDER BY rrs.id";
73
shockjiang99ad3892014-08-03 14:56:13 -070074 std::cout << "sql=" << sql << std::endl;
shockjianga5ae48c2014-07-27 23:21:41 -070075 this->execute(sql, static_callback_getRr, this);
76
shockjiang99ad3892014-08-03 14:56:13 -070077 if (this->getStatus() == DBMgr::DBError) {
shockjianga5ae48c2014-07-27 23:21:41 -070078 return -1;
79 }
80
81 //m_response.setQueryName(m_query.getAuthorityZone());
82 return 0;
83}
84
85int RRMgr::callback_getRr(int argc, char **argv, char **azColName)
86{
87 this->addResultNum();
shockjiang99ad3892014-08-03 14:56:13 -070088 if (argc < 1) {
89 this->setErr(
90 "No RRType=" + RR::toString(m_query.getRrType()) + " and label="
91 + m_query.getRrLabel().toUri() + " and zone="
92 + m_zone.getAuthorizedName().toUri());
shockjianga5ae48c2014-07-27 23:21:41 -070093 return 0;
94 }
95
shockjiang99ad3892014-08-03 14:56:13 -070096 std::cout << this->getResultNum() << "th result: " << "id=" << argv[2]
97 << " ttl=" << argv[0] << " rrdata=" << argv[1] << std::endl;
shockjianga5ae48c2014-07-27 23:21:41 -070098
99 m_response.setFreshness(time::milliseconds(std::atoi(argv[0])));
100
101 m_response.addRr(std::atoi(argv[2]), argv[1]);
102 //std::cout<<"after add a Rr: current size="<<m_response.getRrs().size()<<std::endl;
103 //m_response.setFreshness(time::milliseconds(std::atoi(argv[0])));
104 return 0;
105}
106
shockjiang99ad3892014-08-03 14:56:13 -0700107} //namespace ndnsn
shockjianga5ae48c2014-07-27 23:21:41 -0700108} /* namespace ndn */