Skip to content

Commit

Permalink
added mysql2 support
Browse files Browse the repository at this point in the history
  • Loading branch information
Jonah Bloch-Johnson committed Oct 5, 2010
1 parent 4334ecf commit d520297
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 46 deletions.
52 changes: 29 additions & 23 deletions lib/crewait.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,16 @@ def self.for(model, hash)
# if this class is new, create a new hash to receive it
@@hash_of_hashes[model] ||= {}
@@hash_of_hashes[model].respectively_insert(hash)
hash[:id] = @@hash_of_next_inserts[model] + @@hash_of_hashes[model].inner_length - 1
# add dummy methods
fake_id = @@hash_of_next_inserts[model] + @@hash_of_hashes[model].inner_length - 1
eigenclass = class << hash; self; end
eigenclass.class_eval {
define_method(:id) { fake_id }
hash.each do |key, value|
define_method(key) { value }
# define_method(key.to_s + '=') { set_value(fake_id, )}
end
}
if syntactic_sugar
eigenclass = class << hash; self; end
eigenclass.class_eval {
hash.each do |key, value|
define_method(key) { value }
# define_method(key.to_s + '=') { set_value(fake_id, )}
end
}
hash
end

Expand All @@ -39,25 +39,31 @@ def self.go!
module BaseMethods
def next_insert_id
connection = ActiveRecord::Base.connection
database = connection.current_database
adapter = connection.adapter_name
database, adapter = connection.current_database, connection.adapter_name
sql = case adapter.downcase
when postgresql
"SELECT nextval('#{self.table_name}_id_seq')"
when /mysql/
"SELECT auto_increment FROM information_schema.tables WHERE table_name='#{self.table_name}' AND table_schema ='#{database}'"
else
raise "your database/adapter (#{adapter}) is not supported by crewait! want to write a patch?"
end
results = ActiveRecord::Base.connection.execute(sql)
case adapter.downcase
when 'postgresql' then
ActiveRecord::Base.connection.execute("SELECT nextval('#{self.table_name}_id_seq')")[0]["nextval"].to_i
when 'mysql' then
ActiveRecord::Base.connection.execute( "
SELECT auto_increment
FROM information_schema.tables
WHERE table_name='#{self.table_name}' AND
table_schema ='#{database}'
" ).fetch_hash['auto_increment'].to_i
else
raise "your database is not supported by crewait! want to write a patch?"
when 'postgresql'
results[0]["nextval"].to_i
when 'mysql'
results.fetch_hash['auto_increment'].to_i
when 'mysql2'
results.map {|x| x[0]}[0].to_i
else
raise "your database/adapter is not supported by crewait! want to write a patch?"
end
end

# additional options: :before_validation; if it's explicitly set to false, then
def crewait(hash)
stay_a_hash = hash.delete(:stay_a_hash)
perform_before_validation_callback = hash.delete(:before_validation)
unless stay_a_hash
Crewait.for(self, hash)
else
Expand Down
52 changes: 29 additions & 23 deletions pkg/crewait-0.1.6/lib/crewait.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,16 @@ def self.for(model, hash)
# if this class is new, create a new hash to receive it
@@hash_of_hashes[model] ||= {}
@@hash_of_hashes[model].respectively_insert(hash)
hash[:id] = @@hash_of_next_inserts[model] + @@hash_of_hashes[model].inner_length - 1
# add dummy methods
fake_id = @@hash_of_next_inserts[model] + @@hash_of_hashes[model].inner_length - 1
eigenclass = class << hash; self; end
eigenclass.class_eval {
define_method(:id) { fake_id }
hash.each do |key, value|
define_method(key) { value }
# define_method(key.to_s + '=') { set_value(fake_id, )}
end
}
if syntactic_sugar
eigenclass = class << hash; self; end
eigenclass.class_eval {
hash.each do |key, value|
define_method(key) { value }
# define_method(key.to_s + '=') { set_value(fake_id, )}
end
}
hash
end

Expand All @@ -39,25 +39,31 @@ def self.go!
module BaseMethods
def next_insert_id
connection = ActiveRecord::Base.connection
database = connection.current_database
adapter = connection.adapter_name
database, adapter = connection.current_database, connection.adapter_name
sql = case adapter.downcase
when postgresql
"SELECT nextval('#{self.table_name}_id_seq')"
when /mysql/
"SELECT auto_increment FROM information_schema.tables WHERE table_name='#{self.table_name}' AND table_schema ='#{database}'"
else
raise "your database/adapter (#{adapter}) is not supported by crewait! want to write a patch?"
end
results = ActiveRecord::Base.connection.execute(sql)
case adapter.downcase
when 'postgresql' then
ActiveRecord::Base.connection.execute("SELECT nextval('#{self.table_name}_id_seq')")[0]["nextval"].to_i
when 'mysql' then
ActiveRecord::Base.connection.execute( "
SELECT auto_increment
FROM information_schema.tables
WHERE table_name='#{self.table_name}' AND
table_schema ='#{database}'
" ).fetch_hash['auto_increment'].to_i
else
raise "your database is not supported by crewait! want to write a patch?"
when 'postgresql'
results[0]["nextval"].to_i
when 'mysql'
results.fetch_hash['auto_increment'].to_i
when 'mysql2'
results.map {|x| x[0]}[0].to_i
else
raise "your database/adapter is not supported by crewait! want to write a patch?"
end
end

# additional options: :before_validation; if it's explicitly set to false, then
def crewait(hash)
stay_a_hash = hash.delete(:stay_a_hash)
perform_before_validation_callback = hash.delete(:before_validation)
unless stay_a_hash
Crewait.for(self, hash)
else
Expand Down

0 comments on commit d520297

Please sign in to comment.