diff --git a/src/util/oddbapp.rb b/src/util/oddbapp.rb index bfb9fa0..5b9ce46 100644 --- a/src/util/oddbapp.rb +++ b/src/util/oddbapp.rb @@ -1,7 +1,14 @@ #!/usr/bin/env ruby +# encoding: utf-8 # OddbApp -- oddb.org -- 10.10.2011 -- mhatakeyama@ywesee.com # OddbApp -- oddb.org -- 21.06.2010 -- hwyss@ywesee.com +require 'pp' +class NilClass + def odba_store + end +end + require 'odba' require 'odba/index_definition' require 'odba/drbwrapper' @@ -1776,9 +1783,13 @@ module ODDB _migrate_to_utf8([object], {}, iconv) end def migrate_to_utf8 + + @migrate_mutex = Mutex.new + iconv = ::Iconv.new 'UTF-8//TRANSLIT//IGNORE', 'ISO-8859-1' ODBA.cache.retire_age = 5 - ODBA.cache.cleaner_step = 100000 +# ODBA.cache.cleaner_step = 100000 + ODBA.cache.cleaner_step = 1 system = @system.odba_instance table = { system.odba_id => true, :serialized => {} } table.store :finalizer, proc { |object_id| @@ -1794,7 +1805,11 @@ module ODDB end end def _migrate_to_utf8 queue, table, iconv, opts={} + + @migrate_mutex ||= Mutex.new + obj = queue.shift + if obj.is_a?(Numeric) begin obj = ODBA.cache.fetch obj @@ -1804,19 +1819,40 @@ module ODDB else obj = obj.odba_instance end - _migrate_obj_to_utf8 obj, queue, table, iconv, opts - obj.odba_store unless obj.odba_unsaved? + #_migrate_obj_to_utf8 obj, queue, table, iconv, opts + obj = _migrate_obj_to_utf8 obj, queue, table, iconv, opts + +# save object here + @migrate_mutex.synchronize { + if obj + @start_time ||= Time.now + @count ||= 0 + obj.odba_store unless obj.odba_unsaved? + print "saved: ", @count+=1, "\todba_id:%15s" % obj.odba_id, "\tclass:%20s" % obj.class.to_s, "\t%.2f" % ((Time.now - @start_time)/3600), " [h]\n" + end + } end def _migrate_obj_to_utf8 obj, queue, table, iconv, opts={} - obj.instance_variables.each do |name| + #obj.instance_variables.each do |name| + obj.instance_variables.sort.each do |name| child = obj.instance_variable_get name + begin if child.respond_to?(:odba_unsaved?) && !child.odba_unsaved? \ && obj.respond_to?(:odba_serializables) \ && obj.odba_serializables.include?(name) child.instance_variable_set '@odba_persistent', nil end + +# recursive child = _migrate_child_to_utf8 child, queue, table, iconv, opts - obj.instance_variable_set name, child + +# save children (instance_variables) + #obj.instance_variable_set name, child + obj.instance_variable_set name, child if child + rescue => e + p e + end + end if obj.is_a?(Array) obj.collect! do |child| @@ -1831,6 +1867,7 @@ module ODDB obj.default = _migrate_child_to_utf8 obj.default, queue, table, iconv, opts end end + obj end def _migrate_child_to_utf8 child, queue, table, iconv, opts={} @@ -1849,7 +1886,8 @@ module ODDB end end when String - child = iconv.iconv(child) +# child = iconv.iconv(child) + child.force_encoding('utf-8') when ODDB::Text::Section, ODDB::Text::Paragraph, ODDB::PatinfoDocument, ODDB::PatinfoDocument2001, ODDB::Text::Table, ODDB::Text::Cell, ODDB::Analysis::Permission, ODDB::Interaction::AbstractLink,