Skip to content

Instantly share code, notes, and snippets.

@kieran
Created June 5, 2010 03:34
Show Gist options
  • Save kieran/426270 to your computer and use it in GitHub Desktop.
Save kieran/426270 to your computer and use it in GitHub Desktop.
require 'rubygems'
require 'dm-core'
Store.auto_upgrade!
Product.auto_upgrade!
Inventory.auto_upgrade!
Dir.glob("sqlite/*.db").reverse.each do |db|
DataMapper.setup(:old, "sqlite3://#{Dir.pwd}/#{db}")
OldStore.all.each{|s|s.moveit}
OldProduct.all.each{|p|p.moveit}
i=0
total = repository(:old).adapter.select('select count(*) from store_product_inventories;')[0].to_i
until(i>total) do
qs = "INSERT INTO inventories ( `store_id`, `product_id`, `quantity`, `date` ) VALUES "
OldInventory.all(:limit=>10000,:offset=>i).each do |item|
qs << "('#{item.store_no}','#{item.product_no}','#{item.quantity}','#{item.updated_on}'),"
end
repository.adapter.execute(qs.chop<<';')
i=i+10000
puts "#{((i.to_f/total.to_f)*100).to_i} % done"
qs = nil
end
end
# new models
DataMapper.setup(:default, 'mysql://root@localhost/lcbo')
class Store
include DataMapper::Resource
property :id, Serial
property :latitude, Float
property :longitude, Float
property :name, String, :length=>50
property :address_line_1, String, :length=>40
property :address_line_2, String, :length=>40
property :postal_code, String, :length=>6
property :city, String, :length=>25
property :telephone, String, :length=>14
property :fax, String, :length=>14
property :inventory_count, Integer
property :products_count, Integer
property :sunday_open, Integer
property :sunday_close, Integer
property :monday_open, Integer
property :monday_close, Integer
property :tuesday_open, Integer
property :tuesday_close, Integer
property :wednesday_open, Integer
property :wednesday_close, Integer
property :thursday_open, Integer
property :thursday_close, Integer
property :friday_open, Integer
property :friday_close, Integer
property :saturday_open, Integer
property :saturday_close, Integer
def store_no=(val) self.attribute_set(:id,val); end
end
class Product
include DataMapper::Resource
property :id, Serial
property :price_in_cents, Integer
property :name, String, :length=>100
property :stock_type, String, :length=>10
property :primary_category, String, :length=>32
property :secondary_category, String, :length=>32
property :origin, String, :length=>60
property :package, String, :length=>32
property :alcohol_content, Integer
property :sugar_content, String, :length=>5
property :producer_name, String, :length=>80
property :inventory_count, Integer
def product_no=(val) self.attribute_set(:id,val); end
end
class Inventory
include DataMapper::Resource
property :id, Serial
property :store_id, Integer, :index=>true
property :product_id, Integer, :index=>true
property :quantity, Integer
property :date, Date, :index=>true
belongs_to :store
belongs_to :product
def product_no=(val) self.attribute_set(:product_id,val); end
def store_no=(val) self.attribute_set(:store_id,val); end
def updated_on=(val) self.attribute_set(:date,val); end
end
# old models
class OldStore
include DataMapper::Resource
def self.default_repository_name
:old
end
storage_names[:old] = 'stores'
property :store_no, Integer, :key=>true
property :latitude, Float
property :longitude, Float
property :name, String, :length=>50
property :address_line_1, String, :length=>40
property :address_line_2, String, :length=>40
property :postal_code, String, :length=>6
property :city, String, :length=>25
property :telephone, String, :length=>14
property :fax, String, :length=>14
property :inventory_count, Integer
property :products_count, Integer
property :sunday_open, Integer
property :sunday_close, Integer
property :monday_open, Integer
property :monday_close, Integer
property :tuesday_open, Integer
property :tuesday_close, Integer
property :wednesday_open, Integer
property :wednesday_close, Integer
property :thursday_open, Integer
property :thursday_close, Integer
property :friday_open, Integer
property :friday_close, Integer
property :saturday_open, Integer
property :saturday_close, Integer
def moveit
Store.create(self.attributes) unless Store.get(self.store_no)
end
end
class OldProduct
include DataMapper::Resource
def self.default_repository_name
:old
end
storage_names[:old] = 'products'
property :product_no, Integer, :key=>true
property :price_in_cents, Integer
property :name, String, :length=>100
property :stock_type, String, :length=>10
property :primary_category, String, :length=>32
property :secondary_category, String, :length=>32
property :origin, String, :length=>60
property :package, String, :length=>32
property :alcohol_content, Integer
property :sugar_content, String, :length=>3
property :producer_name, String, :length=>80
property :inventory_count, Integer
def moveit
Product.create(self.attributes) unless Product.get(self.product_no)
end
end
class OldInventory
include DataMapper::Resource
def self.default_repository_name
:old
end
storage_names[:old] = 'store_product_inventories'
property :store_no, Integer, :key=>true
property :product_no, Integer, :key=>true
property :quantity, Integer
property :updated_on, String
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment