--- /dev/null
+#require 'active_record/connection_adapters/abstract/schema_statements'
+
+module ::ActiveRecord::ConnectionAdapters::SchemaStatements
+ alias :old_initialize_schema_information :initialize_schema_information
+ def initialize_schema_information
+ # create the normal schema stuff
+ old_initialize_schema_information
+
+ # create the engines schema stuff.
+ begin
+ execute "CREATE TABLE #{engine_schema_info_table_name} (engine_name #{type_to_sql(:string)}, version #{type_to_sql(:integer)})"
+ rescue ActiveRecord::StatementInvalid
+ # Schema has been initialized
+ end
+ end
+
+ def engine_schema_info_table_name
+ ActiveRecord::Base.wrapped_table_name "engine_schema_info"
+ end
+end
+
+
+require 'breakpoint'
+module ::Engines
+ class EngineMigrator < ActiveRecord::Migrator
+
+ # We need to be able to set the 'current' engine being migrated.
+ cattr_accessor :current_engine
+
+ class << self
+
+ def schema_info_table_name
+ ActiveRecord::Base.wrapped_table_name "engine_schema_info"
+ end
+
+ def current_version
+ result = ActiveRecord::Base.connection.select_one("SELECT version FROM #{schema_info_table_name} WHERE engine_name = '#{current_engine.name}'")
+ if result
+ result["version"].to_i
+ else
+ # There probably isn't an entry for this engine in the migration info table.
+ # We need to create that entry, and set the version to 0
+ ActiveRecord::Base.connection.execute("INSERT INTO #{schema_info_table_name} (version, engine_name) VALUES (0,'#{current_engine.name}')")
+ 0
+ end
+ end
+ end
+
+ def set_schema_version(version)
+ ActiveRecord::Base.connection.update("UPDATE #{self.class.schema_info_table_name} SET version = #{down? ? version.to_i - 1 : version.to_i} WHERE engine_name = '#{self.current_engine.name}'")
+ end
+ end
+end