diff options
author | Kuldeep Aggarwal <kd.engineer@yahoo.co.in> | 2013-12-19 18:46:17 +0530 |
---|---|---|
committer | Kuldeep Aggarwal <kd.engineer@yahoo.co.in> | 2013-12-19 18:46:17 +0530 |
commit | b082bece5ed99a1bb1ff9d4af5f9d97a3dcaf6c1 (patch) | |
tree | 3fac5e446c6f767fa154015ee704d334a5762f2c /activerecord | |
parent | 3de199988fb6295ed7c37d50f9cbf4025dfca088 (diff) | |
download | rails-b082bece5ed99a1bb1ff9d4af5f9d97a3dcaf6c1.tar.gz rails-b082bece5ed99a1bb1ff9d4af5f9d97a3dcaf6c1.tar.bz2 rails-b082bece5ed99a1bb1ff9d4af5f9d97a3dcaf6c1.zip |
Fix PostgreSQL insert to properly extract table name from multiline string SQL.
Previously, executing an insert SQL in PostgreSQL with a command like this:
insert into articles(
number)
values(
5152
)
would not work because the adapter was unable to extract the correct articles table name.
Diffstat (limited to 'activerecord')
3 files changed, 28 insertions, 1 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index c90ed03ac4..52f5f0efa3 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,18 @@ +* Fix `PostgreSQL` insert to properly extract table name from multiline string SQL. + + Previously, executing an insert SQL in `PostgreSQL` with a command like this: + + insert into articles( + number) + values( + 5152 + ) + + would not work because the adapter was unable to extract the correct `articles` + table name. + + *Kuldeep Aggarwal* + * `Relation` no longer has mutator methods like `#map!` and `#delete_if`. Convert to an `Array` by calling `#to_a` before using these methods. diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index 2912a208ee..dd3bfa5546 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -969,7 +969,7 @@ module ActiveRecord end def extract_table_ref_from_insert_sql(sql) - sql[/into\s+([^\(]*).*values\s*\(/i] + sql[/into\s+([^\(]*).*values\s*\(/im] $1.strip if $1 end diff --git a/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb b/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb index 8b017760b1..5372f8821f 100644 --- a/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb +++ b/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb @@ -62,6 +62,18 @@ module ActiveRecord assert_equal expect, id end + def test_multiline_insert_sql + id = @connection.insert_sql(<<-SQL) + insert into ex( + number) + values( + 5152 + ) + SQL + expect = @connection.query('select max(id) from ex').first.first + assert_equal expect, id + end + def test_insert_sql_with_returning_disabled connection = connection_without_insert_returning id = connection.insert_sql("insert into postgresql_partitioned_table_parent (number) VALUES (1)") |