From 9f62344d9552f0a58e4aa43ca6f1a7fec273a04e Mon Sep 17 00:00:00 2001 From: Yves Senn Date: Thu, 10 Apr 2014 20:39:21 +0200 Subject: PostgreSQL, warn once per connection per missing OID. Closes #14275. [Yves Senn & Matthew Draper] --- activerecord/CHANGELOG.md | 6 ++++++ .../active_record/connection_adapters/postgresql_adapter.rb | 4 ++-- .../test/cases/adapters/postgresql/postgresql_adapter_test.rb | 11 +++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) (limited to 'activerecord') diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index c0264df8e1..00ea49fa9d 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,9 @@ +* PostgreSQL adapter only warns once for every missing OID per connection. + + Fixes #14275. + + *Matthew Draper*, *Yves Senn* + * PostgreSQL adapter automatically reloads it's type map when encountering unknown OIDs. diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index 207e1c4fed..0485093123 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -565,8 +565,8 @@ module ActiveRecord end type_map.fetch(oid, fmod) { - warn "unknown OID #{oid}: failed to recognize type of #{column_name}" - OID::Identity.new + warn "unknown OID #{oid}: failed to recognize type of '#{column_name}'. It will be treated as String." + type_map[oid] = OID::Identity.new } end diff --git a/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb b/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb index d319bd0b80..b7791078db 100644 --- a/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb +++ b/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb @@ -385,6 +385,17 @@ module ActiveRecord reset_connection end + def test_only_warn_on_first_encounter_of_unknown_oid + warning = capture(:stderr) { + @connection.select_all "SELECT NULL::anyelement" + @connection.select_all "SELECT NULL::anyelement" + @connection.select_all "SELECT NULL::anyelement" + } + assert_match(/\Aunknown OID \d+: failed to recognize type of 'anyelement'. It will be treated as String.\n\z/, warning) + ensure + reset_connection + end + private def insert(ctx, data) binds = data.map { |name, value| -- cgit v1.2.3