OSDN Git Service

ignore read-open error when no db file is.
authorvisor <visor@users.sourceforge.jp>
Sat, 19 May 2012 08:59:15 +0000 (17:59 +0900)
committervisor <visor@users.sourceforge.jp>
Sat, 19 May 2012 08:59:15 +0000 (17:59 +0900)
modules/ml-db.cc

index 3d32bb4..6f67002 100644 (file)
@@ -43,8 +43,12 @@ void  MLDbBtree::openRead (const ustring& name, bool fxserial) {
 
        db = o;;
        dbPath (name, fxserial, dbpath, lockpath);
-       lock.openReadLock (lockpath.c_str ());
-       o->openRead (dbpath.c_str ());
+       if (lock.openReadLock (lockpath.c_str ())) {
+           o->openRead (dbpath.c_str ());
+       } else {
+           delete db;
+           db = NULL;
+       }
     }
 }
 
@@ -258,7 +262,7 @@ MNode*  ml_db_x_read (MNode* cell, MlEnv* mlenv, MLFunc* mobj) {
     if (arg) 
        throw (uErrorWrongNumber);
 
-    if (obj->db->get (key, val)) {
+    if (obj->db && obj->db->get (key, val)) {
        uiterator  b = val.begin ();
        uiterator  e = val.end ();
        uiterator  it;
@@ -312,7 +316,8 @@ MNode*  ml_db_x_write (MNode* cell, MlEnv* mlenv, MLFunc* mobj) {
            v.append (values[i]);
        }
     }
-    obj->db->put (key, v);
+    if (obj->db)
+       obj->db->put (key, v);
 
     return NULL;
 }
@@ -336,7 +341,8 @@ MNode*  ml_db_x_delete (MNode* cell, MlEnv* mlenv, MLFunc* mobj) {
     if (arg) 
        throw (uErrorWrongNumber);
 
-    obj->db->del (key);
+    if (obj->db)
+       obj->db->del (key);
 
     return NULL;
 }
@@ -456,7 +462,7 @@ MNode*  ml_db_x_read_array (MNode* cell, MlEnv* mlenv, MLFunc* mobj) {
        nextNode (arg);
     }
 
-    if (obj->db->get (key, val))
+    if (obj->db && obj->db->get (key, val))
        ans = true;
     if (s == 0) {
        set_read_vars (val, vars, type, mlenv);
@@ -535,7 +541,8 @@ MNode*  ml_db_x_write_array (MNode* cell, MlEnv* mlenv, MLFunc* mobj) {
            }
        }
     }
-    obj->db->put (key, val);
+    if (obj->db)
+       obj->db->put (key, val);
 
     return NULL;
 }
@@ -574,9 +581,10 @@ MNode*  ml_db_x_select (MNode* cell, MlEnv* mlenv, MLFunc* mobj) {
        nextNode (arg);
     }
 
-    obj->db->initeach ();
+    if (obj->db)
+       obj->db->initeach ();
     n = 0;
-    while (obj->db->each (key, val)) {
+    while (obj->db && obj->db->each (key, val)) {
        MNodeList  ag;
        uiterator  b = val.begin ();
        uiterator  e = val.end ();
@@ -653,7 +661,7 @@ MNode*  ml_temp_read (MNode* cell, MlEnv* mlenv) {
 
     obj.openRead (TempRWDB, true);
 
-    if (obj.db->get (key, val)) {
+    if (obj.db && obj.db->get (key, val)) {
        uiterator  b = val.begin ();
        uiterator  e = val.end ();
        uiterator  it;
@@ -713,7 +721,8 @@ MNode*  ml_temp_write (MNode* cell, MlEnv* mlenv) {
        }
     }
 
-    obj.db->put (key, v);
+    if (obj.db)
+       obj.db->put (key, v);
 
     return NULL;
 }