diff --git a/db/migrate/20101201000002_validate_migration_integrity.rb b/db/migrate/20101201000003_validate_migration_integrity.rb similarity index 97% rename from db/migrate/20101201000002_validate_migration_integrity.rb rename to db/migrate/20101201000003_validate_migration_integrity.rb index 18a6295d766..949a28f9f7e 100644 --- a/db/migrate/20101201000002_validate_migration_integrity.rb +++ b/db/migrate/20101201000003_validate_migration_integrity.rb @@ -28,7 +28,7 @@ class ValidateMigrationIntegrity < ActiveRecord::Migration[4.2] def self.up initial_migration_version = "20101210192618" - last_squashed_migration_version = "20110606160200" + last_squashed_migration_version = "20110817173455" initial_migration_has_run = ActiveRecord::SchemaMigration.where(version: initial_migration_version).exists? last_squashed_migration_has_run = ActiveRecord::SchemaMigration.where(version: last_squashed_migration_version).exists? diff --git a/db/migrate/20101210192618_init_canvas_db.rb b/db/migrate/20101210192618_init_canvas_db.rb index c17ebd2894f..d0187b06fd5 100644 --- a/db/migrate/20101210192618_init_canvas_db.rb +++ b/db/migrate/20101210192618_init_canvas_db.rb @@ -133,8 +133,8 @@ class InitCanvasDb < ActiveRecord::Migration[4.2] t.boolean "require_authorization_code" t.string "default_time_zone" t.string "external_status", :default => "active" - t.integer "storage_quota" - t.integer "default_storage_quota" + t.integer "storage_quota", :limit => 8 + t.integer "default_storage_quota", :limit => 8 t.boolean "enable_user_notes", :default => false t.string "allowed_services" t.text "turnitin_pledge" @@ -148,6 +148,7 @@ class InitCanvasDb < ActiveRecord::Migration[4.2] t.text "settings" t.string "sis_name" t.string "uuid" + t.string "default_locale" end add_index "accounts", ["id", "type"], :name => "index_accounts_on_id_and_type" @@ -157,6 +158,21 @@ class InitCanvasDb < ActiveRecord::Migration[4.2] add_index "accounts", ["sis_source_id"], :name => "index_accounts_on_sis_source_id" add_index "accounts", ["type"], :name => "index_accounts_on_type" + create_table :alerts do |t| + t.integer :context_id, :limit => 8 + t.string :context_type + t.text :recipients + t.integer :repetition + + t.timestamps null: true + end + + create_table :alert_criteria do |t| + t.integer :alert_id, :limit => 8 + t.string :criterion_type + t.float :threshold + end + create_table "assessment_question_bank_users", :force => true do |t| t.integer "assessment_question_bank_id", :limit => 8 t.integer "user_id", :limit => 8 @@ -648,6 +664,8 @@ class InitCanvasDb < ActiveRecord::Migration[4.2] create_table "conversations" do |t| t.string "private_hash" # for quick lookups so we know whether or not we need to create a new one + t.boolean "has_attachments", :default => false, :null => false + t.boolean "has_media_objects", :default => false, :null => false end add_index "conversations", ["private_hash"], :unique => true @@ -658,6 +676,10 @@ class InitCanvasDb < ActiveRecord::Migration[4.2] t.boolean "subscribed", :default => true t.string "workflow_state" t.datetime "last_authored_at" + t.boolean "has_attachments", :default => false, :null => false + t.boolean "has_media_objects", :default => false, :null => false + t.integer "message_count", :default => 0 + t.string "label" end add_index "conversation_participants", ["conversation_id"] add_index "conversation_participants", ["user_id", "last_message_at"] @@ -668,6 +690,10 @@ class InitCanvasDb < ActiveRecord::Migration[4.2] t.datetime "created_at" t.boolean "generated" t.text "body" + t.text "forwarded_message_ids" + t.string "media_comment_id" + t.string "media_comment_type" + t.integer "context_message_id", :limit => 8 end add_index "conversation_messages", ["conversation_id", "created_at"] @@ -675,6 +701,7 @@ class InitCanvasDb < ActiveRecord::Migration[4.2] t.integer "conversation_message_id", :limit => 8 t.integer "conversation_participant_id", :limit => 8 end + add_index :conversation_message_participants, [:conversation_participant_id, :conversation_message_id], :name => :index_cmp_on_cpi_and_cmi create_table "course_account_associations", :force => true do |t| t.integer "course_id", :limit => 8 @@ -724,6 +751,7 @@ class InitCanvasDb < ActiveRecord::Migration[4.2] t.boolean "restrict_enrollments_to_section_dates" t.integer "account_id", :limit => 8 t.integer "nonxlist_course_id", :limit => 8 + t.boolean "sticky_xlist" end add_index "course_sections", ["course_id"], :name => "index_course_sections_on_course_id" @@ -766,7 +794,7 @@ class InitCanvasDb < ActiveRecord::Migration[4.2] t.string "sis_batch_id" t.boolean "show_all_discussion_entries" t.boolean "open_enrollment" - t.integer "storage_quota" + t.integer "storage_quota", :limit => 8 t.text "tab_configuration" t.boolean "allow_wiki_comments" t.text "turnitin_comments" @@ -777,6 +805,8 @@ class InitCanvasDb < ActiveRecord::Migration[4.2] t.string "sis_course_code" t.boolean "restrict_enrollments_to_course_dates" t.integer "template_course_id", :limit => 8 + t.string "locale" + t.text "settings" end add_index "courses", ["abstract_course_id"], :name => "index_courses_on_abstract_course_id" @@ -851,6 +881,7 @@ class InitCanvasDb < ActiveRecord::Migration[4.2] t.datetime "updated_at" t.integer "user_id", :limit => 8 t.string "name" + t.string "redirect_uri" end create_table "discussion_entries", :force => true do |t| @@ -1183,7 +1214,7 @@ class InitCanvasDb < ActiveRecord::Migration[4.2] t.string "join_level" t.string "default_view", :default => "feed" t.string "migration_id" - t.integer "storage_quota" + t.integer "storage_quota", :limit => 8 t.string "uuid" t.integer "root_account_id", :limit => 8 t.string "sis_source_id" @@ -1223,6 +1254,7 @@ class InitCanvasDb < ActiveRecord::Migration[4.2] add_index "inbox_items", ["sender_id"], :name => "index_inbox_items_on_sender_id" add_index "inbox_items", ["user_id"], :name => "index_inbox_items_on_user_id" add_index "inbox_items", ["workflow_state"], :name => "index_inbox_items_on_workflow_state" + add_index :inbox_items, [:asset_type, :asset_id] create_table "learning_outcome_groups", :force => true do |t| t.integer "context_id", :limit => 8 @@ -1466,6 +1498,7 @@ class InitCanvasDb < ActiveRecord::Migration[4.2] t.boolean "participated" t.boolean "summarized" t.integer "account_id", :limit => 8 + t.integer "real_user_id", :limit => 8 end execute("ALTER TABLE #{PageView.quoted_table_name} ADD PRIMARY KEY (request_id)") @@ -1928,6 +1961,7 @@ class InitCanvasDb < ActiveRecord::Migration[4.2] t.string "context_code" t.integer "media_object_id", :limit => 8 t.text "turnitin_data" + t.boolean "has_admin_comment", :default => false, :null => false end add_index "submissions", ["assignment_id", "submission_type"], :name => "index_submissions_on_assignment_id_and_submission_type" @@ -2029,7 +2063,7 @@ class InitCanvasDb < ActiveRecord::Migration[4.2] t.integer "unread_inbox_items_count" t.integer "reminder_time_for_due_dates", :default => 172800 t.integer "reminder_time_for_grading", :default => 0 - t.integer "storage_quota" + t.integer "storage_quota", :limit => 8 t.string "visible_inbox_types" t.datetime "last_user_note" t.boolean "subscribe_to_emails" @@ -2037,6 +2071,9 @@ class InitCanvasDb < ActiveRecord::Migration[4.2] t.string "sis_name" t.text "preferences" t.string "avatar_state" + t.string "locale" + t.string "browser_locale" + t.integer "unread_conversations_count", :default => 0 end add_index "users", ["avatar_state", "avatar_image_updated_at"], :name => "index_users_on_avatar_state_and_avatar_image_updated_at" diff --git a/db/migrate/20101216224513_create_delayed_jobs.rb b/db/migrate/20101216224513_create_delayed_jobs.rb index 759d0b7bfbc..15dd16ba4ce 100644 --- a/db/migrate/20101216224513_create_delayed_jobs.rb +++ b/db/migrate/20101216224513_create_delayed_jobs.rb @@ -52,14 +52,30 @@ class CreateDelayedJobs < ActiveRecord::Migration[4.2] table.string :strand end - # "nulls first" syntax is postgresql specific, and allows for more - # efficient querying for the next job - connection.execute("CREATE INDEX get_delayed_jobs_index ON #{Delayed::Backend::ActiveRecord::Job.quoted_table_name} (priority, run_at, failed_at nulls first, locked_at nulls first, queue)") add_index :delayed_jobs, [:tag] - add_index :delayed_jobs, :strand + add_index :delayed_jobs, %w(run_at queue locked_at strand priority), :name => 'index_delayed_jobs_for_get_next' + add_index :delayed_jobs, %w(strand id), :name => 'index_delayed_jobs_on_strand' + + create_table :failed_jobs do |t| + t.integer "priority", :default => 0 + t.integer "attempts", :default => 0 + t.string "handler", :limit => 512000 + t.integer "original_id", :limit => 8 + t.text "last_error" + t.string "queue" + t.datetime "run_at" + t.datetime "locked_at" + t.datetime "failed_at" + t.string "locked_by" + t.datetime "created_at" + t.datetime "updated_at" + t.string "tag" + t.integer "max_attempts" + t.string "strand" + end end def self.down - drop_table :delayed_jobs + raise ActiveRecord::IrreversibleMigration end end diff --git a/db/migrate/20110609212540_message_attachments_and_media_objects.rb b/db/migrate/20110609212540_message_attachments_and_media_objects.rb deleted file mode 100644 index fea9b65e8bc..00000000000 --- a/db/migrate/20110609212540_message_attachments_and_media_objects.rb +++ /dev/null @@ -1,34 +0,0 @@ -# -# Copyright (C) 2011 - present Instructure, Inc. -# -# This file is part of Canvas. -# -# Canvas is free software: you can redistribute it and/or modify it under -# the terms of the GNU Affero General Public License as published by the Free -# Software Foundation, version 3 of the License. -# -# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more -# details. -# -# You should have received a copy of the GNU Affero General Public License along -# with this program. If not, see . - -class MessageAttachmentsAndMediaObjects < ActiveRecord::Migration[4.2] - tag :predeploy - - def self.up - add_column :conversations, :has_attachments, :boolean - add_column :conversations, :has_media_objects, :boolean - add_column :conversation_participants, :has_attachments, :boolean - add_column :conversation_participants, :has_media_objects, :boolean - end - - def self.down - remove_column :conversations, :has_attachments - remove_column :conversations, :has_media_objects - remove_column :conversation_participants, :has_attachments - remove_column :conversation_participants, :has_media_objects - end -end diff --git a/db/migrate/20110610163600_add_sticky_xlisting.rb b/db/migrate/20110610163600_add_sticky_xlisting.rb deleted file mode 100644 index 33c86e7fb2a..00000000000 --- a/db/migrate/20110610163600_add_sticky_xlisting.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# Copyright (C) 2011 - present Instructure, Inc. -# -# This file is part of Canvas. -# -# Canvas is free software: you can redistribute it and/or modify it under -# the terms of the GNU Affero General Public License as published by the Free -# Software Foundation, version 3 of the License. -# -# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more -# details. -# -# You should have received a copy of the GNU Affero General Public License along -# with this program. If not, see . - -class AddStickyXlisting < ActiveRecord::Migration[4.2] - tag :predeploy - - def self.up - add_column :course_sections, :sticky_xlist, :boolean - end - - def self.down - remove_column :course_sections, :sticky_xlist - end -end diff --git a/db/migrate/20110610213249_optimize_delayed_jobs.rb b/db/migrate/20110610213249_optimize_delayed_jobs.rb deleted file mode 100644 index 272d680a9ff..00000000000 --- a/db/migrate/20110610213249_optimize_delayed_jobs.rb +++ /dev/null @@ -1,59 +0,0 @@ -# -# Copyright (C) 2011 - present Instructure, Inc. -# -# This file is part of Canvas. -# -# Canvas is free software: you can redistribute it and/or modify it under -# the terms of the GNU Affero General Public License as published by the Free -# Software Foundation, version 3 of the License. -# -# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more -# details. -# -# You should have received a copy of the GNU Affero General Public License along -# with this program. If not, see . - -class OptimizeDelayedJobs < ActiveRecord::Migration[4.2] - tag :predeploy - - def self.connection - Delayed::Backend::ActiveRecord::Job.connection - end - - def self.up - create_table :failed_jobs do |t| - t.integer "priority", :default => 0 - t.integer "attempts", :default => 0 - t.string "handler", :limit => 512000 - t.integer "original_id", :limit => 8 - t.text "last_error" - t.string "queue" - t.datetime "run_at" - t.datetime "locked_at" - t.datetime "failed_at" - t.string "locked_by" - t.datetime "created_at" - t.datetime "updated_at" - t.string "tag" - t.integer "max_attempts" - t.string "strand" - end - - remove_index :delayed_jobs, :name => 'get_delayed_jobs_index' - remove_index :delayed_jobs, [:strand] - - add_index :delayed_jobs, %w(run_at queue locked_at strand priority), :name => 'index_delayed_jobs_for_get_next' - add_index :delayed_jobs, %w(strand id), :name => 'index_delayed_jobs_on_strand' - - # move all failed jobs to the new failed table - Delayed::Backend::ActiveRecord::Job.where("failed_at IS NOT NULL").find_each do |job| - job.fail! unless job.on_hold? - end - end - - def self.down - raise ActiveRecord::IrreversibleMigration - end -end diff --git a/db/migrate/20110617200149_convert_storage_quotas_to_bytes.rb b/db/migrate/20110617200149_convert_storage_quotas_to_bytes.rb deleted file mode 100644 index af588a72c04..00000000000 --- a/db/migrate/20110617200149_convert_storage_quotas_to_bytes.rb +++ /dev/null @@ -1,42 +0,0 @@ -# -# Copyright (C) 2011 - present Instructure, Inc. -# -# This file is part of Canvas. -# -# Canvas is free software: you can redistribute it and/or modify it under -# the terms of the GNU Affero General Public License as published by the Free -# Software Foundation, version 3 of the License. -# -# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more -# details. -# -# You should have received a copy of the GNU Affero General Public License along -# with this program. If not, see . - -class ConvertStorageQuotasToBytes < ActiveRecord::Migration[4.2] - tag :predeploy - - FIELDS_TO_FIX = [ - [ User, :storage_quota ], - [ Account, :storage_quota ], - [ Account, :default_storage_quota ], - [ Course, :storage_quota ], - [ Group, :storage_quota ], - ] - - def self.up - FIELDS_TO_FIX.each do |klass, field| - change_column klass.table_name.to_s, field, :integer, :limit => 8 - update("UPDATE #{klass.quoted_table_name} SET #{field} = #{field} * 1024 * 1024 WHERE #{field} IS NOT NULL AND #{field} < 1024 * 1024") - end - end - - def self.down - FIELDS_TO_FIX.each do |klass, field| - change_column klass.table_name.to_s, field, :integer, :limit => 4 - update("UPDATE #{klass.quoted_table_name} SET #{field} = #{field} / 1024 * 1024 WHERE #{field} IS NOT NULL AND #{field} >= 1024 * 1024") - end - end -end diff --git a/db/migrate/20110708151915_add_real_user_id_to_page_views.rb b/db/migrate/20110708151915_add_real_user_id_to_page_views.rb deleted file mode 100644 index 116d8725c0a..00000000000 --- a/db/migrate/20110708151915_add_real_user_id_to_page_views.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# Copyright (C) 2011 - present Instructure, Inc. -# -# This file is part of Canvas. -# -# Canvas is free software: you can redistribute it and/or modify it under -# the terms of the GNU Affero General Public License as published by the Free -# Software Foundation, version 3 of the License. -# -# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more -# details. -# -# You should have received a copy of the GNU Affero General Public License along -# with this program. If not, see . - -class AddRealUserIdToPageViews < ActiveRecord::Migration[4.2] - tag :predeploy - - def self.up - add_column :page_views, :real_user_id, :integer, :limit => 8 - end - - def self.down - remove_column :page_views, :real_user_id - end -end diff --git a/db/migrate/20110708231141_locale_prefs.rb b/db/migrate/20110708231141_locale_prefs.rb deleted file mode 100644 index 302e112715f..00000000000 --- a/db/migrate/20110708231141_locale_prefs.rb +++ /dev/null @@ -1,34 +0,0 @@ -# -# Copyright (C) 2011 - present Instructure, Inc. -# -# This file is part of Canvas. -# -# Canvas is free software: you can redistribute it and/or modify it under -# the terms of the GNU Affero General Public License as published by the Free -# Software Foundation, version 3 of the License. -# -# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more -# details. -# -# You should have received a copy of the GNU Affero General Public License along -# with this program. If not, see . - -class LocalePrefs < ActiveRecord::Migration[4.2] - tag :predeploy - - def self.up - add_column :users, :locale, :string - add_column :users, :browser_locale, :string - add_column :courses, :locale, :string - add_column :accounts, :default_locale, :string - end - - def self.down - remove_column :users, :locale - remove_column :users, :browser_locale - remove_column :courses, :locale - remove_column :accounts, :default_locale - end -end diff --git a/db/migrate/20110720185610_create_alerts.rb b/db/migrate/20110720185610_create_alerts.rb deleted file mode 100644 index 9f1c4c7526b..00000000000 --- a/db/migrate/20110720185610_create_alerts.rb +++ /dev/null @@ -1,42 +0,0 @@ -# -# Copyright (C) 2011 - present Instructure, Inc. -# -# This file is part of Canvas. -# -# Canvas is free software: you can redistribute it and/or modify it under -# the terms of the GNU Affero General Public License as published by the Free -# Software Foundation, version 3 of the License. -# -# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more -# details. -# -# You should have received a copy of the GNU Affero General Public License along -# with this program. If not, see . - -class CreateAlerts < ActiveRecord::Migration[4.2] - tag :predeploy - - def self.up - create_table :alerts do |t| - t.integer :context_id, :limit => 8 - t.string :context_type - t.text :recipients - t.integer :repetition - - t.timestamps null: true - end - - create_table :alert_criteria do |t| - t.integer :alert_id, :limit => 8 - t.string :criterion_type - t.float :threshold - end - end - - def self.down - drop_table :alert_criteria - drop_table :alerts - end -end diff --git a/db/migrate/20110801034931_message_counts.rb b/db/migrate/20110801034931_message_counts.rb deleted file mode 100644 index 51c985c18a6..00000000000 --- a/db/migrate/20110801034931_message_counts.rb +++ /dev/null @@ -1,39 +0,0 @@ -# -# Copyright (C) 2011 - present Instructure, Inc. -# -# This file is part of Canvas. -# -# Canvas is free software: you can redistribute it and/or modify it under -# the terms of the GNU Affero General Public License as published by the Free -# Software Foundation, version 3 of the License. -# -# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more -# details. -# -# You should have received a copy of the GNU Affero General Public License along -# with this program. If not, see . - -class MessageCounts < ActiveRecord::Migration[4.2] - tag :predeploy - - def self.up - add_column :conversation_participants, :message_count, :int, :default => 0 - update <<-SQL - UPDATE #{ConversationParticipant.quoted_table_name} - SET message_count = ( - SELECT COUNT(*) - FROM #{ConversationMessage.quoted_table_name}, #{ConversationMessageParticipant.quoted_table_name} - WHERE conversation_messages.conversation_id = conversation_participants.conversation_id - AND NOT conversation_messages.generated - AND conversation_messages.id = conversation_message_participants.conversation_message_id - AND conversation_participant_id = conversation_participants.id - ) - SQL - end - - def self.down - remove_column :conversation_participants, :message_count - end -end diff --git a/db/migrate/20110801080015_message_forwards.rb b/db/migrate/20110801080015_message_forwards.rb deleted file mode 100644 index 30430f311fa..00000000000 --- a/db/migrate/20110801080015_message_forwards.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# Copyright (C) 2011 - present Instructure, Inc. -# -# This file is part of Canvas. -# -# Canvas is free software: you can redistribute it and/or modify it under -# the terms of the GNU Affero General Public License as published by the Free -# Software Foundation, version 3 of the License. -# -# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more -# details. -# -# You should have received a copy of the GNU Affero General Public License along -# with this program. If not, see . - -class MessageForwards < ActiveRecord::Migration[4.2] - tag :predeploy - - def self.up - add_column :conversation_messages, :forwarded_message_ids, :text - end - - def self.down - remove_column :conversation_messages, :forwarded_message_ids - end -end diff --git a/db/migrate/20110803192001_unread_counts.rb b/db/migrate/20110803192001_unread_counts.rb deleted file mode 100644 index cec83185475..00000000000 --- a/db/migrate/20110803192001_unread_counts.rb +++ /dev/null @@ -1,38 +0,0 @@ -# -# Copyright (C) 2011 - present Instructure, Inc. -# -# This file is part of Canvas. -# -# Canvas is free software: you can redistribute it and/or modify it under -# the terms of the GNU Affero General Public License as published by the Free -# Software Foundation, version 3 of the License. -# -# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more -# details. -# -# You should have received a copy of the GNU Affero General Public License along -# with this program. If not, see . - -class UnreadCounts < ActiveRecord::Migration[4.2] - tag :predeploy - - def self.up - add_column :users, :unread_conversations_count, :int, :default => 0 - update <<-SQL - UPDATE #{User.quoted_table_name} - SET unread_conversations_count = ( - SELECT COUNT(*) - FROM #{ConversationParticipant.quoted_table_name} - WHERE workflow_state = 'unread' - AND last_message_at IS NOT NULL - AND user_id = users.id - ) - SQL - end - - def self.down - remove_column :users, :unread_conversations_count - end -end diff --git a/db/migrate/20110804195852_label_conversations.rb b/db/migrate/20110804195852_label_conversations.rb deleted file mode 100644 index af9bd66b3ba..00000000000 --- a/db/migrate/20110804195852_label_conversations.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# Copyright (C) 2011 - present Instructure, Inc. -# -# This file is part of Canvas. -# -# Canvas is free software: you can redistribute it and/or modify it under -# the terms of the GNU Affero General Public License as published by the Free -# Software Foundation, version 3 of the License. -# -# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more -# details. -# -# You should have received a copy of the GNU Affero General Public License along -# with this program. If not, see . - -class LabelConversations < ActiveRecord::Migration[4.2] - tag :predeploy - - def self.up - add_column :conversation_participants, :label, :string - end - - def self.down - remove_column :conversation_participants, :label - end -end diff --git a/db/migrate/20110805003024_add_developer_key_redirect_uri.rb b/db/migrate/20110805003024_add_developer_key_redirect_uri.rb deleted file mode 100644 index be3419c95be..00000000000 --- a/db/migrate/20110805003024_add_developer_key_redirect_uri.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# Copyright (C) 2011 - present Instructure, Inc. -# -# This file is part of Canvas. -# -# Canvas is free software: you can redistribute it and/or modify it under -# the terms of the GNU Affero General Public License as published by the Free -# Software Foundation, version 3 of the License. -# -# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more -# details. -# -# You should have received a copy of the GNU Affero General Public License along -# with this program. If not, see . - -class AddDeveloperKeyRedirectUri < ActiveRecord::Migration[4.2] - tag :predeploy - - def self.up - add_column :developer_keys, :redirect_uri, :string - end - - def self.down - remove_column :developer_keys, :redirect_uri - end -end diff --git a/db/migrate/20110809193507_fix_duplicate_discussions.rb b/db/migrate/20110809193507_fix_duplicate_discussions.rb deleted file mode 100644 index e050a8d24ef..00000000000 --- a/db/migrate/20110809193507_fix_duplicate_discussions.rb +++ /dev/null @@ -1,44 +0,0 @@ -# -# Copyright (C) 2011 - present Instructure, Inc. -# -# This file is part of Canvas. -# -# Canvas is free software: you can redistribute it and/or modify it under -# the terms of the GNU Affero General Public License as published by the Free -# Software Foundation, version 3 of the License. -# -# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more -# details. -# -# You should have received a copy of the GNU Affero General Public License along -# with this program. If not, see . - -class FixDuplicateDiscussions < ActiveRecord::Migration[4.2] - tag :predeploy - - def self.up - DiscussionTopic.transaction do - duplicate_topics = DiscussionTopic. - select([:old_assignment_id, :context_id, :context_type]). - where("old_assignment_id IS NOT NULL AND workflow_state <> 'deleted' AND root_topic_id IS NULL AND context_type='Course'"). - group('old_assignment_id, context_id, context_type HAVING COUNT(*) > 1').to_a - - duplicate_topics.each do |topic| - duplicates = DiscussionTopic. - where("context_id=? AND context_type=? AND old_assignment_id=? AND workflow_state<>'deleted' AND root_topic_id is null", - topic.context_id, topic.context_type, topic.old_assignment_id). - order('updated_at DESC').to_a - to_keep = duplicates.shift - - DiscussionEntry.where(:discussion_topic_id => duplicates).update_all(:discussion_topic_id => to_keep) - DiscussionTopic.where(:root_topic_id => duplicates).update_all(:root_topic_id => to_keep) - DiscussionTopic.delete(duplicates) - end - end - end - - def self.down - end -end diff --git a/db/migrate/20110809221718_add_settings_to_courses.rb b/db/migrate/20110809221718_add_settings_to_courses.rb deleted file mode 100644 index 635d581305f..00000000000 --- a/db/migrate/20110809221718_add_settings_to_courses.rb +++ /dev/null @@ -1,28 +0,0 @@ -# -# Copyright (C) 2011 - present Instructure, Inc. -# -# This file is part of Canvas. -# -# Canvas is free software: you can redistribute it and/or modify it under -# the terms of the GNU Affero General Public License as published by the Free -# Software Foundation, version 3 of the License. -# -# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more -# details. -# -# You should have received a copy of the GNU Affero General Public License along -# with this program. If not, see . - -class AddSettingsToCourses < ActiveRecord::Migration[4.2] - tag :predeploy - - def self.up - add_column :courses, :settings, :text - end - - def self.down - remove_column :courses, :settings - end -end diff --git a/db/migrate/20110810194057_conversations_has_attachments_not_null.rb b/db/migrate/20110810194057_conversations_has_attachments_not_null.rb deleted file mode 100644 index 47dc4f61f0f..00000000000 --- a/db/migrate/20110810194057_conversations_has_attachments_not_null.rb +++ /dev/null @@ -1,38 +0,0 @@ -# -# Copyright (C) 2011 - present Instructure, Inc. -# -# This file is part of Canvas. -# -# Canvas is free software: you can redistribute it and/or modify it under -# the terms of the GNU Affero General Public License as published by the Free -# Software Foundation, version 3 of the License. -# -# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more -# details. -# -# You should have received a copy of the GNU Affero General Public License along -# with this program. If not, see . - -class ConversationsHasAttachmentsNotNull < ActiveRecord::Migration[4.2] - tag :predeploy - - def self.up - [:conversations, :conversation_participants].each do |table| - [:has_attachments, :has_media_objects].each do |column| - change_column_null table, column, false, false - change_column_default table, column, false - end - end - end - - def self.down - [:conversations, :conversation_participants].each do |table| - [:has_attachments, :has_media_objects].each do |column| - change_column_null table, column, true - change_column_default table, column, nil - end - end - end -end diff --git a/db/migrate/20110816152405_new_inbox_media_comments.rb b/db/migrate/20110816152405_new_inbox_media_comments.rb deleted file mode 100644 index 1af5538de99..00000000000 --- a/db/migrate/20110816152405_new_inbox_media_comments.rb +++ /dev/null @@ -1,30 +0,0 @@ -# -# Copyright (C) 2011 - present Instructure, Inc. -# -# This file is part of Canvas. -# -# Canvas is free software: you can redistribute it and/or modify it under -# the terms of the GNU Affero General Public License as published by the Free -# Software Foundation, version 3 of the License. -# -# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more -# details. -# -# You should have received a copy of the GNU Affero General Public License along -# with this program. If not, see . - -class NewInboxMediaComments < ActiveRecord::Migration[4.2] - tag :predeploy - - def self.up - add_column :conversation_messages, :media_comment_id, :string - add_column :conversation_messages, :media_comment_type, :string - end - - def self.down - remove_column :conversation_messages, :media_comment_id - remove_column :conversation_messages, :media_comment_type - end -end diff --git a/db/migrate/20110816203511_message_migration.rb b/db/migrate/20110816203511_message_migration.rb deleted file mode 100644 index ce475c53d4f..00000000000 --- a/db/migrate/20110816203511_message_migration.rb +++ /dev/null @@ -1,307 +0,0 @@ -# -# Copyright (C) 2011 - present Instructure, Inc. -# -# This file is part of Canvas. -# -# Canvas is free software: you can redistribute it and/or modify it under -# the terms of the GNU Affero General Public License as published by the Free -# Software Foundation, version 3 of the License. -# -# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more -# details. -# -# You should have received a copy of the GNU Affero General Public License along -# with this program. If not, see . - -class MessageMigration < ActiveRecord::Migration[4.2] - tag :predeploy - - def self.up - add_index :conversation_message_participants, [:conversation_participant_id, :conversation_message_id], :name => :index_cmp_on_cpi_and_cmi - add_index :inbox_items, [:asset_type, :asset_id] - - # for bringing over attachments and tracking deleted inbox_items - # the other new columns get removed at the end of the migration, we'll keep this one for now - # in case we need to track/fix any issues post migration - add_column :conversation_messages, :context_message_id, :integer, :limit => 8 - - return if Rails.env.test? - - unless connection.adapter_name =~ /postgres/ - $stderr.puts "don't know how to migrate conversation data for #{connection.adapter_name}!" - return - end - - # for grouping messages into conversations - # private: list of participant ids <= 2 - # group: root_context_message_id + list of participant ids (if the list changes, it's a different conversation) - add_column :conversations, :migration_signature, :text - - # helper column for merging into existing private conversations - add_column :conversations, :tmp_private_hash, :string - - # from context_message, will get rolled up into conversation_participant - add_column :conversation_message_participants, :unread, :boolean - - execute <<-SQL - CREATE TEMPORARY TABLE __migrated_messages AS - SELECT - id, - user_id AS author_id, - created_at, - CASE WHEN subject IS NULL OR LOWER(SUBSTR(subject, 1, 4)) = 're: ' THEN body ELSE subject || #{connection.quote("\n\n")} || body END AS body, - COALESCE(root_context_message_id, id) AS root_context_message_id, - media_comment_id, - media_comment_type, - '::TEXT' AS signature - FROM - #{connection.quote_table_name('context_messages')} - SQL - execute "CREATE INDEX index__migrated_messages_on_id ON __migrated_messages (id)" - - execute <<-SQL - CREATE TEMPORARY TABLE __migrated_message_participants AS - SELECT DISTINCT - context_message_id AS migrated_message_id, - user_id - FROM - #{connection.quote_table_name('context_message_participants')} - SQL - execute "CREATE INDEX index_mmp_on_message_id ON __migrated_message_participants (migrated_message_id)" - - execute <<-SQL - CREATE TEMPORARY TABLE __migrated_message_participant_strings AS - SELECT migrated_message_id, STRING_AGG(user_id::TEXT, ',') AS participants, COUNT(DISTINCT user_id) <= 2 AS private - FROM ( - SELECT DISTINCT migrated_message_id, user_id - FROM __migrated_message_participants - ORDER BY migrated_message_id, user_id - ) p - GROUP BY migrated_message_id - SQL - execute "CREATE INDEX index_mmps_on_migrated_message_id ON __migrated_message_participant_strings (migrated_message_id)" - - execute <<-SQL - UPDATE __migrated_messages - SET signature = CASE WHEN private THEN '' ELSE root_context_message_id || ':' END || participants - FROM __migrated_message_participant_strings - WHERE migrated_message_id = __migrated_messages.id - SQL - execute "CREATE INDEX index___migrated_messages_on_signature ON __migrated_messages (signature)" - - execute <<-SQL - INSERT INTO #{Conversation.quoted_table_name}(migration_signature, has_attachments, has_media_objects) - SELECT DISTINCT signature, FALSE, FALSE - FROM __migrated_messages - SQL - add_index :conversations, :migration_signature - - Conversation.where("migration_signature ~ E'^[0-9]+(,[0-9]+)?$'").find_each(:batch_size => 10000) do |conversation| - conversation.update_attribute :tmp_private_hash, Digest::SHA1.hexdigest(conversation.migration_signature) - end - add_index :conversations, :tmp_private_hash - - # in case any private conversations already exist... - update <<-SQL - UPDATE #{Conversation.quoted_table_name} - SET migration_signature = c2.migration_signature - FROM #{Conversation.quoted_table_name} c2 - WHERE conversations.private_hash = c2.tmp_private_hash - SQL - execute <<-SQL - CREATE TEMPORARY TABLE __existing_private_conversations AS - SELECT private_hash FROM #{Conversation.quoted_table_name} WHERE private_hash IS NOT NULL - SQL - delete <<-SQL - DELETE FROM #{Conversation.quoted_table_name} WHERE tmp_private_hash IN (SELECT private_hash FROM __existing_private_conversations) - SQL - - # create participants for any group conversations or *new* private conversations - remove_index :conversation_participants, :column => [:user_id, :last_message_at] - add_index :conversation_participants, :user_id # temporary for better insert speeds (and to prevent people hitting new messaging from killing the db) - subquery = "SELECT DISTINCT ON (signature) signature, id FROM __migrated_messages ORDER BY signature, id DESC" - execute <<-SQL - INSERT INTO #{ConversationParticipant.quoted_table_name}(conversation_id, user_id, subscribed, workflow_state, has_attachments, has_media_objects) - SELECT c.id, mp.user_id, TRUE, 'read', FALSE, FALSE - FROM __migrated_message_participants mp, - (#{subquery}) AS m, - #{Conversation.quoted_table_name} c - WHERE migrated_message_id = m.id - AND migration_signature = signature - AND private_hash IS NULL - SQL - # make sure new private conversations have their hash set - update <<-SQL - UPDATE #{Conversation.quoted_table_name} - SET private_hash = tmp_private_hash - WHERE tmp_private_hash IS NOT NULL - SQL - - execute <<-SQL - INSERT INTO #{ConversationMessage.quoted_table_name}(conversation_id, author_id, created_at, generated, body, media_comment_id, media_comment_type, context_message_id) - SELECT - conversations.id, - author_id, - created_at, - FALSE, - body, - media_comment_id, - media_comment_type, - __migrated_messages.id - FROM - __migrated_messages, #{Conversation.quoted_table_name} - WHERE - signature = migration_signature - SQL - - - # make messages visible to users - execute <<-SQL - INSERT INTO #{ConversationMessageParticipant.quoted_table_name}(conversation_message_id, conversation_participant_id, unread) - SELECT - cm.id, - cp.id, - ii.workflow_state = 'unread' - FROM - #{ConversationMessage.quoted_table_name} cm, - #{ConversationParticipant.quoted_table_name} cp, - #{connection.quote_table_name('inbox_items')} ii - WHERE - cm.conversation_id = cp.conversation_id - AND ii.asset_id = cm.context_message_id - AND ii.asset_type = 'ContextMessage' - AND ii.user_id = cp.user_id - AND ii.workflow_state <> 'deleted' - SQL - - # make sure senders can see their sent items (they don't normally get an inbox_item, unless explicitly added as a recipient) - execute <<-SQL - INSERT INTO #{ConversationMessageParticipant.quoted_table_name}(conversation_message_id, conversation_participant_id, unread) - SELECT - cm.id, - cp.id, - FALSE - FROM - #{ConversationMessage.quoted_table_name} cm - INNER JOIN - #{ConversationParticipant.quoted_table_name} cp ON cm.conversation_id = cp.conversation_id AND cm.author_id = cp.user_id - LEFT JOIN - #{ConversationMessageParticipant.quoted_table_name} existing ON existing.conversation_message_id = cm.id AND existing.conversation_participant_id = cp.id - WHERE - cm.context_message_id IS NOT NULL - AND existing.id IS NULL - SQL - - # hide inbox_items from the users - update "UPDATE #{connection.quote_table_name('inbox_items')} SET workflow_state = 'retired' WHERE asset_type IN ('ContextMessage', 'SubmissionComment') AND workflow_state = 'read'" - update "UPDATE #{connection.quote_table_name('inbox_items')} SET workflow_state = 'retired_unread' WHERE asset_type IN ('ContextMessage', 'SubmissionComment') AND workflow_state = 'unread'" - - - update <<-SQL - UPDATE #{ConversationParticipant.quoted_table_name} - SET workflow_state = 'unread' - WHERE EXISTS (SELECT 1 FROM #{ConversationMessageParticipant.quoted_table_name} WHERE conversation_participants.id = conversation_participant_id AND unread LIMIT 1) - SQL - - - # attachments - update <<-SQL - UPDATE #{Attachment.quoted_table_name} - SET context_id = conversation_messages.id, context_type = 'ConversationMessage' - FROM #{ConversationMessage.quoted_table_name} - WHERE attachments.context_type = 'ContextMessage' AND conversation_messages.context_message_id = attachments.context_id - SQL - - update <<-SQL - UPDATE #{ConversationParticipant.quoted_table_name} - SET has_attachments = TRUE - WHERE id IN ( - SELECT conversation_participant_id - FROM #{ConversationMessageParticipant.quoted_table_name} cmp, #{Attachment.quoted_table_name} a - WHERE - a.context_type = 'ConversationMessage' - AND a.context_id = conversation_message_id - ) - SQL - - update <<-SQL - UPDATE #{Conversation.quoted_table_name} - SET has_attachments = TRUE - WHERE id IN ( - SELECT conversation_id - FROM #{ConversationMessage.quoted_table_name} cm, #{Attachment.quoted_table_name} a - WHERE - a.context_type = 'ConversationMessage' - AND a.context_id = cm.id - ) - SQL - - - # audio comments - update <<-SQL - UPDATE #{ConversationParticipant.quoted_table_name} - SET has_media_objects = TRUE - WHERE id IN ( - SELECT conversation_participant_id - FROM #{ConversationMessageParticipant.quoted_table_name} cmp, #{ConversationMessage.quoted_table_name} cm - WHERE cmp.conversation_message_id = cm.id AND media_comment_id IS NOT NULL - ) - SQL - - update <<-SQL - UPDATE #{Conversation.quoted_table_name} - SET has_media_objects = TRUE - WHERE id IN ( - SELECT conversation_id - FROM #{ConversationMessage.quoted_table_name} - WHERE media_comment_id IS NOT NULL - ) - SQL - - # cached stats - execute <<-SQL - CREATE TEMPORARY TABLE __migrated_conversation_stats AS - SELECT - conversation_participant_id, - COUNT(*) AS message_count, - MAX(cm.created_at) AS last_message_at, - MAX(CASE WHEN cm.author_id = cp.user_id THEN cm.created_at ELSE NULL END) AS last_authored_at - FROM #{ConversationMessageParticipant.quoted_table_name} cmp, #{ConversationMessage.quoted_table_name} cm, #{ConversationParticipant.quoted_table_name} cp - WHERE conversation_message_id = cm.id AND conversation_participant_id = cp.id - GROUP BY conversation_participant_id - SQL - execute "CREATE INDEX index_mcs_on_cpi ON __migrated_conversation_stats (conversation_participant_id)" - - update <<-SQL - UPDATE #{ConversationParticipant.quoted_table_name} - SET message_count = __migrated_conversation_stats.message_count, - last_message_at = __migrated_conversation_stats.last_message_at, - last_authored_at = __migrated_conversation_stats.last_authored_at - 'FROM __migrated_conversation_stats' - WHERE conversation_participants.id = conversation_participant_id - SQL - add_index :conversation_participants, [:user_id, :last_message_at] - remove_index :conversation_participants, :column => :user_id - - execute <<-SQL - UPDATE #{User.quoted_table_name} - SET unread_conversations_count = (SELECT COUNT(*) FROM #{ConversationParticipant.quoted_table_name} WHERE workflow_state = 'unread' AND user_id = users.id) - SQL - - remove_column :conversations, :migration_signature - remove_column :conversations, :tmp_private_hash - remove_column :conversation_message_participants, :unread - - execute "DROP TABLE __migrated_messages" - execute "DROP TABLE __migrated_message_participants" - execute "DROP TABLE __migrated_message_participant_strings" - execute "DROP TABLE __existing_private_conversations" - execute "DROP TABLE __migrated_conversation_stats" - end - - def self.down - raise ActiveRecord::IrreversibleMigration - end -end diff --git a/db/migrate/20110817173455_submission_has_admin_comment.rb b/db/migrate/20110817173455_submission_has_admin_comment.rb deleted file mode 100644 index a6e96e10465..00000000000 --- a/db/migrate/20110817173455_submission_has_admin_comment.rb +++ /dev/null @@ -1,37 +0,0 @@ -# -# Copyright (C) 2011 - present Instructure, Inc. -# -# This file is part of Canvas. -# -# Canvas is free software: you can redistribute it and/or modify it under -# the terms of the GNU Affero General Public License as published by the Free -# Software Foundation, version 3 of the License. -# -# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more -# details. -# -# You should have received a copy of the GNU Affero General Public License along -# with this program. If not, see . - -class SubmissionHasAdminComment < ActiveRecord::Migration[4.2] - tag :predeploy - - def self.up - add_column :submissions, :has_admin_comment, :boolean, :default => false, :null => false - update <<-SQL - UPDATE #{Submission.quoted_table_name} SET has_admin_comment=EXISTS( - SELECT 1 FROM #{SubmissionComment.quoted_table_name} AS sc, #{Assignment.quoted_table_name} AS a, #{Course.quoted_table_name} AS c, #{Enrollment.quoted_table_name} AS e - WHERE sc.submission_id=submissions.id AND a.id = submissions.assignment_id - AND submissions.workflow_state <> 'deleted' - AND c.id = a.context_id AND a.context_type = 'Course' AND e.course_id = c.id - AND e.user_id = sc.author_id AND e.workflow_state = 'active' - AND e.type IN ('TeacherEnrollment', 'TaEnrollment')) - SQL - end - - def self.down - remove_column :submissions, :has_admin_comment - end -end