10 KiB
-
Add support for PostgreSQL
IF NOT EXISTS
via the:if_not_exists
option on theadd_enum_value
method.Ariel Rzezak
-
When running
db:migrate
on a fresh database, load the database schema before running migrations.Andrew Novoselac
-
Fix an issue where
.left_outer_joins
used with multiple associations that have the same child association but different parents does not join all parents.Previously, using
.left_outer_joins
with the same child association would only join one of the parents.Now it will correctly join both parents.
Fixes #41498.
Garrett Blehm
-
Deprecate
unsigned_float
andunsigned_decimal
short-hand column methods.As of MySQL 8.0.17, the UNSIGNED attribute is deprecated for columns of type FLOAT, DOUBLE, and DECIMAL. Consider using a simple CHECK constraint instead for such columns.
https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html
Ryuta Kamizono
-
Drop MySQL 5.5 support.
MySQL 5.5 is the only version that does not support datetime with precision, which we have supported in the core. Now we support MySQL 5.6.4 or later, which is the first version to support datetime with precision.
Ryuta Kamizono
-
Make Active Record asynchronous queries compatible with transactional fixtures.
Previously transactional fixtures would disable asynchronous queries, because transactional fixtures impose all queries use the same connection.
Now asynchronous queries will use the connection pinned by transactional fixtures, and behave much closer to production.
Jean Boussier
-
Deserialize binary data before decrypting
This ensures that we call
PG::Connection.unescape_bytea
on PostgreSQL before decryption.Donal McBreen
-
Ensure
ActiveRecord::Encryption.config
is always ready before access.Previously,
ActiveRecord::Encryption
configuration was deferred untilActiveRecord::Base
was loaded. Therefore, accessingActiveRecord::Encryption.config
properties beforeActiveRecord::Base
was loaded would give incorrect results.ActiveRecord::Encryption
now has its own loading hook so that its configuration is set as soon as needed.When
ActiveRecord::Base
is loaded, even lazily, it in turn triggers the loading ofActiveRecord::Encryption
, thus preserving the original behavior of having its config ready before any use ofActiveRecord::Base
.Maxime Réty
-
Add
TimeZoneConverter#==
method, so objects will be properly compared by their type, scale, limit & precision.Address #52699.
Ruy Rocha
-
Add support for SQLite3 full-text-search and other virtual tables.
Previously, adding sqlite3 virtual tables messed up
schema.rb
.Now, virtual tables can safely be added using
create_virtual_table
.Zacharias Knudsen
-
Support use of alternative database interfaces via the
database_cli
ActiveRecord configuration option.Rails.application.configure do config.active_record.database_cli = { postgresql: "pgcli" } end
T S Vallender
-
Add support for dumping table inheritance and native partitioning table definitions for PostgeSQL adapter
Justin Talbott
-
Infer default
:inverse_of
option fordelegated_type
definitions.class Entry < ApplicationRecord delegated_type :entryable, types: %w[ Message ] # => defaults to inverse_of: :entry end
Sean Doyle
-
Add support for
ActiveRecord::Point
type casts usingHash
valuesThis allows
ActiveRecord::Point
to be cast or serialized from a hash with:x
and:y
keys of numeric values, mirroring the functionality of existing casts for string and array values. Both string and symbol keys are supported.class PostgresqlPoint < ActiveRecord::Base attribute :x, :point attribute :y, :point attribute :z, :point end val = PostgresqlPoint.new({ x: '(12.34, -43.21)', y: [12.34, '-43.21'], z: {x: '12.34', y: -43.21} }) ActiveRecord::Point.new(12.32, -43.21) == val.x == val.y == val.z
Stephen Drew
-
Replace
SQLite3::Database#busy_timeout
with#busy_handler_timeout=
.Provides a non-GVL-blocking, fair retry interval busy handler implementation.
Stephen Margheim
-
SQLite3Adapter: Translate
SQLite3::BusyException
intoActiveRecord::StatementTimeout
.Matthew Nguyen
-
Include schema name in
enable_extension
statements indb/schema.rb
.The schema dumper will now include the schema name in generated
enable_extension
statements if they differ from the current schema.For example, if you have a migration:
enable_extension "heroku_ext.pgcrypto" enable_extension "pg_stat_statements"
then the generated schema dump will also contain:
enable_extension "heroku_ext.pgcrypto" enable_extension "pg_stat_statements"
Tony Novak
-
Fix
ActiveRecord::Encryption::EncryptedAttributeType#type
to return actual cast type.Vasiliy Ermolovich
-
SQLite3Adapter: Bulk insert fixtures.
Previously one insert command was executed for each fixture, now they are aggregated in a single bulk insert command.
Lázaro Nixon
-
PostgreSQLAdapter: Allow
disable_extension
to be called with schema-qualified name.For parity with
enable_extension
, thedisable_extension
method can be called with a schema-qualified name (e.g.disable_extension "myschema.pgcrypto"
). Note that PostgreSQL'sDROP EXTENSION
does not actually take a schema name (unlikeCREATE EXTENSION
), so the resulting SQL statement will only name the extension, e.g.DROP EXTENSION IF EXISTS "pgcrypto"
.Tony Novak
-
Make
create_schema
/drop_schema
reversible in migrations.Previously,
create_schema
anddrop_schema
were irreversible migration operations.Tony Novak
-
Support batching using custom columns.
Product.in_batches(cursor: [:shop_id, :id]) do |relation| # do something with relation end
fatkodima
-
Use SQLite
IMMEDIATE
transactions when possible.Transactions run against the SQLite3 adapter default to IMMEDIATE mode to improve concurrency support and avoid busy exceptions.
Stephen Margheim
-
Raise specific exception when a connection is not defined.
The new
ConnectionNotDefined
exception provides connection name, shard and role accessors indicating the details of the connection that was requested.Hana Harencarova, Matthew Draper
-
Delete the deprecated constant
ActiveRecord::ImmutableRelation
.Xavier Noria
-
Fix duplicate callback execution when child autosaves parent with
has_one
andbelongs_to
.Before, persisting a new child record with a new associated parent record would run
before_validation
,after_validation
,before_save
andafter_save
callbacks twice.Now, these callbacks are only executed once as expected.
Joshua Young
-
ActiveRecord::Encryption::Encryptor
now supports a:compressor
option to customize the compression algorithm used.module ZstdCompressor def self.deflate(data) Zstd.compress(data) end def self.inflate(data) Zstd.decompress(data) end end class User encrypts :name, compressor: ZstdCompressor end
You disable compression by passing
compress: false
.class User encrypts :name, compress: false end
heka1024
-
Add condensed
#inspect
forConnectionPool
,AbstractAdapter
, andDatabaseConfig
.Hartley McGuire
-
Add
.shard_keys
,.sharded?
, &.connected_to_all_shards
methods.class ShardedBase < ActiveRecord::Base self.abstract_class = true connects_to shards: { shard_one: { writing: :shard_one }, shard_two: { writing: :shard_two } } end class ShardedModel < ShardedBase end ShardedModel.shard_keys => [:shard_one, :shard_two] ShardedModel.sharded? => true ShardedBase.connected_to_all_shards { ShardedModel.current_shard } => [:shard_one, :shard_two]
Nony Dutton
-
Add a
filter
option toin_order_of
to prioritize certain values in the sorting without filtering the results by these values.Igor Depolli
-
Fix an issue where the IDs reader method did not return expected results for preloaded associations in models using composite primary keys.
Jay Ang
-
Allow to configure
strict_loading_mode
globally or within a model.Defaults to
:all
, can be changed to:n_plus_one_only
.Garen Torikian
-
Add
ActiveRecord::Relation#readonly?
.Reflects if the relation has been marked as readonly.
Theodor Tonum
-
Improve
ActiveRecord::Store
to raise a descriptive exception if the column is not either structured (e.g., PostgreSQL +hstore+/+json+, or MySQL +json+) or declared serializable viaActiveRecord.store
.Previously, a
NoMethodError
would be raised when the accessor was read or written:NoMethodError: undefined method `accessor' for an instance of ActiveRecord::Type::Text
Now, a descriptive
ConfigurationError
is raised:ActiveRecord::ConfigurationError: the column 'metadata' has not been configured as a store. Please make sure the column is declared serializable via 'ActiveRecord.store' or, if your database supports it, use a structured column type like hstore or json.
Mike Dalessio
-
Fix inference of association model on nested models with the same demodularized name.
E.g. with the following setup:
class Nested::Post < ApplicationRecord has_one :post, through: :other end
Before,
#post
would infer the model asNested::Post
, but now it correctly infersPost
.Joshua Young
-
Add public method for checking if a table is ignored by the schema cache.
Previously, an application would need to reimplement
ignored_table?
from the schema cache class to check if a table was set to be ignored. This adds a public method to support this and updates the schema cache to use that directly.ActiveRecord.schema_cache_ignored_tables = ["developers"] ActiveRecord.schema_cache_ignored_table?("developers") => true
Eileen M. Uchitelle
Please check 7-2-stable for previous changes.