module Sequel::Postgres::SchemaCaching

Private Instance Methods

dumpable_schema_cache() click to toggle source

Replace :oid entries for custom types with :custom.

   # File lib/sequel/extensions/pg_schema_caching.rb
72 def dumpable_schema_cache
73   sch = super
74 
75   sch.each_value do |cols|
76     cols.each do |_, h|
77       if (oid = h[:oid]) && oid >= 10000
78         h[:oid] = :custom
79       end
80     end
81   end
82 
83   sch
84 end
load_schema_cache_file(file) click to toggle source

Load custom oids from database when loading schema cache file.

   # File lib/sequel/extensions/pg_schema_caching.rb
31 def load_schema_cache_file(file)
32   set_custom_oids_for_cached_schema(super)
33 end
set_custom_oids_for_cached_schema(schemas) click to toggle source

Find all column schema hashes that use custom types. Load the oids for custom types in a single query, and update each related column schema hash with the correct oid.

   # File lib/sequel/extensions/pg_schema_caching.rb
38 def set_custom_oids_for_cached_schema(schemas)
39   custom_oid_rows = {}
40 
41   schemas.each_value do |cols|
42     cols.each do |_, h|
43       if h[:oid] == :custom
44         (custom_oid_rows[h[:db_type]] ||= []) << h
45       end
46     end
47   end
48 
49   unless custom_oid_rows.empty?
50     from(:pg_type).where(:typname=>custom_oid_rows.keys).select_hash(:typname, :oid).each do |name, oid|
51       custom_oid_rows.delete(name).each do |row|
52         row[:oid] = oid
53       end
54     end
55   end
56 
57   unless custom_oid_rows.empty?
58     warn "Could not load OIDs for the following custom types: #{custom_oid_rows.keys.sort.join(", ")}", uplevel: 3
59 
60     schemas.keys.each do |k|
61       if schemas[k].any?{|_,h| h[:oid] == :custom}
62         # Remove schema entry for table, so it will be queried at runtime to get the correct oids
63         schemas.delete(k)
64       end
65     end
66   end
67 
68   schemas
69 end