db/migrate/20160714193304_create_versions.rb in phcmemberspro-9.5.7 vs db/migrate/20160714193304_create_versions.rb in phcmemberspro-9.6.0
- old
+ new
@@ -1,80 +1,80 @@
-# This migration creates the `versions` table, the only schema PT requires.
-# All other migrations PT provides are optional.
-class CreateVersions < ActiveRecord::Migration
- # Class names of MySQL adapters.
- # - `MysqlAdapter` - Used by gems: `mysql`, `activerecord-jdbcmysql-adapter`.
- # - `Mysql2Adapter` - Used by `mysql2` gem.
- MYSQL_ADAPTERS = [
- "ActiveRecord::ConnectionAdapters::MysqlAdapter",
- "ActiveRecord::ConnectionAdapters::Mysql2Adapter"
- ].freeze
-
- # The largest text column available in all supported RDBMS is
- # 1024^3 - 1 bytes, roughly one gibibyte. We specify a size
- # so that MySQL will use `longtext` instead of `text`. Otherwise,
- # when serializing very large objects, `text` might not be big enough.
- TEXT_BYTES = 1_073_741_823
-
- def change
- create_table :versions, versions_table_options do |t|
- t.string :item_type, item_type_options
- t.integer :item_id, null: false
- t.string :event, null: false
- t.string :whodunnit
- t.text :object, limit: TEXT_BYTES
-
- # Known issue in MySQL: fractional second precision
- # -------------------------------------------------
- #
- # MySQL timestamp columns do not support fractional seconds unless
- # defined with "fractional seconds precision". MySQL users should manually
- # add fractional seconds precision to this migration, specifically, to
- # the `created_at` column.
- # (https://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html)
- #
- # MySQL users should also upgrade to rails 4.2, which is the first
- # version of ActiveRecord with support for fractional seconds in MySQL.
- # (https://github.com/rails/rails/pull/14359)
- #
- t.datetime :created_at
- end
- add_index :versions, [:item_type, :item_id]
- end
-
- private
-
- # MySQL 5.6 utf8mb4 limit is 191 chars for keys used in indexes.
- # See https://github.com/airblade/paper_trail/issues/651
- def item_type_options
- opt = { null: false }
- opt[:limit] = 191 if mysql?
- opt
- end
-
- def mysql?
- MYSQL_ADAPTERS.include?(connection.class.name)
- end
-
- # Even modern versions of MySQL still use `latin1` as the default character
- # encoding. Many users are not aware of this, and run into trouble when they
- # try to use PaperTrail in apps that otherwise tend to use UTF-8. Postgres, by
- # comparison, uses UTF-8 except in the unusual case where the OS is configured
- # with a custom locale.
- #
- # - https://dev.mysql.com/doc/refman/5.7/en/charset-applications.html
- # - http://www.postgresql.org/docs/9.4/static/multibyte.html
- #
- # Furthermore, MySQL's original implementation of UTF-8 was flawed, and had
- # to be fixed later by introducing a new charset, `utf8mb4`.
- #
- # - https://mathiasbynens.be/notes/mysql-utf8mb4
- # - https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html
- #
- def versions_table_options
- if mysql?
- { options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci" }
- else
- {}
- end
- end
-end
+# This migration creates the `versions` table, the only schema PT requires.
+# All other migrations PT provides are optional.
+class CreateVersions < ActiveRecord::Migration
+ # Class names of MySQL adapters.
+ # - `MysqlAdapter` - Used by gems: `mysql`, `activerecord-jdbcmysql-adapter`.
+ # - `Mysql2Adapter` - Used by `mysql2` gem.
+ MYSQL_ADAPTERS = [
+ "ActiveRecord::ConnectionAdapters::MysqlAdapter",
+ "ActiveRecord::ConnectionAdapters::Mysql2Adapter"
+ ].freeze
+
+ # The largest text column available in all supported RDBMS is
+ # 1024^3 - 1 bytes, roughly one gibibyte. We specify a size
+ # so that MySQL will use `longtext` instead of `text`. Otherwise,
+ # when serializing very large objects, `text` might not be big enough.
+ TEXT_BYTES = 1_073_741_823
+
+ def change
+ create_table :versions, versions_table_options do |t|
+ t.string :item_type, item_type_options
+ t.integer :item_id, null: false
+ t.string :event, null: false
+ t.string :whodunnit
+ t.text :object, limit: TEXT_BYTES
+
+ # Known issue in MySQL: fractional second precision
+ # -------------------------------------------------
+ #
+ # MySQL timestamp columns do not support fractional seconds unless
+ # defined with "fractional seconds precision". MySQL users should manually
+ # add fractional seconds precision to this migration, specifically, to
+ # the `created_at` column.
+ # (https://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html)
+ #
+ # MySQL users should also upgrade to rails 4.2, which is the first
+ # version of ActiveRecord with support for fractional seconds in MySQL.
+ # (https://github.com/rails/rails/pull/14359)
+ #
+ t.datetime :created_at
+ end
+ add_index :versions, [:item_type, :item_id]
+ end
+
+ private
+
+ # MySQL 5.6 utf8mb4 limit is 191 chars for keys used in indexes.
+ # See https://github.com/airblade/paper_trail/issues/651
+ def item_type_options
+ opt = { null: false }
+ opt[:limit] = 191 if mysql?
+ opt
+ end
+
+ def mysql?
+ MYSQL_ADAPTERS.include?(connection.class.name)
+ end
+
+ # Even modern versions of MySQL still use `latin1` as the default character
+ # encoding. Many users are not aware of this, and run into trouble when they
+ # try to use PaperTrail in apps that otherwise tend to use UTF-8. Postgres, by
+ # comparison, uses UTF-8 except in the unusual case where the OS is configured
+ # with a custom locale.
+ #
+ # - https://dev.mysql.com/doc/refman/5.7/en/charset-applications.html
+ # - http://www.postgresql.org/docs/9.4/static/multibyte.html
+ #
+ # Furthermore, MySQL's original implementation of UTF-8 was flawed, and had
+ # to be fixed later by introducing a new charset, `utf8mb4`.
+ #
+ # - https://mathiasbynens.be/notes/mysql-utf8mb4
+ # - https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html
+ #
+ def versions_table_options
+ if mysql?
+ { options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci" }
+ else
+ {}
+ end
+ end
+end