myexperiment-hackers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[myexperiment-hackers] [2360] branches/biocat/vendor/plugins/structured_


From: noreply
Subject: [myexperiment-hackers] [2360] branches/biocat/vendor/plugins/structured_data/lib/auto_migrate.rb: added ability to specify indexes in structured data plugin
Date: Wed, 31 Mar 2010 04:59:30 -0400 (EDT)

Revision
2360
Author
dgc
Date
2010-03-31 04:59:30 -0400 (Wed, 31 Mar 2010)

Log Message

added ability to specify indexes in structured data plugin

Modified Paths

Diff

Modified: branches/biocat/vendor/plugins/structured_data/lib/auto_migrate.rb (2359 => 2360)


--- branches/biocat/vendor/plugins/structured_data/lib/auto_migrate.rb	2010-03-31 08:58:53 UTC (rev 2359)
+++ branches/biocat/vendor/plugins/structured_data/lib/auto_migrate.rb	2010-03-31 08:59:30 UTC (rev 2360)
@@ -15,13 +15,14 @@
 
   def self.schema
 
-    tables = {}
-    assocs = []
+    tables  = {}
+    assocs  = []
+    indexes = {}
 
     # load the base schema
 
     if File.exists?(SCHEMA)
-      tables, assocs = merge_schema(File.read(SCHEMA), tables, assocs) 
+      tables, assocs, indexes = merge_schema(File.read(SCHEMA), tables, assocs, indexes) 
     end
 
     # merge files from the schema directory
@@ -30,12 +31,12 @@
 
       Dir.new(SCHEMA_D).each do |entry|
         if entry.ends_with?(".xml")
-          tables, assocs = merge_schema(File.read("#{SCHEMA_D}/#{entry}"), tables, assocs)
+          tables, assocs, indexes = merge_schema(File.read("#{SCHEMA_D}/#{entry}"), tables, assocs, indexes)
         end
       end
     end
 
-    [tables, assocs]
+    [tables, assocs, indexes]
   end
 
   def self.migrate
@@ -57,7 +58,7 @@
        
     # get the schema
 
-    new_tables, assocs = schema
+    new_tables, assocs, indexes = schema
 
     # create and drop tables as appropriate
 
@@ -72,6 +73,7 @@
     end
 
     # adjust the columns in each table
+
     new_tables.keys.each do |table_name|
 
       # get the list of existing columns
@@ -93,10 +95,37 @@
       (new_columns - old_columns).each do |column_name|
         conn.add_column(table_name, column_name, new_tables[table_name][column_name]["type"].to_sym)
       end
+
+      # get the list of existing indexes
+
+      old_indexes = conn.indexes(table_name).map do |index| [index.columns] end
+
+      # determine the required indexes
+
+      new_indexes = indexes[table_name]
+
+      # remove indexes
+
+      (old_indexes - new_indexes).each do |to_remove|
+        conn.indexes(table_name).select do |index| to_remove == [index.columns] end.each do |index|
+          conn.remove_index(table_name, index.columns)
+        end
+      end
+
+      # add indexes
+
+      (new_indexes - old_indexes).each do |index|
+        conn.add_index(table_name, index[0])
+      end
     end
 
-    # Now that the schema has changed, update all the models
+    # adjust the indexes in each table
 
+    new_tables.keys.each do |table_name|
+    end
+
+    # now that the schema has changed, load the models
+
     load_models(new_tables.keys)
   end
 
@@ -114,7 +143,7 @@
 
 private
 
-  def self.merge_schema(schema, tables = {}, assocs = [])
+  def self.merge_schema(schema, tables = {}, assocs = [], indexes =  {})
 
     root = LibXML::XML::Parser.string(schema).parse.root
 
@@ -148,7 +177,16 @@
       end
     end
 
-    [tables, assocs]
+    root.find('/schema/table').each do |table|
+
+      indexes[table['name']] ||= []
+
+      table.find('index').each do |index|
+        indexes[table['name']].push([index.find('column').map do |column| column['name'] end])
+      end
+    end
+
+    [tables, assocs, indexes]
   end
 
   def self.load_models(tables)

reply via email to

[Prev in Thread] Current Thread [Next in Thread]