This utility program loads a yaml file to a database
# File dbload.rb, line 37 def initialize @opts = get_options case @opts.dbtype when :dbm require 'dbm' when :gdbm require 'gdbm' when :sdbm require 'sdbm' when :sqlite require 'sqlite' require 'storage/sqlitehash' when :sqlite3 require 'sqlite3' require 'storage/sqlite3hash' end @dbtop = 0 @db = {} @count = 0 end
Processes command line arguments
# File dbload.rb, line 61 def get_options # The myopts specified on the command line will be collected in *myopts*. # We set default values here. myopts = OpenStruct.new myopts.ifile = nil myopts.ofile = nil myopts.dbtype = nil opts = OptionParser.new do |opts| opts.banner = "Database Loader #{VERSION}" opts.separator "" opts.separator "Usage: ruby #{$0} [options]" opts.separator "" opts.separator "Options:" opts.on("-i", "--ifile FILE", String, "Select the yaml file to read", " defaults to same as database") {|myopts.ifile|} opts.on("-o", "--ofile FILE", String, "Select the database file to write", " extension determined automatically") {|myopts.ofile|} opts.on("-t", "--type DBTYPE", DATABASES, "Select the database type - required (no default)", " One of: #{DATABASES.join(", ")}", " Example: -t gdbm") {|myopts.dbtype|} opts.on_tail("-h", "--help", "Show this message") do puts opts.help exit end opts.on_tail("-v", "--version", "Show version") do puts "Database Loader #{VERSION}" exit end end opts.parse!(ARGV) raise(OptionParser::MissingArgument.new("-t")) if myopts.dbtype == nil raise(OptionParser::ParseError, "Must specify input file!") if myopts.ifile.nil? myopts.ofile = myopts.ifile.dup if myopts.ofile.nil? myopts.ofile << ".gdbm" if myopts.dbtype == :gdbm myopts.ofile << ".sqlite" if myopts.dbtype == :sqlite myopts.ofile << ".sqlite3" if myopts.dbtype == :sqlite3 myopts.ifile << ".yaml" return myopts rescue OptionParser::ParseError puts "ERROR - #{$!}" puts "For help..." puts " ruby #{$0} --help" exit end
Launches the loader
# File dbload.rb, line 116 def run YAML::load_file(@opts.ifile).each do |o| @dbtop = o.id if o.id > @dbtop @db[o.id]=o @count += 1 end case @opts.dbtype when :sdbm SDBM.open(@opts.ofile, 0666) do |db| @db.each {|k,v| db[k.to_s] = Utility.encode(v)} end when :gdbm GDBM.open(@opts.ofile, 0666) do |db| @db.each {|k,v| db[k.to_s] = Utility.encode(v)} end when :dbm DBM.open(@opts.ofile, 0666) do |db| @db.each {|k,v| db[k.to_s] = Utility.encode(v)} end when :sqlite db = SQLite::Database.open(@opts.ofile) begin db.execute("drop table tmud;") rescue end db.execute("create table tmud (id integer primary key, data text);") @db.each {|k,v| db[k] = Utility.encode(v)} db.close when :sqlite3 db = SQLite3::Database.open(@opts.ofile) begin db.execute("drop table tmud;") rescue Exception end db.execute("create table tmud (id integer primary key, data text);") @db.each {|k,v| db[k] = Utility.encode(v)} db.close end puts "Highest object in use : #{@dbtop}" puts "Count of objects dumped : #{@count}" end