If you have a suggestion for the replacing the line of code, I'll test it. Regular expressions aren't my forte.
On Jan 5, 4:07 pm, Ryan Bigg <[email protected]> wrote: > [:][c][o][n][d][i][t][i][o][n][s].[=][>]. > > Er, what? Why not just match for :conditions? > ----- > Ryan Bigg > Freelancerhttp://frozenplague.net > > On 06/01/2009, at 10:03 AM, Ben wrote: > > > > > If you are looking to improve your database performance, you might > > want to index your database, esspecially if it is large. Here are > > some rake tasks that will look at your code and active record and > > automatically add indexes to your devel db. > > > These two tasks are fairly rough drafts. I am open to any input that > > would expand on what I have here. > > > lib/tasks/db_indexing.rake > > (then run rake db_indexing:index_fks_in_model and rake > > db_indexing:index_sql_calls_in_app ) > > ------ > > > require 'ActiveRecord' > > require(File.join(RAILS_ROOT, 'config', 'environment')) > > > namespace :db_indexing do > > desc "This task will search text files for rails queries and, > > checking for duplicates, generate sql that properly indexes these > > commands" > > task :index_fks_in_model do > > connection = ActiveRecord::Base.connection > > connection.tables.each do |table| > > begin > > table_columns = eval(table.singularize.capitalize + > > ".column_names") > > table_columns.each do |column_string| > > if column_string.include?('_id') > > connection.execute("CREATE INDEX " + table + "_" + > > column_string + "_index" + "ON" + "#{table}(#{column_string});") > > end > > end > > rescue > > end > > end > > puts "Task completed" > > end > > > desc "This task will iterate through the objects in your model and > > find out which columns end with _id and generate an sql commands to > > index these columns" > > task :index_sql_calls_in_app do > > connection = ActiveRecord::Base.connection > > controller_files = File.join("**", "*_controller.rb") > > helper_files = File.join("**", "*_helper.rb") > > no_of_calls = 0 > > array_of_files = Dir.glob(controller_files).concat(Dir.glob > > (helper_files)) > > array_of_files.each do |file| > > temp_f = File.new(file) > > temp_f.each do |line| > > if line.to_s.include?(":conditions") > > array_of_columns_to_index = [] > > critical_string = line.to_s.match('([:][c][o][n][d][i][t][i] > > [o][n][s].[=][>].)\[.+\]')[0] if line.to_s.match('([:][c][o][n][d][i] > > [t][i][o][n][s].[=][>].)\[.+\]') > > table = line.to_s.match('=.+')[0] > > table = table[1, table.index('.') - 1] > > table = table.chomp.strip > > temp_string = '' > > table.each_char do |char| > > if char.downcase.to_s == char.to_s > > temp_string = temp_string + char > > else > > temp_string = temp_string + '_' + char.downcase > > end > > end > > table = temp_string[1, temp_string.length] > > table = table.chomp.strip.downcase.pluralize > > cs2 = critical_string.to_s.match('\[.+\]')[0] if > > critical_string.to_s.match('\[.+\]') > > if cs2 > > cs3 = cs2[1, cs2.index(',') - 1] if cs2.index(',') > > else > > end > > if cs3 > > cs3 = cs3[1,cs3.length - 2] > > cs3.to_s.each(' ') do |tstr| > > tstr = tstr.chomp.strip > > tstr = tstr.downcase > > if !tstr.match('\W') && tstr != 'and' && tstr != 'or' && > > tstr != 'is' && tstr != '1' && tstr != 'null' && tstr != '0' && tstr ! > > = 'id' > > array_of_columns_to_index << tstr > > end > > end > > end > > index_name = table.to_s + "_" > > index_string2 = '' > > if array_of_columns_to_index.length > 0 > > array_of_columns_to_index.each do |column_to_index| > > index_name = index_name + column_to_index + "_" > > index_string2 = index_string2 + column_to_index + ',' > > end > > index_string2 = index_string2[0,index_string2.length - 1] > > index_name = index_name + 'index' > > sql_command = "CREATE INDEX " + index_name + " ON " + > > table.to_s + "(" + index_string2 + ")" + ";" > > > begin > > puts sql_command > > connection.execute(sql_command) > > rescue StandardError =>e > > puts "ERROR" > > # if !e.clean_message.to_s.include?("42000") > > puts e.clean_message.to_s > > puts e.backtrace > > # end > > end > > end > > end > > > end > > end > > puts "Task completed" > > end > > > end > > > ------ --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---

