From efd2be35510af7b02e70e4c5939720d7b12bc1c1 Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Tue, 29 Jan 2013 15:49:21 -0800 Subject: reloading type map on extension changing --- .../lib/active_record/connection_adapters/postgresql/oid.rb | 4 ++++ .../active_record/connection_adapters/postgresql_adapter.rb | 13 +++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/activerecord/lib/active_record/connection_adapters/postgresql/oid.rb b/activerecord/lib/active_record/connection_adapters/postgresql/oid.rb index d90b9283ef..f4aa9d215a 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql/oid.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql/oid.rb @@ -239,6 +239,10 @@ module ActiveRecord @mapping[oid] end + def clear + @mapping.clear + end + def key?(oid) @mapping.key? oid end diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index 08354b9f81..5ce2f1b04c 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -586,11 +586,15 @@ module ActiveRecord end def enable_extension(name) - exec_query "CREATE EXTENSION IF NOT EXISTS #{name}" + exec_query("CREATE EXTENSION IF NOT EXISTS #{name}").tap { + reload_type_map + } end def disable_extension(name) - exec_query "DROP EXTENSION IF EXISTS #{name} CASCADE" + exec_query("DROP EXTENSION IF EXISTS #{name} CASCADE").tap { + reload_type_map + } end def extension_enabled?(name) @@ -666,6 +670,11 @@ module ActiveRecord private + def reload_type_map + OID::TYPE_MAP.clear + initialize_type_map + end + def initialize_type_map result = execute('SELECT oid, typname, typelem, typdelim, typinput FROM pg_type', 'SCHEMA') leaves, nodes = result.partition { |row| row['typelem'] == '0' } -- cgit v1.2.3