aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters
Commit message (Collapse)AuthorAgeFilesLines
* Support microsecond datetime precision on MariaDB 5.3+.Jeremy Daer2016-04-081-1/+5
| | | | | | | | | We support microsecond datetime precision for MySQL 5.6.4+. MariaDB has supported it since 5.3.0, but even 10.x versions return a compatible version string like `5.5.5-10.1.8-MariaDB-log` which we parse as 5.5.5, before MySQL supported microsecond precision. Specialize our version check to account for MariaDB to fix.
* Merge pull request #24078 from kamipo/show_variablesRafael França2016-04-061-2/+1
|\ | | | | Simply use `select_value` in `show_variable`
| * Simply use `select_value` in `show_variable`Ryuta Kamizono2016-03-061-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `SELECT @@name` statement returns only single row or `StatementInvalid`. ``` root@localhost [activerecord_unittest] > SELECT @@version; +-----------+ | @@version | +-----------+ | 5.7.9-log | +-----------+ 1 row in set (0.00 sec) root@localhost [activerecord_unittest] > SELECT @@unknown_variable; ERROR 1193 (HY000): Unknown system variable 'missing_variable' ```
* | Merge pull request #24374 from kamipo/move_quoting_methods_to_quoting_moduleRafael França2016-04-064-44/+38
|\ \ | | | | | | Move quoting methods to `Quoting` module
| * | Make `QUOTED_TRUE` and `QUOTED_FALSE` to public because these are used in ↵Ryuta Kamizono2016-04-062-6/+6
| | | | | | | | | | | | `MysqlString`
| * | Move `quoted_date`, `quote_string` and `quote_table_name_for_assignment` ↵Ryuta Kamizono2016-04-054-22/+16
| | | | | | | | | | | | methods to `Quoting` module
| * | Make to private `QUOTED_TRUE` and `QUOTED_FALSE` constantsRyuta Kamizono2016-04-052-18/+18
| | |
* | | Remove hard-coded backticks in SQL statementsHarsimran Singh Maan2016-04-051-3/+3
|/ / | | | | The hard-coded back-ticks made it hard to use a different char for quoting db fields. This checkin replaces it with quote_table_name.
* | Use `QUOTED_TRUE` and `QUOTED_FALSE` instead of magic stringsyui-knk2016-04-051-4/+4
| | | | | | | | | | | | Because we define `QUOTED_TRUE` as `"1"` and `QUOTED_FALSE` as `"0"`. And add test cases to ensure this commit does not break current behavior even if the value of `attributes_before_type_cast` is false.
* | Move `@quoted_{column|table}_names` cache up to the abstract adapterRyuta Kamizono2016-03-317-19/+20
| |
* | Merge pull request #24368 from kamipo/make_to_private_the_visibilitySean Griffin2016-03-304-32/+54
|\ \ | | | | | | Make to private the visibility of `_quote` and `_type_cast`
| * | Make to private the visibility of `_quote` and `_type_cast`Ryuta Kamizono2016-03-304-32/+54
| | |
* | | Add a test case for create a record with primary key as zeroRyuta Kamizono2016-03-301-0/+1
|/ /
* | Fix description for method ↵Bogdan2016-03-271-2/+2
| | | | | | | | ActiveRecord::ConnectionAdapters::SchemaStatements#add_timestamps [ci skip]
* | Append sql_mode instead of overwriting in strict modeRyuta Kamizono2016-03-131-3/+12
| | | | | | | | For keep the default SQL mode.
* | Merge pull request #23797 from ↵Rafael França2016-03-111-3/+3
|\ \ | | | | | | | | | | | | kamipo/case_sensitive_comparison_for_non_string_column The BINARY Operator is only needed for string columns
| * | The BINARY Operator is only needed for string columnsRyuta Kamizono2016-02-221-3/+3
| | | | | | | | | | | | Follow up to #13040.
* | | Merge pull request #24054 from kamipo/extract_default_primary_keyRafael França2016-03-113-19/+19
|\ \ \ | | | | | | | | Extract `default_primary_key?` to refactor `column_spec_for_primary_key`
| * | | Extract `default_primary_key?` to refactor `column_spec_for_primary_key`Ryuta Kamizono2016-03-113-19/+19
| | | |
* | | | Merge pull request #24087 from kamipo/dump_bigint_instead_of_integer_limit_8Rafael França2016-03-112-6/+6
|\ \ \ \ | | | | | | | | | | Dump `bigint` instead of `integer` with `limit: 8` for schema dumper
| * | | | Dump `bigint` instead of `integer` with `limit: 8` for schema dumperRyuta Kamizono2016-03-112-6/+6
| |/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Before: ```ruby create_table "big_numbers", force: :cascade do |t| t.integer "bigint_column", limit: 8 end ``` After: ```ruby create_table "big_numbers", force: :cascade do |t| t.bigint "bigint_column" end ```
* | | | Merge pull request #23677 from kamipo/passing_table_name_to_column_initializeRafael França2016-03-117-25/+31
|\ \ \ \ | |/ / / |/| | | Passing `table_name` to `Column#initialize` to avoid `instance_variable_set`
| * | | Passing `table_name` to `Column#initialize` to avoid `instance_variable_set`Ryuta Kamizono2016-03-085-17/+11
| | | |
| * | | Initialize `column.table_name` immediately for `column.serial?` correctly ↵Ryuta Kamizono2016-03-086-17/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | working Currently the results of `column.serial?` is not correct. For `column.serial?` correctly working, initialize `column.table_name` immediately.
* | | | Merge pull request #23958 from kamipo/fix_bigserial_appears_with_limit_8Rafael França2016-03-111-0/+4
|\ \ \ \ | | | | | | | | | | Fix bigserial appears with limit 8 for schema dumper
| * | | | Fix bigserial appears with limit 8 for schema dumperRyuta Kamizono2016-03-041-0/+4
| | |_|/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Before: ```ruby create_table "postgresql_big_serials", force: :cascade do |t| t.bigserial "seq", limit: 8, null: false end ``` After: ```ruby create_table "postgresql_big_serials", force: :cascade do |t| t.bigserial "seq", null: false end ```
* | | | Fixed comments of add_foreign_key methodSalman Afzal Siddiqui2016-03-101-2/+2
| | | | | | | | | | | | The comments of add_foreign_key method was displaying incorrect constraint name.
* | | | use same name to type objectyuuji.yaginuma2016-03-091-1/+1
| |/ / |/| | | | | | | | Follow up to #24079
* | | Merge pull request #24034 from kamipo/remove_outdated_commentArthur Nogueira Neves2016-03-071-1/+0
|\ \ \ | | | | | | | | Remove outdated comment [ci skip]
| * | | Remove outdated comment [ci skip]Ryuta Kamizono2016-03-041-1/+0
| |/ / | | | | | | | | | Currently column options handled by the type map in Rails 4.2.
* / / No need to extract a limit for a boolean typeRyuta Kamizono2016-03-042-5/+1
|/ /
* | Merge pull request #23086 from kamipo/deprecate_insert_update_delete_sqlRafael França2016-03-021-0/+3
|\ \ | | | | | | Deprecate `{insert|update|delete}_sql` in `DatabaseStatements`
| * | Deprecate `{insert|update|delete}_sql` in `DatabaseStatements`Ryuta Kamizono2016-03-021-0/+3
| | | | | | | | | | | | | | | Originally, `{insert|update|delete}_sql` is protected methods. We can use the `{insert|update|delete}` public methods instead.
* | | remove trailing whitespace.Yves Senn2016-03-021-1/+1
| | |
* | | Remove not needed `exec_insert` in mysql2 adapterRyuta Kamizono2016-03-021-4/+0
|/ / | | | | | | Simply it is sufficient to use the method in the super class.
* | Merge pull request #23961 from ↵Rafael França2016-03-013-8/+8
|\ \ | | | | | | | | | | | | kamipo/exclude_name_and_type_from_prepare_column_options Exclude `:name` and `:type` from `prepare_column_options`
| * | Exclude `:name` and `:type` from `prepare_column_options`Ryuta Kamizono2016-02-293-8/+8
| | | | | | | | | | | | Actually `:name` and `:type` are not column options.
* | | Merge pull request #23953 from ↵Rafael França2016-03-011-1/+1
|\ \ \ | | | | | | | | | | | | | | | | kamipo/fix_tests_failure_with_prepared_statements_false Fix tests failure with `prepared_statements: false`
| * | | Fix `NoMethodError: undefined method `preparable'`Ryuta Kamizono2016-02-291-1/+1
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The error occurs with `prepared_statements: false`: ``` $ ARCONN=postgresql bundle exec ruby -w -Itest test/cases/associations_test.rb Using postgresql Run options: --seed 27753 ...E.................................... Finished in 0.713115s, 56.0919 runs/s, 91.1494 assertions/s. 1) Error: AssociationsTest#test_force_reload_is_uncached: NoMethodError: undefined method `preparable' for #<Arel::Visitors::PostgreSQL:0x007f8699702570> /Users/kamipo/src/github.com/rails/rails/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb:68:in `block in select_all' /Users/kamipo/src/github.com/rails/rails/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb:83:in `cache_sql' /Users/kamipo/src/github.com/rails/rails/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb:68:in `select_all' /Users/kamipo/src/github.com/rails/rails/activerecord/lib/active_record/querying.rb:39:in `find_by_sql' /Users/kamipo/src/github.com/rails/rails/activerecord/lib/active_record/relation.rb:699:in `exec_queries' /Users/kamipo/src/github.com/rails/rails/activerecord/lib/active_record/association_relation.rb:32:in `exec_queries' /Users/kamipo/src/github.com/rails/rails/activerecord/lib/active_record/relation.rb:580:in `load' /Users/kamipo/src/github.com/rails/rails/activerecord/lib/active_record/relation.rb:260:in `records' /Users/kamipo/src/github.com/rails/rails/activerecord/lib/active_record/relation.rb:256:in `to_a' /Users/kamipo/src/github.com/rails/rails/activerecord/lib/active_record/associations/collection_association.rb:458:in `get_records' /Users/kamipo/src/github.com/rails/rails/activerecord/lib/active_record/associations/collection_association.rb:473:in `find_target' /Users/kamipo/src/github.com/rails/rails/activerecord/lib/active_record/associations/collection_association.rb:412:in `load_target' /Users/kamipo/src/github.com/rails/rails/activerecord/lib/active_record/associations/collection_proxy.rb:45:in `load_target' /Users/kamipo/src/github.com/rails/rails/activerecord/lib/active_record/associations/collection_proxy.rb:983:in `records' /Users/kamipo/src/github.com/rails/rails/activerecord/lib/active_record/relation/delegation.rb:39:in `each' test/cases/associations_test.rb:116:in `block (2 levels) in test_force_reload_is_uncached' /Users/kamipo/src/github.com/rails/rails/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb:32:in `cache' /Users/kamipo/src/github.com/rails/rails/activerecord/lib/active_record/query_cache.rb:9:in `cache' test/cases/associations_test.rb:115:in `block in test_force_reload_is_uncached' /Users/kamipo/src/github.com/rails/rails/activesupport/lib/active_support/deprecation/reporting.rb:36:in `silence' /Users/kamipo/src/github.com/rails/rails/activesupport/lib/active_support/deprecation/instance_delegator.rb:19:in `silence' test/cases/associations_test.rb:114:in `test_force_reload_is_uncached' ```
* | | Merge pull request #23954 from kamipo/fix_undefined_method_fieldsRafael França2016-03-011-1/+1
|\ \ \ | | | | | | | | Fix `NoMethodError: undefined method `fields' for nil:NilClass`
| * | | Fix `NoMethodError: undefined method `fields' for nil:NilClass`Ryuta Kamizono2016-02-291-1/+1
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently `exec_query` raises `NoMethodError` when executing no result queries (`INSERT`, `UPDATE`, `DELETE`, and all DDL) in mysql2 adapter. ``` irb(main):002:0> conn.execute("create table t(a int)") (43.3ms) create table t(a int) => nil irb(main):003:0> conn.execute("insert into t values (1)") (19.3ms) insert into t values (1) => nil irb(main):004:0> conn.exec_query("insert into t values (1)") SQL (28.6ms) insert into t values (1) NoMethodError: undefined method `fields' for nil:NilClass ```
* | | Merge pull request #23807 from matthewd/executorMatthew Draper2016-03-022-20/+0
|\ \ \ | | | | | | | | Publish AS::Executor and AS::Reloader APIs
| * | | Publish AS::Executor and AS::Reloader APIsMatthew Draper2016-03-022-20/+0
| |/ / | | | | | | | | | | | | | | | These should allow external code to run blocks of user code to do "work", at a similar unit size to a web request, without needing to get intimate with ActionDipatch.
* | | Merge pull request #22170 from ↵Matthew Draper2016-03-022-14/+42
|\ \ \ | |/ / |/| | | | | | | | samphilipd/sam/properly_deallocate_prepared_statements_outside_of_transaction Correctly deallocate prepared statements if we fail inside a transaction
| * | Correctly deallocate prepared statements if we fail inside a transactionSam Davies2015-11-052-14/+42
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Addresses issue #12330 Overview ======== Cached postgres prepared statements become invalidated if the schema changes in a way that it affects the returned result. Examples: - adding or removing a column then doing a 'SELECT *' - removing the foo column then doing a 'SELECT bar.foo' In normal operation this isn't a problem, we can rescue the error, deallocate the prepared statement and re-issue the command. However in PostgreSQL transactions, once any command fails, the transaction becomes 'poisoned' and any subsequent commands will raise InFailedSQLTransaction. This includes DEALLOCATE statements, so the default deallocation strategy instead of removing the cached prepared statement instead raises InFailedSQLTransaction. Why this is bad =============== 1. InFailedSQLTransaction is a fairly cryptic error and doesn't communicate any useful information about what has actually gone wrong. 2. In the naive implementation the prepared statement never gets deallocated - it stays alive for the length of the session taking up memory on the postgres server. 3. It is unsafe to retry the transaction because the bad prepared statement is still in the cache and we would see the exact same failure repeated. Solution ======== If we are outside a transaction we can continue to handle these failures gracefully in the usual way. Inside a transaction instead of issuing a DEALLOCATE command that will certainly fail, we now raise ActiveRecord::PreparedStatementCacheExpired. This can be handled further up the stack, notably inside TransactionManager#within_new_transaction. Here we can make sure to first rollback the transaction, then safely issue DEALLOCATE statements to invalidate the rest of the cached prepared statements. This also allows the user (or some gem) the opportunity to catch this error and voluntarily retry the transaction if a schema change causes the prepared statement cache to become invalidated. Because the outdated statement has been deallocated, we can expect the transaction to succeed on the second try.
* | | Merge pull request #22748 from Azzurrio/masterMatthew Draper2016-02-221-1/+1
|\ \ \ | |_|/ |/| | Fix NoMethodError preparable for Arel::Visitors::PostgreSQL
| * | Fix NoMethodError preparable for Arel::Visitors in case prepared statements ↵Azzurrio2016-02-221-1/+1
| | | | | | | | | | | | is falsy
* | | Merge pull request #23769 from kamipo/remove_alias_exec_without_stmt_exec_querySantiago Pastorino2016-02-211-2/+0
|\ \ \ | | | | | | | | Remove `alias exec_without_stmt exec_query`
| * | | Remove `alias exec_without_stmt exec_query`Ryuta Kamizono2016-02-191-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This alias was for compatibility with legacy mysql adapter. But the return value of both methods is already inconsistent. `exec_query` returns `ActiveRecord::Result` instance. But `exec_without_stmt` returns `[result_set, affected_rows]` https://github.com/rails/rails/blob/v4.2.5.1/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb#L335-L364 Legacy mysql adapter was already removed in Rails 5.0. I think we can remove this inconsistent alias.
* | | | eliminate warnings about multiple primary keys on habtm join tablesAaron Patterson2016-02-191-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | habtm join tables commonly have two id columns and it's OK to make those two id columns a primary key. This commit eliminates the warnings for join tables that have this setup. ManageIQ/manageiq#6713