From: Jim Cain Date: 2007-04-03T00:44:30+09:00 Subject: Re: Using transactions with secondary indexes in bdb OK, I figured out that a lot of my previous code was wrong, not even considering the transactions, so I removed the transactional stuff and got down to this: require 'bdb' BDB::Hash.open('models.db', nil, BDB::CREATE | BDB::TRUNCATE) {} BDB::Hash.open('makes.db', nil, BDB::CREATE | BDB::TRUNCATE, :set_flags => BDB::DUP | BDB::DUPSORT) {} BDB::Hash.open('models.db', nil, BDB::CREATE) do |models| BDB::Hash.open('makes.db', nil, BDB::CREATE, :set_flags => BDB::DUP | BDB::DUPSORT) do |makes| models.associate(makes) { |sdb, key, value| value } puts '===== Before' puts '----- models' models.each { |key, value| puts "#{key} = #{value}" } puts '----- makes' makes.each_primary { |skey, pkey, pvalue| p [skey, pkey, pvalue] } models['Civic'] = 'Honda' models['Accord'] = 'Honda' models['S2000'] = 'Honda' models['Camry'] = 'Toyota' models['Solara'] = 'Toyota' puts '===== After' puts '----- models' models.each { |key, value| puts "#{key} = #{value}" } puts '----- makes' makes.each_primary { |skey, pkey, pvalue| p [skey, pkey, pvalue] } end end And here is the output, which looks right to me: ===== Before ----- models ----- makes ===== After ----- models Civic = Honda Accord = Honda Camry = Toyota Solara = Toyota S2000 = Honda ----- makes ["Honda", "Accord", "Honda"] ["Honda", "Civic", "Honda"] ["Honda", "S2000", "Honda"] ["Toyota", "Camry", "Toyota"] ["Toyota", "Solara", "Toyota"] Now I just have to figure out the transactional part. I'll follow up on the list once I do. Cheers, Jim