aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/primary_keys_test.rb
Commit message (Collapse)AuthorAgeFilesLines
* Correctly dump native timestamp types for MySQLRyuta Kamizono2017-02-231-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The native timestamp type in MySQL is different from datetime type. Internal representation of the timestamp type is UNIX time, This means that timestamp columns are affected by time zone. ``` > SET time_zone = '+00:00'; Query OK, 0 rows affected (0.00 sec) > INSERT INTO time_with_zone(ts,dt) VALUES (NOW(),NOW()); Query OK, 1 row affected (0.02 sec) > SELECT * FROM time_with_zone; +---------------------+---------------------+ | ts | dt | +---------------------+---------------------+ | 2016-02-07 22:11:44 | 2016-02-07 22:11:44 | +---------------------+---------------------+ 1 row in set (0.00 sec) > SET time_zone = '-08:00'; Query OK, 0 rows affected (0.00 sec) > SELECT * FROM time_with_zone; +---------------------+---------------------+ | ts | dt | +---------------------+---------------------+ | 2016-02-07 14:11:44 | 2016-02-07 22:11:44 | +---------------------+---------------------+ 1 row in set (0.00 sec) ```
* Add CHANGELOG entry for #27384 and #27762Ryuta Kamizono2017-02-171-4/+4
|
* Deprecate `supports_primary_key?`Ryuta Kamizono2017-02-121-11/+13
| | | | | | | | | | | | `supports_primary_key?` was added to determine if `primary_key` is implemented in the adapter in f060221. But we already use `primary_key` without `supports_primary_key?` (207f266, 5f3cf42) and using `supports_primary_key?` has been removed in #1318. This means that `supports_primary_key?` is no longer used in the internal and Active Record doesn't work without `primary_key` is implemented (all adapters must implement `primary_key`). Closes #27977
* Fix bigint primary key with unsignedRyuta Kamizono2017-02-101-11/+23
| | | | | | | Currently schema dumper lost the unsigned option when primary key is defined as bigint with unsigned. This commit fixes the issue. Closes #27960
* Fix `test_composite_primary_key_out_of_order`Ryuta Kamizono2017-02-101-2/+8
| | | | | `test_composite_primary_key_out_of_order` should use `barcodes_reverse` table.
* Simplify and speed up Postgres query for primary_keysJordan Lewis2017-02-091-0/+9
| | | | | | | | | | | | | | | | | | primary_keys(table) needs to query various metadata tables in Postgres to determine the primary key for the table. Previously, it did so using a complex common table expression against pg_constraint and pg_attribute. This patch simplifies the query by joining pg_index against pg_attribute instead of going through pg_constraint. This avoids an expensive unnest, window function query, and common table expression. EXPLAINing these queries in Postgres against a database with a single table with a composite primary key shows a 66% reduction in the plan and execute latencies. This is significant during application startup time, especially against very large schemas, where these queries would be even slower and more numerous. Closes #27949
* Fix inspection behavior when the :id column is not primary keynamusyaka2017-02-091-0/+7
|
* Restore custom primary key tests lost at #26266Ryuta Kamizono2017-02-041-25/+43
| | | | | Some custom primary key tests (added at #17631, #17696, #18220, #18228) were lost at #26266. Restore the tests to improve test coverage.
* Correctly dump integer-like primary key with default nilRyuta Kamizono2017-02-041-20/+19
| | | | | | | The PR #27384 changed integer-like primary key to be autoincrement unless an explicit default. This means that integer-like primary key is restored as autoincrement unless dumping the default nil explicitly. We should dump integer-like primary key with default nil correctly.
* Remove useless `test_supports_primary_key`Ryuta Kamizono2016-12-191-6/+0
| | | | | `supports_primary_key?` method is defined in `AbstractAdapter` so does not raise any errors.
* Merge pull request #27274 from kamipo/primary_key_with_auto_increment_and_bigintMatthew Draper2016-12-061-8/+18
|\ | | | | Make `:auto_increment` option works on `:bigint`
| * Make `:auto_increment` option works on `:bigint`Ryuta Kamizono2016-12-061-8/+18
| | | | | | | | Follow up to #27272.
* | Make pg adapter use bigserial for pk by defaultPavel Pravosud2016-12-051-0/+7
| |
* | Change MySQL and Postgresql to use Bigint primary keysJon McCartie2016-12-051-52/+29
|/
* Make `:auto_increment` to internal primary key optionRyuta Kamizono2016-12-061-0/+27
| | | | | | Using `:auto_increment` option for abstracting the DB-specific auto incremental types. It is worth to ease to implement the compatibility layer.
* Add more rubocop rules about whitespacesRafael Mendonça França2016-10-291-2/+2
|
* modernizes hash syntax in activerecordXavier Noria2016-08-061-2/+2
|
* applies new string literal convention in activerecord/testXavier Noria2016-08-061-25/+25
| | | | | The current code base is not uniform. After some discussion, we have chosen to go with double quotes by default.
* Move the warning about composite primary key to `AttributeMethods::PrimaryKey`Ryuta Kamizono2016-07-021-2/+8
| | | | | | | | | | | Actually schema dumper/creation supports composite primary key (#21614). Therefore it should not show the warning about composite primary key in connection adapter. This change moves the warning to `AttributeMethods::PrimaryKey` and suppress the warning for habtm join table. Fixes #25388.
* Merge pull request #25620 from kamipo/create_without_primary_keyRafael França2016-07-011-0/+8
|\ | | | | Pass `pk: false` to `connection.insert` explicitly if do not have a primary key
| * Pass `pk: false` to `connection.insert` explicitly if do not have a primary keyRyuta Kamizono2016-07-011-0/+8
| | | | | | | | | | | | Because causing an extra query by `sql_for_insert` for guessing a primary key. https://github.com/rails/rails/blob/v5.0.0/activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb#L121-L125
* | Extract foreign key action from `information_schema`Ryuta Kamizono2016-06-071-12/+0
|/ | | | Fixes #25300.
* Primary key should be `NOT NULL`Ryuta Kamizono2016-03-121-1/+1
| | | | | | | Follow up to #18228. In MySQL and PostgreSQL, primary key is to be `NOT NULL` implicitly. But in SQLite it must be specified `NOT NULL` explicitly.
* Extract `default_primary_key?` to refactor `column_spec_for_primary_key`Ryuta Kamizono2016-03-111-2/+2
|
* Add a test for primary key should be not nullRyuta Kamizono2016-02-291-3/+4
|
* remove args from assert_nothing_raised in testsTara Scherner de la Fuente2016-02-221-1/+1
|
* Remove duplicated composite primary key testsRyuta Kamizono2016-02-011-1/+1
|
* Merge pull request #23345 from ↵Rafael França2016-01-301-0/+7
|\ | | | | | | | | 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/+7
| | | | | | | | | | | | | | | | 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.
* | There is no need to define test if a connection does not support primary_keyyui-knk2016-01-311-11/+9
|/
* Remove legacy mysql adapterAbdelkader Boudih2015-12-171-3/+3
|
* Deprecate `#table_exists?`, `#tables` and passing arguments to `#talbes`yui-knk2015-11-091-1/+1
| | | | | | | | | | Reported on #21509, how views is treated by `#tables` are differ by each adapters. To fix this different behavior, after Rails 5.0 is released, deprecate `#tables`. And `#table_exists?` would check both tables and views. To make their behavior consistent with `#tables`, after Rails 5.0 is released, deprecate `#table_exists?`.
* Allow bigint with default nil for avoiding auto increment primary keyRyuta Kamizono2015-11-021-0/+26
| | | | Such as #10404, #18206.
* Merge pull request #17696 from kamipo/unsigned_integer_supportJeremy Daer2015-09-191-1/+2
|\ | | | | | | Add `unsigned` support for numeric data types in MySQL
| * Add `unsigned` support for numeric data types in MySQLRyuta Kamizono2015-09-181-1/+2
| | | | | | | | | | | | | | | | | | | | | | Example: create_table :foos do |t| t.integer :unsigned_integer, unsigned: true t.bigint :unsigned_bigint, unsigned: true t.float :unsigned_float, unsigned: true t.decimal :unsigned_decimal, unsigned: true, precision: 10, scale: 2 end
* | Correctly dump composite primary keyRyuta Kamizono2015-09-201-0/+27
|/ | | | | | | | | Example: create_table :barcodes, primary_key: ["region", "code"] do |t| t.string :region t.integer :code end
* Added test case for serial? method when sequence name is not quotedPrathamesh Sonpatki2015-05-221-0/+6
| | | | - Followup of https://github.com/rails/rails/pull/20190/.
* Fix `serial?` with quoted sequence nameRyuta Kamizono2015-05-181-0/+8
|
* use Model.reset_column_information to clear table cache connection wide.Kuldeep Aggarwal2015-03-311-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `widgets` table is being created in `primary_keys_test.rb` for PostgreSQLAdapter, MysqlAdapter, Mysql2Adapter and it makes test to fail earlier. Before: `bundle exec rake mysql2:test` ``` Finished in 127.287669s, 35.5258 runs/s, 97.8885 assertions/s. 1) Error: PersistenceTest::SaveTest#test_save_touch_false: ActiveModel::UnknownAttributeError: unknown attribute 'name' for #<Class:0x0000000a7d6ef0>. /home/kd/projects/kd-rails/activerecord/lib/active_record/attribute_assignment.rb:36:in `rescue in _assign_attribute' /home/kd/projects/kd-rails/activerecord/lib/active_record/attribute_assignment.rb:34:in `_assign_attribute' /home/kd/projects/kd-rails/activemodel/lib/active_model/attribute_assignment.rb:40:in `block in _assign_attributes' /home/kd/projects/kd-rails/activemodel/lib/active_model/attribute_assignment.rb:39:in `each' /home/kd/projects/kd-rails/activemodel/lib/active_model/attribute_assignment.rb:39:in `_assign_attributes' /home/kd/projects/kd-rails/activerecord/lib/active_record/attribute_assignment.rb:26:in `_assign_attributes' /home/kd/projects/kd-rails/activemodel/lib/active_model/attribute_assignment.rb:33:in `assign_attributes' /home/kd/projects/kd-rails/activerecord/lib/active_record/core.rb:293:in `initialize' /home/kd/projects/kd-rails/activerecord/lib/active_record/inheritance.rb:61:in `new' /home/kd/projects/kd-rails/activerecord/lib/active_record/inheritance.rb:61:in `new' /home/kd/projects/kd-rails/activerecord/lib/active_record/persistence.rb:50:in `create!' /home/kd/projects/kd-rails/activerecord/test/cases/persistence_test.rb:913:in `test_save_touch_false' 4522 runs, 12460 assertions, 0 failures, 1 errors, 4 skips ``` After: `bundle exec rake mysql2:test` ``` Finished in 135.785086s, 33.3026 runs/s, 91.7774 assertions/s. 4522 runs, 12462 assertions, 0 failures, 0 errors, 4 skips ```
* Closes rails/rails#18864: Renaming transactional fixtures to transactional testsBrandon Weiss2015-03-161-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | I’m renaming all instances of `use_transcational_fixtures` to `use_transactional_tests` and “transactional fixtures” to “transactional tests”. I’m deprecating `use_transactional_fixtures=`. So anyone who is explicitly setting this will get a warning telling them to use `use_transactional_tests=` instead. I’m maintaining backwards compatibility—both forms will work. `use_transactional_tests` will check to see if `use_transactional_fixtures` is set and use that, otherwise it will use itself. But because `use_transactional_tests` is a class attribute (created with `class_attribute`) this requires a little bit of hoop jumping. The writer method that `class_attribute` generates defines a new reader method that return the value being set. Which means we can’t set the default of `true` using `use_transactional_tests=` as was done previously because that won’t take into account anyone using `use_transactional_fixtures`. Instead I defined the reader method manually and it checks `use_transactional_fixtures`. If it was set then it should be used, otherwise it should return the default, which is `true`. If someone uses `use_transactional_tests=` then it will overwrite the backwards-compatible method with whatever they set.
* Allow `:limit` option for MySQL bigint primary key supportRyuta Kamizono2015-02-241-0/+10
| | | | | | | | | | | | | Example: create_table :foos, id: :primary_key, limit: 8 do |t| end # or create_table :foos, id: false do |t| t.column :id, limit: 8 end
* Prefer `drop_table if_exists: true` over raw SQLRyuta Kamizono2015-02-181-1/+1
| | | | | Lowercase raw SQL has been replaced by 07b659c already. This commit replaces everything else of raw SQL.
* Replace `if exists` with `table_exists?` and drop table statement with ↵Yasuo Honda2015-01-211-1/+1
| | | | | | | `drop_table` since 'drop table if exists' statement does not always work with some databases such as Oracle. also Oracle drop table statement will not drop sequence objects.
* Improve a dump of the primary key support.Ryuta Kamizono2014-12-291-0/+19
| | | | If it is not a default primary key, correctly dump the type and options.
* Add bigint primary key support for MySQL.Ryuta Kamizono2014-12-281-6/+13
| | | | | | | Example: create_table :foos, id: :bigint do |t| end
* Support for any type primary key.Ryuta Kamizono2014-12-281-0/+24
|
* Define id_was to get the previous value of the primary keyRafael Mendonça França2014-08-061-0/+10
| | | | | | | | | Currently when we call id_was and we have a custom primary key name Active Record will return the current value of the primary key. This make impossible to correctly do an update operation if you change the id. Fixes #16413
* Move writing unknown column exception to null attributeSean Griffin2014-06-261-2/+10
| | | | | | Making this change revealed several subtle bugs related to models with no primary key, and anonymous classes. These have been fixed as well, with regression tests added.
* test refactor, don't hardcode `primary_key_prefix_type` default.Yves Senn2014-06-061-0/+3
| | | | /cc @zuhao
* Remove `Column#primary`Sean Griffin2014-05-231-32/+0
| | | | | | | | It appears to have been used at some point in the past, but is no longer used in any meaningful way. Whether a column is considered primary is a property of the model, not the schema/column. This also removes the need for yet another layer of caching of the model's schema, and we can leave that to the schema cache.