wait to be verified
diff --git a/src/db/rr-mgr.cpp b/src/db/rr-mgr.cpp
new file mode 100644
index 0000000..51e0e3b
--- /dev/null
+++ b/src/db/rr-mgr.cpp
@@ -0,0 +1,112 @@
+/*
+ * 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 */