update.
[chise/ruby.git] / chise / libchise_r.rb
index f6a0e45..dea7d89 100755 (executable)
@@ -73,19 +73,9 @@ module CHISE
 
   class AttributeTable
     def initialize(dir, cat, keytype, name, amask, mmask)
-      @name = name
-
-      #qp name
-      dbdir  = dir + cat + keytype
-      path = dbdir + name.path.escape.escape_win_filename
-
-      #TODO: should make dir.
-
-      if amask == BDB::RDONLY
-       raise unless FileTest.exist?(path.to_s)
-      end
-      #qp path.to_s
-      @db = BDB::Hash.open(path.to_s, nil, amask)
+      @dir, @cat, @keytype, @name, @amask, @mmask = dir, cat, keytype, name, amask, mmask
+      @db = nil
+      setup_db
       at_exit {
        close
       }
@@ -96,16 +86,29 @@ module CHISE
       begin
        @db.sync
        @db.close
-       @db = nil
+       # @db = nil
       rescue => e
        p e
       end
     end
 
-    def get(k)    @db.get(k);    end
-    def put(k, v) @db.put(k, v); end
+    def get(k)    setup_db; @db.get(k);    end
+    def put(k, v) setup_db; @db.put(k, v); end
+
+    def each() setup_db; @db.each {|k, v| yield(k, v) } end
 
-    def each() @db.each {|k, v| yield(k, v) } end
+    private
+    def setup_db
+      return if @db
+      dbdir  = @dir + @cat + @keytype
+      path = dbdir + @name.path.escape.escape_win_filename
+      #TODO: should make dir.
+      if @amask == BDB::RDONLY
+       raise unless FileTest.exist?(path.to_s)
+      end
+      #qp path.to_s
+      @db = BDB::Hash.open(path.to_s, nil, @amask)
+    end
   end
 
   module TableAccessModule