| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
`nil`, `Numeric`, and `String` are most basic objects which are passed
to `type_cast`. But now each `when *types_which_need_no_typecasting`
evaluation allocates extra two arrays, it makes `type_cast` slower.
The `types_which_need_no_typecasting` was introduced at #15351, but the
method isn't useful (never used any adapters) since all adapters
(sqlite3, mysql2, postgresql, oracle-enhanced, sqlserver) still
overrides the `_type_cast`.
Just expanding the method would make the `type_cast` 2x faster.
```ruby
module ActiveRecord
module TypeCastFast
def type_cast_fast(value, column = nil)
value = id_value_for_database(value) if value.is_a?(Base)
if column
value = type_cast_from_column(column, value)
end
_type_cast_fast(value)
rescue TypeError
to_type = column ? " to #{column.type}" : ""
raise TypeError, "can't cast #{value.class}#{to_type}"
end
private
def _type_cast_fast(value)
case value
when Symbol, ActiveSupport::Multibyte::Chars, Type::Binary::Data
value.to_s
when true then unquoted_true
when false then unquoted_false
# BigDecimals need to be put in a non-normalized form and quoted.
when BigDecimal then value.to_s("F")
when nil, Numeric, String then value
when Type::Time::Value then quoted_time(value)
when Date, Time then quoted_date(value)
else raise TypeError
end
end
end
end
conn = ActiveRecord::Base.connection
conn.extend ActiveRecord::TypeCastFast
Benchmark.ips do |x|
x.report("type_cast") { conn.type_cast("foo") }
x.report("type_cast_fast") { conn.type_cast_fast("foo") }
x.compare!
end
```
```
Warming up --------------------------------------
type_cast 58.733k i/100ms
type_cast_fast 101.364k i/100ms
Calculating -------------------------------------
type_cast 708.066k (± 5.9%) i/s - 3.583M in 5.080866s
type_cast_fast 1.424M (± 2.3%) i/s - 7.197M in 5.055860s
Comparison:
type_cast_fast: 1424240.0 i/s
type_cast: 708066.0 i/s - 2.01x slower
```
|
|\
| |
| |
| |
| |
| | |
bogdanvlviv/add-skip-action-mailbox-option-to-rails-new-cmd
Add `--skip-action-mailbox` option to `rails new`
|
| |
| |
| |
| | |
Related to https://github.com/rails/rails/commit/ddaf06779aa51d5d1ca462c21c53f2ed169a0d2f
|
|\ \
| | |
| | | |
Add missing keys to ActiveSupport#instrumentation guide [skip ci]
|
| | |
| | |
| | |
| | | |
See https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb#L625.
|
|\ \ \
| | | |
| | | | |
Only define attribute methods from schema cache
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
To define the attribute methods for a model, Active Record needs to know
the schema of the underlying table, which is usually achieved by making
a request to the database. This is undesirable behaviour while the app
is booting, for two reasons: it makes the boot process dependent on the
availability of the database, and it means every new process will make
one query for each table, which can cause issues for large applications.
However, if the application is using the schema cache dump feature, then
the schema cache already contains the necessary information, and we can
define the attribute methods without causing any extra database queries.
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | | |
Don't need to specify the version because Bundler 2.0 released.
Ref: https://bundler.io/blog/2019/01/03/announcing-bundler-2.html
|
|\ \ \ \
| | | | |
| | | | | |
fix activerecord reaper_test
|
| | | | | |
|
|\ \ \ \ \
| |/ / / /
|/| | | |
| | | | |
| | | | | |
bogdanvlviv/remove-mention-about-test-unit-test_case
Remove mention about `Test::Unit::TestCase` [ci skip]
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
We've switched from `Test::Unit::TestCase` to `ActiveSupport::TestCase`
since Rails 2.3.
See https://edgeguides.rubyonrails.org/2_3_release_notes.html#other-railties-changes
|
|\ \ \ \ \
| | | | | |
| | | | | | |
Restore an ability that class level `update` without giving ids
|
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
That ability was introduced at #11898 as `Relation#update` without
giving ids, so the ability on the class level is not documented and not
tested.
c83e30d which fixes #33470 has lost two undocumented abilities.
One has fixed at 5c65688, but I missed the ability on the class level.
Removing any feature should not be suddenly happened in a stable version
even if that is not documented.
I've restored the ability and added test case to avoid any regression in
the future.
Fixes #34743.
|
|\ \ \ \ \ \
| |_|/ / / /
|/| | | | | |
Fix examples in ActiveSupport::LogSubscriber docs
|
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
[ci skip]
|
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Since we already bumped the minimum version of MySQL to 5.5.8 at #33853.
|
| | | | | | |
|
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Since the `current_role` is public API.
|
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Since the `preventing_writes?` is public API.
|
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
If exist `:nodoc:` before method define, it affects all subsequent
method definitions.
|
| | | | | | |
|
| |/ / / /
|/| | | | |
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
String properly
This reverts 27c6c07 since `arel_attr.to_s` is not right way to avoid
the type error.
That to_s returns `"#<struct Arel::Attributes::Attribute ...>"`, there
is no reason to match the regex to the inspect form.
And also, the regex path is not covered by our test cases. I've tweaked
the regex for redundant part and added assertions for the regex path.
|
| | | | |
| | | | |
| | | | | |
[ci skip]
|
| | | | | |
|
| | | | |
| | | | |
| | | | |
| | | | | |
from API docs
|
| | | | | |
|
| | | | | |
|
| | | | | |
|
| | | | | |
|
|/ / / / |
|
|\ \ \ \
| | | | |
| | | | | |
Add examples describing error handling in ActiveSupport::Notification…
|
| | | | |
| | | | |
| | | | |
| | | | | |
ActiveSupport::LogSubscriber documentation files
|
|\ \ \ \ \
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
blaszczakphoto/update-docs-regarding-gzipping-assets
Rename header of the gzip paragraph
|
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
aboaut what to do about serving gziped files [ci skip]
|
|\ \ \ \ \ \
| | | | | | |
| | | | | | | |
Mention tiff support in ActiveStorage guides
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
[ci skip]
|
|\ \ \ \ \ \ \
| |/ / / / / /
|/| | | | | |
| | | | | | |
| | | | | | | |
bogdanvlviv/add-changelog-file-to-actionmailbox-specification
Add CHANGELOG.md to actionmailbox gem specification
|
| | | | | | | |
|
|\ \ \ \ \ \ \
| |/ / / / / /
|/| | | | | | |
Bump license years for 2019
|
| | | | | | | |
|
|\ \ \ \ \ \ \
| | | | | | | |
| | | | | | | | |
Add streams assert methods to ActionCable channel test case
|
| | | | | | | | |
|
| |/ / / / / /
|/| | | | | | |
|
| | | | | | | |
|
| | | | | | | |
|
| | | | | | | |
|