| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
We are no longer including column objects in YAML serialization, thanks
to https://github.com/rails/rails/pull/15621
|
|
|
|
|
| |
On MySQL and PostgreSQL, the adapter does not type cast virtual columns
for us.
|
| |
|
|
|
|
|
|
|
|
| |
In some cases there is a difference between the two, we should always
be doing one or the other. For convenience, `type_cast` is still a
private method on type, so new types that do not need different behavior
don't need to implement two methods, but it has been moved to private so
it cannot be used accidentally.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- The following is now true for all types, all the time
- `model.attribute_before_type_cast == given_value`
- `model.attribute == model.save_and_reload.attribute`
- `model.attribute == model.dup.attribute`
- `model.attribute == YAML.load(YAML.dump(model)).attribute`
- Removes the remaining types implementing `type_cast_for_write`
- Simplifies the implementation of time zone aware attributes
- Brings tz aware attributes closer to being implemented as an attribute
decorator
- Adds additional point of control for custom types
|
|\
| |
| | |
Don't query the database schema when calling `serialize`
|
| |
| |
| |
| |
| |
| | |
We need to decorate the types lazily. This is extracted to a separate
API, as there are other refactorings that will be able to make use of
it, and to allow unit testing the finer points more granularly.
|
|/ |
|
|\
| |
| | |
Bring type casting behavior of hstore/json in line with serialized
|
| |
| |
| |
| |
| | |
`@raw_attributes` should not contain the type-cast, mutable version of
the value.
|
| |
| |
| |
| | |
Whiny nils is no longer a thing, so we no longer need this optimization
|
| |
| |
| |
| | |
BC era year is (astronomical year + 1) and starts from 1 BC.
|
| |
| |
| |
| |
| |
| | |
Follow up to #15438 and #15502.
/cc @sgrif
|
|/
|
|
|
|
|
| |
For any type that is represented as a string and then type cast, we do
not need separate regular expressions for the various types. No function
will match this regex. User defined types *should* match this, so that
the type object can decide what to do with the value.
|
|
|
|
| |
skip]
|
|\
| |
| | |
Keep column defaults in type cast form
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The contract of `_field_changed?` assumes that the old value is always
type cast. That is not the case for the value in `Column#default` as
things are today. It appears there are other public methods that
assume that `Column#default` is type cast, as well. The reason for this
change originally was because the value gets put into `@raw_attributes`
in initialize. This reverts to the old behavior on `Column`, and updates
`initialize` to make sure that the values are in the right format.
|
|\ \
| | |
| | | |
Refactor quoting of binary data to not be based on the column type
|
| |/ |
|
| | |
|
|\ \
| | |
| | | |
Respect limit for PG bit strings
|
| | | |
|
|\ \ \
| |/ /
|/| | |
Refactor determination of whether the field has changed
|
| |/
| |
| |
| |
| | |
The types know more about what is going on than the dirty module. Let's
ask them!
|
|/ |
|
| |
|
|
|
|
|
|
|
|
| |
This inlines casting for the most obvious types. The rest will
follow eventually. I need to put some tests in place, to make sure
that the inlining is not causing regressions.
/cc @sgrif
|
|
|
|
|
|
|
|
|
|
|
| |
Nearly completely implemented in terms of custom properties.
`_before_type_cast` now stores the raw serialized string consistently,
which removes the need to keep track of "state". The following is now
consistently true:
- `model.serialized == model.reload.serialized`
- A model can be dumped and loaded infinitely without changing
- A model can be saved and reloaded infinitely without changing
|
|
|
|
|
|
|
| |
This removes the case statement in `SchemaDumper` and gives every `Type`
the possibility to control the SchemaDumper default value output.
/cc @sgrif
|
|
|
|
|
| |
This is an intermediate solution. It is related to the refactoring @sgrif
is making and will change in the future.
|
| |
|
|\
| |
| |
| |
| |
| |
| | |
Fixed #columns_for_distinct of postgresql adapter
Conflicts:
activerecord/CHANGELOG.md
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| | |
Many of the methods defined in `AttributeMethods::Serialization` can be
refactored onto this type as well, but this is a reasonable small step.
Removes the `Type` class, and the need for `decorate_columns` to handle
serialized types.
|
| |
| |
| |
| |
| |
| | |
- Create a consistent API across adapters for building new columns
- Use it for custom properties so we don't get `UndefinedMethodError`s
in stuff I'm implementing elsewhere.
|
| | |
|
|\ \
| | |
| | | |
Move types to the top level `ActiveRecord` namespace
|
| | |
| | |
| | |
| | |
| | | |
`ActiveRecord::ConnectionAdapters::Type::Value` =>
`ActiveRecord::Type::Value`
|
|\ \ \
| | | |
| | | | |
Remove unused `Column#coder`
|
| |/ /
| | |
| | |
| | |
| | | |
It appears this property was added, but never actually used. It would be
broken if it were, as it only type casts one way.
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The solution presented in this patch is not efficient. We should replace it
in the near future. The following needs to be worked out:
* Is `@attributes` storing the Ruby or SQL representation?
* `cacheable_column?` is broken but `hstore` and `json` rely on that behavior
Refs #15369.
/cc @sgrif @rafaelfranca
|
| |
| |
| |
| |
| | |
Making this part of the public API was premature, let's make it private
again while I continue to work on the surrounding code.
|
|\ \
| | |
| | | |
Deprecate decimal columns being automatically treated as integers
|
| | |
| | |
| | |
| | |
| | |
| | | |
With ActiveRecord::Properties, we now have a reasonable path for users
to continue to keep this behavior if they want it. This is an edge case
that has added a lot of complexity to the code base.
|
|\ \ \
| | | |
| | | | |
remove unwanted `to_sym` call.
|
| | | | |
|
|\ \ \ \
| |_|/ /
|/| | | |
Remove unnecessary branch from quoting in Mysql
|