aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters
Commit message (Collapse)AuthorAgeFilesLines
* Add `ActiveRecord::ValueTooLong` exception classRyuta Kamizono2016-02-062-0/+5
|
* Remove the assumption of schema in DATABASE_URLJeremy Baker2016-02-041-1/+1
| | | | | | | | | | | | | | | | | If you set the DATABASE_URL environment variable to `mydatabase` by accident, you end up getting a series of errors that are hard to trace. For example: ``` warning: already initialized constant ActiveRecord::Base::OrmAdapter ``` Turns out the cascade of errors is due to the error raised by `.tr` being called on `nil`. This commit makes sure that `scheme` is set before calling `.tr` on it. My previous iteration used `@uri.scheme.try(:tr, '-', '_')` but using the `&&` logical operator is a fair bit faster: http://stackoverflow.com/questions/26655032/try-vs-performance With this change, the error message becomes much more understandable: ``` FATAL: database "mydatabase" does not exist (ActiveRecord::NoDatabaseError) ```
* Merge pull request #23460 from ↵Sean Griffin2016-02-031-1/+1
|\ | | | | | | | | kamipo/innodb_supports_fulltext_and_spatial_indexes InnoDB supports FULLTEXT and Spatial Indexes [ci skip]
| * InnoDB supports FULLTEXT and Spatial Indexes [ci skip]Ryuta Kamizono2016-02-041-1/+1
| | | | | | | | | | https://dev.mysql.com/doc/refman/5.7/en/innodb-fulltext-index.html https://dev.mysql.com/doc/refman/5.7/en/creating-spatial-indexes.html
* | Merge pull request #23458 from kamipo/activerecord_supports_mysql_5.0_and_upSean Griffin2016-02-031-10/+7
|\ \ | | | | | | Active Record supports MySQL >= 5.0
| * | Active Record supports MySQL >= 5.0Ryuta Kamizono2016-02-041-10/+7
| |/ | | | | | | | | Currently some features uses `information_schema` (e.g. foreign key support). `information_schema` introduced since MySQL 5.0.
* / SQLite 2 support has been dropped [ci skip]Ryuta Kamizono2016-02-042-3/+0
|/
* Mention supported PG version in the error message.Prathamesh Sonpatki2016-02-031-1/+1
|
* The minimum supported version of PostgreSQL is now >= 9.1Remo Mueller2016-02-021-3/+2
|
* Fix corrupt transaction state caused by `before_commit` exceptionsJeremy Daer2016-02-011-2/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | When a `before_commit` callback raises, the database is rolled back but AR's record of the current transaction is not, leaving the connection in a perpetually broken state that affects all future users of the connection: subsequent requests, jobs, etc. They'll think a transaction is active when none is, so they won't BEGIN on their own. This manifests as missing `after_commit` callbacks and broken ROLLBACKs. This happens because `before_commit` callbacks fire before the current transaction is popped from the stack, but the exception-handling path they hit assumes that the current transaction was already popped. So the database ROLLBACK is issued, but the transaction stack is left intact. Common cause: deadlocked `#touch`, which is now implemented with `before_commit` callbacks. What's next: * We shouldn't allow active transaction state when checking in or out from the connection pool. Verify that conns are clean. * Closer review of txn manager sad paths. Are we missing other spots where we'd end up with incorrect txn state? What's the worst that can happen if txn state drifts? How can we guarantee it doesn't and contain the fallout if it does? Thanks for @tomafro for expert diagnosis!
* Avoid extra `show variables` in migrationRyuta Kamizono2016-02-012-8/+10
| | | | | | | | | | | | | `initialize_schema_migrations_table` is called in every migrations. https://github.com/rails/rails/blob/v5.0.0.beta1/activerecord/lib/active_record/migration.rb#L1080 https://github.com/rails/rails/blob/v5.0.0.beta1/activerecord/lib/active_record/schema.rb#L51 This means that extra `show variables` is called regardless of the existence of `schema_migrations` table. This change is to avoid extra `show variables` if `schema_migrations` table exists.
* Extract `ExplainPrettyPrinter` to appropriate filesRyuta Kamizono2016-02-017-119/+137
|
* `OID::Money.precision` is unused since #15239Ryuta Kamizono2016-01-312-8/+0
| | | | | | | | p PostgreSQLAdapter::OID::Money.precision # => 19 p PostgreSQLAdapter::OID::Money.new.precision # => nil
* Revert "Merge pull request #23346 from kamipo/refactor_oid_money_precision"Rafael Mendonça França2016-01-302-5/+9
| | | | | | | This reverts commit ff835f90800a3e4122d64606cb328908c2e0e071, reversing changes made to c4d85dfbc71043e2a746acd310e32f4f04db801a. Reason: This broke the tests. We will add back after investigated.
* Merge pull request #23345 from ↵Rafael França2016-01-301-0/+6
|\ | | | | | | | | yui-knk/warning_when_composite_primary_key_is_detected Warn if `AR.primary_key` is called for a table who has composite prim…
| * Warn if `AR.primary_key` is called for a table who has composite primary keyyui-knk2016-01-301-0/+6
| | | | | | | | | | | | | | | | If `AR.primary_key` is called for a table who has composite primary key, the method returns `nil`. This behavior sometimes generates invalid SQL. The first time developers notice to invalid SQL is when they execute SQL. This commit enables developers to know they are doing something dangerous as soon as possible.
* | Merge pull request #23349 from kamipo/refactor_column_existsRafael França2016-01-301-7/+8
|\ \ | | | | | | Refactor `column_exists?` in `SchemaStatements`
| * | Refactor `column_exists?` in `SchemaStatements`Ryuta Kamizono2016-01-301-7/+8
| |/
* | Merge pull request #23355 from kamipo/fix_bigint_for_enum_columnsRafael França2016-01-301-1/+1
|\ \ | | | | | | Fix `bigint?` for Enum columns in MySQL
| * | Fix `bigint?` for Enum columns in MySQLRyuta Kamizono2016-01-311-1/+1
| |/ | | | | | | Follow up to #22896.
* | Merge pull request #23353 from ↵Rafael França2016-01-301-6/+0
|\ \ | | | | | | | | | | | | kamipo/remove_unused_lost_connection_error_messages Remove unused `LOST_CONNECTION_ERROR_MESSAGES`
| * | Remove unused `LOST_CONNECTION_ERROR_MESSAGES`Ryuta Kamizono2016-01-311-6/+0
| |/ | | | | | | | | `LOST_CONNECTION_ERROR_MESSAGES` was added by f384582. But currently unused from anywhere.
* | Merge pull request #23347 from yui-knk/explicitly_define_columns_as_interfaceRafael França2016-01-301-1/+3
|\ \ | | | | | | Explicitly define `columns` method as an interface
| * | Explicitly define `columns` method as an interfaceyui-knk2016-01-301-1/+3
| |/ | | | | | | | | | | `ActiveRecord::ConnectionAdapters::SchemaStatements#columns` is defined here as an interface method here. So changes to raise `NotImplementedError` same as `tables`, `views` ...etc.
* / Refactor `OID::Money.precision`Ryuta Kamizono2016-01-302-9/+5
|/
* Merge pull request #23252 from kamipo/remove_limit_11Rafael França2016-01-291-1/+0
|\ | | | | Remove `limit: 11` as backward-compatibility with Rails 2.0
| * Remove `limit: 11` as backward-compatibility with Rails 2.0Ryuta Kamizono2016-01-271-1/+0
| | | | | | | | | | | | | | Integer limit as a byte size was introduced from Rails 2.1. `limit: 11` is not a byte size, but take care for backward-compatibility with Rails 2.0 (a892af6). Integer limit out of range should be allowed to raise by #6349. I think we should remove this backward-compatibility.
* | Merge pull request #23188 from jcoleman/ar-connection-execute-docs-clarificationRafael França2016-01-292-1/+7
|\ \ | | | | | | Clarify DatabaseStatements#execute docs re: memory usage.
| * | Clarify DatabaseStatements#execute docs re: memory usage.James Coleman2016-01-222-1/+7
| | |
* | | Fix a bug with initialize schema_migrations tableMikhail Grachev2016-01-281-1/+1
| | | | | | | | | | | | | | | | | | | | | This line causes an error when executing the command: `rails db:drop db:create db:schema:load` ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR: syntax error at or near "{" LINE 1: ...NSERT INTO "schema_migrations" (version) VALUES (#{v}), (#{v...
* | | INSERT INTO schema_migrations in 1 SQLAkira Matsuda & Naoto Koshikawa2016-01-271-10/+8
| |/ |/| | | | | | | | | | | We found that inserting all 600 schema_migrations for our mid-sized app takes about a minute on a cloud based CI environment. I assume that the original code did not use multi-row-insert because SQLite3 was not supporting the syntax back then, but it's been supported since 3.7.11: http://www.sqlite.org/releaselog/3_7_11.html
* | Pare back default `index` option for the migration generatorPrathamesh Sonpatki2016-01-241-1/+1
|/ | | | | | | | | | - Using `references` or `belongs_to` in migrations will always add index for the referenced column by default, without adding `index:true` option to generated migration file. - Users can opt out of this by passing `index: false`. - Legacy migrations won't be affected by this change. They will continue to run as they were before. - Fixes #18146
* Merge pull request #20005 from kamipo/default_expression_supportRafael França2016-01-166-20/+36
|\ | | | | Add `:expression` option support on the schema default
| * Fix extract default with CURRENT_TIMESTUMPRyuta Kamizono2016-01-131-2/+6
| |
| * Fix extract default with CURRENT_DATERyuta Kamizono2016-01-131-3/+8
| | | | | | | | The default 'now'::date is CURRENT_DATE.
| * Add expression support on the schema defaultRyuta Kamizono2016-01-134-15/+22
| | | | | | | | | | | | | | | | Example: create_table :posts do |t| t.datetime :published_at, default: -> { 'NOW()' } end
* | Merge pull request #23067 from ↵Rafael França2016-01-162-22/+14
|\ \ | | | | | | | | | | | | kamipo/sql_for_insert_returns_values_for_passing_to_exec_insert `sql_for_insert` returns values for passing to `exec_insert`
| * | `sql_for_insert` returns values for passing to `exec_insert`Ryuta Kamizono2016-01-152-22/+14
| | |
* | | `last_insert_id_value` and `last_insert_id` are unused anymoreRyuta Kamizono2016-01-151-9/+1
|/ / | | | | | | These methods are private and unused from anywhere.
* / `substitute_at` is no longer usedRyuta Kamizono2016-01-141-6/+0
|/ | | | Arel handles substitution for bind parameters by now.
* fix regression when loading fixture files with symbol keys.Yves Senn2016-01-131-2/+3
| | | | Closes #22584.
* Extract `MySQL::TypeMetadata` class to ↵Ryuta Kamizono2016-01-112-28/+34
| | | | `connection_adapters/mysql/type_metadata.rb`
* Extract `MySQL::Column` class to `connection_adapters/mysql/column.rb`Ryuta Kamizono2016-01-112-46/+52
|
* Refactor tz aware types, add support for PG rangesSean Griffin2016-01-082-1/+12
| | | | | | | | | | | | | | | | | This is an alternate implementation to #22875, that generalizes a lot of the logic that type decorators are going to need, in order to have them work with arrays, ranges, etc. The types have the ability to map over a value, with the default implementation being to just yield that given value. Array and Range give more appropriate definitions. This does not automatically make ranges time zone aware, as they need to be added to the `time_zone_aware` types config, but we could certainly make that change if we feel it is appropriate. I do think this would be a breaking change however, and should at least have a deprecation cycle. Closes #22875. /cc @matthewd
* Merge pull request #22967 from schneems/schneems/generic-metadataSean Griffin2016-01-082-0/+5
|\ | | | | Prevent destructive action on production database
| * [ci skip] Add comment to remove silenced code.schneems2016-01-071-0/+1
| |
| * Prevent destructive action on production databaseschneems2016-01-071-0/+4
| | | | | | | | | | | | | | This PR introduces a key/value type store to Active Record that can be used for storing internal values. It is an alternative implementation to #21237 cc @sgrif @matthewd. It is possible to run your tests against your production database by accident right now. While infrequently, but as an anecdotal data point, Heroku receives a non-trivial number of requests for a database restore due to this happening. In these cases the loss can be large. To prevent against running tests against production we can store the "environment" version that was used when migrating the database in a new internal table. Before executing tests we can see if the database is a listed in `protected_environments` and abort. There is a manual escape valve to force this check from happening with environment variable `DISABLE_DATABASE_ENVIRONMENT_CHECK=1`.
* | Merge pull request #22973 from kamipo/fix_select_values_method_signatureRafael França2016-01-082-4/+4
|\ \ | | | | | | Fix `select_values` method signature for consistency
| * | Fix `select_values` method signature for consistencyRyuta Kamizono2016-01-082-4/+4
| | |
* | | `{update|delete}_sql` are almost the same as `{update|delete}`Ryuta Kamizono2016-01-084-25/+2
|/ / | | | | | | Simply `{update|delete}_sql` aliases to `{update|delete}`.