[svn] commit: r1148 - in /trunk/src/lib/auth: data_source_sqlite3.cc data_source_sqlite3.h

BIND 10 source code commits bind10-changes at lists.isc.org
Sat Mar 6 07:56:10 UTC 2010


Author: jinmei
Date: Sat Mar  6 07:56:09 2010
New Revision: 1148

Log:
- allow the Sqlite3 data source to init itself with a non default DB file
- fixed a TTL setting bug

Modified:
    trunk/src/lib/auth/data_source_sqlite3.cc
    trunk/src/lib/auth/data_source_sqlite3.h

Modified: trunk/src/lib/auth/data_source_sqlite3.cc
==============================================================================
--- trunk/src/lib/auth/data_source_sqlite3.cc (original)
+++ trunk/src/lib/auth/data_source_sqlite3.cc Sat Mar  6 07:56:09 2010
@@ -32,6 +32,12 @@
 
 namespace isc {
 namespace auth {
+
+namespace {
+// Note: this cannot be std::string to avoid
+// "static initialization order fiasco".
+static const char* DEFAULT_DB_FILE = "/tmp/zone.sqlite3";
+}
 
 //
 //  Prepare a statement.  Can call release() or sqlite3_finalize()
@@ -142,8 +148,6 @@
     }
   
     // loop
-    int target_ttl = -1;
-    int sig_ttl = -1;
     int rows = 0;
     RRsetPtr rrset;
     bool any = (rdtype == RRType::ANY());
@@ -184,16 +188,15 @@
         }
 
         if (!target[rt]) {
-            rrset = RRsetPtr(new RRset(name, RRClass::IN(), rt, RRTTL(3600)));
+            rrset = RRsetPtr(new RRset(name, RRClass::IN(), rt, RRTTL(ttl)));
             target.addRRset(rrset);
         }
 
         if (!sigtype && RRType(type) == rrset->getType()) {
             rrset->addRdata(createRdata(RRType(type), RRClass::IN(), rdata));
-            if (target_ttl == -1 || target_ttl > ttl) {
-                target_ttl = ttl;
+            if (ttl > rrset->getTTL().getValue()) {
+                rrset->setTTL(RRTTL(ttl));
             }
-            rrset->setTTL(RRTTL(target_ttl));
         } else if (sigtype && RRType(sigtype) == rrset->getType()) {
             RdataPtr rrsig = createRdata(RRType::RRSIG(), RRClass::IN(), rdata);
             if (rrset->getRRsig()) {
@@ -201,17 +204,16 @@
             } else {
                 RRsetPtr sigs = RRsetPtr(new RRset(name, RRClass::IN(),
                                                    RRType::RRSIG(),
-                                                   RRTTL(3600)));
+                                                   RRTTL(ttl)));
                 sigs->addRdata(rrsig);
                 rrset->addRRsig(sigs);
             }
 
-            if (sig_ttl == -1 || sig_ttl > ttl) {
-                sig_ttl = ttl;
+            if (ttl > rrset->getRRsig()->getTTL().getValue()) {
+                rrset->getRRsig()->setTTL(RRTTL(ttl));
             }
-            rrset->getRRsig()->setTTL(RRTTL(sig_ttl));
-        }
-        
+        }
+
         rc = sqlite3_step(query);
     }
 
@@ -464,11 +466,16 @@
 }
 
 DataSrc::Result
+Sqlite3DataSrc::init(const string& dbfile) {
+    open(dbfile);
+    cerr << "Schema version: " << getVersion() << endl;
+
+    return (SUCCESS);
+}
+
+DataSrc::Result
 Sqlite3DataSrc::init() {
-    open("/tmp/zone.sqlite3");
-    cerr << "Schema version: " << getVersion() << endl;
-
-    return (SUCCESS);
+    return (init(DEFAULT_DB_FILE));
 }
 
 void

Modified: trunk/src/lib/auth/data_source_sqlite3.h
==============================================================================
--- trunk/src/lib/auth/data_source_sqlite3.h (original)
+++ trunk/src/lib/auth/data_source_sqlite3.h Sat Mar  6 07:56:09 2010
@@ -95,6 +95,7 @@
                              isc::dns::RRsetList& target) const;
 
     Result init();
+    Result init(const std::string& dbfile);
     Result close();
 
 private:




More information about the bind10-changes mailing list