reloading type map on extension changing

This commit is contained in:
Aaron Patterson 2013-01-29 15:49:21 -08:00
parent 95e87bfaa3
commit efd2be3551
2 changed files with 15 additions and 2 deletions

@ -239,6 +239,10 @@ def [](oid)
@mapping[oid]
end
def clear
@mapping.clear
end
def key?(oid)
@mapping.key? oid
end

@ -586,11 +586,15 @@ def supports_ranges?
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 @@ def translate_exception(exception, message)
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' }