From 0a91df7a9cb5002f2ad7e5daedefa4f25a76308c Mon Sep 17 00:00:00 2001
From: Ger van Diepen <diepen@astron.nl>
Date: Tue, 18 Jan 2011 21:09:21 +0000
Subject: [PATCH] bug 1614: Added check argument to putDefValue to speed up
 insert of 60000 sources

---
 CEP/ParmDB/include/ParmDB/ParmDB.h     |  8 +++--
 CEP/ParmDB/include/ParmDB/ParmDBCasa.h |  3 +-
 CEP/ParmDB/src/ParmDBCasa.cc           | 43 ++++++++++++++------------
 CEP/ParmDB/src/SourceDBCasa.cc         |  8 +++--
 4 files changed, 36 insertions(+), 26 deletions(-)

diff --git a/CEP/ParmDB/include/ParmDB/ParmDB.h b/CEP/ParmDB/include/ParmDB/ParmDB.h
index e494353f475..7aa8e43bdb9 100644
--- a/CEP/ParmDB/include/ParmDB/ParmDB.h
+++ b/CEP/ParmDB/include/ParmDB/ParmDB.h
@@ -124,7 +124,8 @@ namespace BBS {
 
     // Put the default value.
     virtual void putDefValue (const string& parmName,
-                              const ParmValueSet& value) = 0;
+                              const ParmValueSet& value,
+                              bool check=true) = 0;
 
     // Delete the default value records for the given parameters.
     virtual void deleteDefValues (const std::string& parmNamePattern) = 0;
@@ -262,8 +263,9 @@ namespace BBS {
       { itsRep->getDefValues (result, parmNamePattern); }
 
     // Put the default value for the given parameter.
-    void putDefValue (const string& parmName, const ParmValueSet& value)
-      { itsRep->putDefValue (parmName, value); }
+    void putDefValue (const string& parmName, const ParmValueSet& value,
+                      bool check=true)
+      { itsRep->putDefValue (parmName, value, check); }
 
     // Delete the default value records for the given parameters.
     void deleteDefValues (const std::string& parmNamePattern)
diff --git a/CEP/ParmDB/include/ParmDB/ParmDBCasa.h b/CEP/ParmDB/include/ParmDB/ParmDBCasa.h
index d258092ac97..9d871483968 100644
--- a/CEP/ParmDB/include/ParmDB/ParmDBCasa.h
+++ b/CEP/ParmDB/include/ParmDB/ParmDBCasa.h
@@ -96,7 +96,8 @@ namespace BBS {
                                const std::string& parmNamePattern);
 
     // Put the default value.
-    virtual void putDefValue (const string& name, const ParmValueSet& value);
+    virtual void putDefValue (const string& name, const ParmValueSet& value,
+                              bool check=true);
 
     // Delete the default value records for the given parameters.
     virtual void deleteDefValues (const std::string& parmNamePattern);
diff --git a/CEP/ParmDB/src/ParmDBCasa.cc b/CEP/ParmDB/src/ParmDBCasa.cc
index ae2f940c250..b45ad5ac92a 100644
--- a/CEP/ParmDB/src/ParmDBCasa.cc
+++ b/CEP/ParmDB/src/ParmDBCasa.cc
@@ -567,33 +567,38 @@ namespace BBS {
     return id;
   }
 
-  void ParmDBCasa::putDefValue (const string& name, const ParmValueSet& pset)
+  void ParmDBCasa::putDefValue (const string& name, const ParmValueSet& pset,
+                                bool check)
   {
     itsTables[2].reopenRW();
     TableLocker locker(itsTables[2], FileLocker::Write);
     const ParmValue& pval = pset.getFirstParmValue();
     // First see if the parameter name exists at all.
     Table& table = itsTables[2];
-    Table sel = table(table.col("NAME") == String(name));
-    if (sel.nrow() == 1) {
-      uint rownr=0;
-      ScalarColumn<int>    typeCol (sel, "FUNKLETTYPE");
-      ArrayColumn<bool>    maskCol (sel, "SOLVABLE");
-      ArrayColumn<double>  valCol  (sel, "VALUES");
-      ScalarColumn<double> pertCol (sel, "PERTURBATION");
-      ScalarColumn<bool>   prelCol (sel, "PERT_REL");
-      typeCol.put (rownr, pset.getType());
-      valCol.put (rownr, pval.getValues());
-      putDefDomain (pset.getScaleDomain(), sel, rownr);
-      if (pset.getSolvableMask().size() > 0  ||  maskCol.isDefined(rownr)) {
-        maskCol.put (rownr, pset.getSolvableMask());
-      }
-      pertCol.put (rownr, pset.getPerturbation());
-      prelCol.put (rownr, pset.getPertRel());
-    } else if (sel.nrow() == 0) {
+    if (!check) {
       putNewDefValue (name, pset);
     } else {
-      ASSERTSTR (false, "Too many default parms with the same name/domain");
+      Table sel = table(table.col("NAME") == String(name));
+      if (sel.nrow() == 1) {
+        uint rownr=0;
+        ScalarColumn<int>    typeCol (sel, "FUNKLETTYPE");
+        ArrayColumn<bool>    maskCol (sel, "SOLVABLE");
+        ArrayColumn<double>  valCol  (sel, "VALUES");
+        ScalarColumn<double> pertCol (sel, "PERTURBATION");
+        ScalarColumn<bool>   prelCol (sel, "PERT_REL");
+        typeCol.put (rownr, pset.getType());
+        valCol.put (rownr, pval.getValues());
+        putDefDomain (pset.getScaleDomain(), sel, rownr);
+        if (pset.getSolvableMask().size() > 0  ||  maskCol.isDefined(rownr)) {
+          maskCol.put (rownr, pset.getSolvableMask());
+        }
+        pertCol.put (rownr, pset.getPerturbation());
+        prelCol.put (rownr, pset.getPertRel());
+      } else if (sel.nrow() == 0) {
+        putNewDefValue (name, pset);
+      } else {
+        ASSERTSTR (false, "Too many default parms with the same name/domain");
+      }
     }
     clearDefFilled();
   }
diff --git a/CEP/ParmDB/src/SourceDBCasa.cc b/CEP/ParmDB/src/SourceDBCasa.cc
index bfe5574b10c..9f50c480e0d 100644
--- a/CEP/ParmDB/src/SourceDBCasa.cc
+++ b/CEP/ParmDB/src/SourceDBCasa.cc
@@ -341,7 +341,7 @@ namespace BBS {
       if (iter->first == "Ra")  foundRa  = true;
       if (iter->first == "Dec") foundDec = true;
       getParmDB().putDefValue (iter->first + ':' + sourceInfo.getName(),
-                               iter->second);
+                               iter->second, false);
     }
     // If Ra or Dec given and not in parameters, put it.
     // Use absolute perturbations for them.
@@ -349,13 +349,15 @@ namespace BBS {
       ParmValue pval(ra);
       getParmDB().putDefValue ("Ra:" + sourceInfo.getName(),
                                ParmValueSet(pval, ParmValue::Scalar,
-                                            1e-6, false));
+                                            1e-6, false),
+                               false);
     }
     if (!foundDec  &&  dec != -1e9) {
       ParmValue pval(dec);
       getParmDB().putDefValue ("Dec:" + sourceInfo.getName(),
                                ParmValueSet(pval, ParmValue::Scalar,
-                                            1e-6, false));
+                                            1e-6, false),
+                               false);
     }
   }
 
-- 
GitLab