diff roundup/backends/back_metakit.py @ 872:bd6211d39328

Saving, running & editing queries.
author Gordon B. McMillan <gmcm@users.sourceforge.net>
date Wed, 17 Jul 2002 12:39:11 +0000
parents 2df32a73eb45
children b9da8729d8ff
line wrap: on
line diff
--- a/roundup/backends/back_metakit.py	Mon Jul 15 22:05:17 2002 +0000
+++ b/roundup/backends/back_metakit.py	Wed Jul 17 12:39:11 2002 +0000
@@ -166,11 +166,11 @@
         return self.__RW == 0
     def getWriteAccess(self):
         if self.journaltag is not None and self.__RW == 0:
-            now = time.time
-            start = now()
+            #now = time.time
+            #start = now()
             self._db = None
             #print "closing the file took %2.2f secs" % (now()-start)
-            start = now()
+            #start = now()
             self._db = metakit.storage(self.dbnm, 1)
             self.__RW = 1
             self.hist = self._db.view('history')
@@ -504,15 +504,18 @@
         # first setkey for this run
         self.keyname = propname
         iv = self.db._db.view('_%s' % self.classname)
-        if self.db.fastopen or iv.structure():
+        if self.db.fastopen and iv.structure():
             return
         # very first setkey ever
+        self.db.getWriteAccess()
+        self.db.dirty = 1
         iv = self.db._db.getas('_%s[k:S,i:I]' % self.classname)
         iv = iv.ordered(1)
         #XXX
 #        print "setkey building index"
         for row in self.getview():
             iv.append(k=getattr(row, propname), i=row.id)
+        self.db.commit()
     def getkey(self):
         return self.keyname
     def lookup(self, keyvalue):
@@ -601,7 +604,10 @@
             if self.ruprops.has_key(key):
                 raise ValueError, "%s is already a property of %s" % (key, self.classname)
         self.ruprops.update(properties)
+        self.db.getWriteAccess()
+        self.db.fastopen = 0
         view = self.__getview()
+        self.db.commit()
     # ---- end of ping's spec
     def filter(self, search_matches, filterspec, sort, group):
         # search_matches is None or a set (dict of {nodeid: {propname:[nodeid,...]}})
@@ -821,10 +827,10 @@
     def __getview(self):
         db = self.db._db
         view = db.view(self.classname)
-        if self.db.fastopen:
+        mkprops = view.structure()
+        if mkprops and self.db.fastopen:
             return view.ordered(1)
         # is the definition the same?
-        mkprops = view.structure()
         for nm, rutyp in self.ruprops.items():
             for mkprop in mkprops:
                 if mkprop.name == nm:
@@ -832,15 +838,16 @@
             else:
                 mkprop = None
             if mkprop is None:
-                #print "%s missing prop %s (%s)" % (self.classname, nm, rutyp.__class__.__name__)
+                print "%s missing prop %s (%s)" % (self.classname, nm, rutyp.__class__.__name__)
                 break
             if _typmap[rutyp.__class__] != mkprop.type:
-                #print "%s - prop %s (%s) has wrong mktyp (%s)" % (self.classname, nm, rutyp.__class__.__name__, mkprop.type)
+                print "%s - prop %s (%s) has wrong mktyp (%s)" % (self.classname, nm, rutyp.__class__.__name__, mkprop.type)
                 break
         else:
             return view.ordered(1)
         # need to create or restructure the mk view
         # id comes first, so MK will order it for us
+        self.db.getWriteAccess()
         self.db.dirty = 1
         s = ["%s[id:I" % self.classname]
         for nm, rutyp in self.ruprops.items():
@@ -849,7 +856,8 @@
             if mktyp == 'V':
                 s[-1] += ('[fid:I]')
         s.append('_isdel:I,activity:I,creation:I,creator:I]')
-        v = db.getas(','.join(s))
+        v = self.db._db.getas(','.join(s))
+        self.db.commit()
         return v.ordered(1)
     def getview(self, RW=0):
         if RW and self.db.isReadOnly():

Roundup Issue Tracker: http://roundup-tracker.org/