Class: RailsVisualizer::Schema::Cache
- Inherits:
-
Object
- Object
- RailsVisualizer::Schema::Cache
- Defined in:
- lib/rails_visualizer/schema/cache.rb
Overview
Bulk-loads all column and index metadata with minimal DB round-trips. PostgreSQL: 2 parallel queries (one for columns, one for indexes). Other adapters: per-table fallback (still cached per table).
Defined Under Namespace
Constant Summary collapse
- PG_TYPE_MAP =
{ 'int2' => 'integer', 'int4' => 'integer', 'int8' => 'integer', 'float4' => 'float', 'float8' => 'float', 'numeric' => 'decimal', 'money' => 'decimal', 'bool' => 'boolean', 'varchar' => 'string', 'bpchar' => 'string', 'text' => 'text', 'bytea' => 'binary', 'date' => 'date', 'timestamp' => 'datetime', 'timestamptz' => 'datetime', 'time' => 'time', 'timetz' => 'time', 'json' => 'json', 'jsonb' => 'jsonb', 'uuid' => 'uuid', 'inet' => 'inet', 'cidr' => 'cidr', 'macaddr' => 'string', 'xml' => 'xml', 'hstore' => 'hstore', 'ltree' => 'ltree', 'interval' => 'interval', '_int4' => 'integer', '_int8' => 'integer', '_float8' => 'float', '_varchar' => 'string', '_text' => 'string' }.freeze
Instance Method Summary collapse
- #columns_for(table_name) ⇒ Object
- #index_map_for(table_name) ⇒ Object
- #indexes_for(table_name) ⇒ Object
-
#initialize ⇒ Cache
constructor
A new instance of Cache.
- #preload_for(table_names) ⇒ Object
- #primary_key_for(table_name) ⇒ Object
- #table_exists?(table_name) ⇒ Boolean
Constructor Details
#initialize ⇒ Cache
Returns a new instance of Cache.
35 36 37 38 39 40 |
# File 'lib/rails_visualizer/schema/cache.rb', line 35 def initialize @columns = {} @indexes = {} @index_maps = {} @primary_keys = {} end |
Instance Method Details
#columns_for(table_name) ⇒ Object
46 47 48 |
# File 'lib/rails_visualizer/schema/cache.rb', line 46 def columns_for(table_name) @columns.fetch(table_name.to_s, []) end |
#index_map_for(table_name) ⇒ Object
54 55 56 57 |
# File 'lib/rails_visualizer/schema/cache.rb', line 54 def index_map_for(table_name) tn = table_name.to_s @index_maps[tn] ||= build_index_map(tn) end |
#indexes_for(table_name) ⇒ Object
50 51 52 |
# File 'lib/rails_visualizer/schema/cache.rb', line 50 def indexes_for(table_name) @indexes.fetch(table_name.to_s, []) end |
#preload_for(table_names) ⇒ Object
63 64 65 66 67 68 69 70 71 72 |
# File 'lib/rails_visualizer/schema/cache.rb', line 63 def preload_for(table_names) needed = table_names.select { |t| table_exists?(t) } return if needed.empty? if postgresql? parallel_bulk_load_pg(needed) else fallback_preload(needed) end end |
#primary_key_for(table_name) ⇒ Object
59 60 61 |
# File 'lib/rails_visualizer/schema/cache.rb', line 59 def primary_key_for(table_name) @primary_keys.fetch(table_name.to_s, 'id') end |
#table_exists?(table_name) ⇒ Boolean
42 43 44 |
# File 'lib/rails_visualizer/schema/cache.rb', line 42 def table_exists?(table_name) tables.include?(table_name.to_s) end |