Module Sequel::Postgres::StaticCacheUpdater
In: lib/sequel/extensions/pg_static_cache_updater.rb

Methods

Public Instance methods

Add the static cache update function to the PostgreSQL database. This must be added before any triggers using this function are added.

Options:

:channel_name :Override the channel name to use.
:function_name :Override the function name to use.

[Source]

    # File lib/sequel/extensions/pg_static_cache_updater.rb, line 76
76:       def create_static_cache_update_function(opts=OPTS)
77:         create_function(opts[:function_name]||default_static_cache_update_name, "BEGIN\n  PERFORM pg_notify(\#{literal((opts[:channel_name]||default_static_cache_update_name).to_s)}, TG_RELID::text);\n  RETURN NULL;\nEND\n", :returns=>:trigger, :language=>:plpgsql)
78:       end

Add a trigger to the given table that calls the function which will notify about table changes.

Options:

:function_name :Override the function name to use.
:trigger_name :Override the trigger name to use.

[Source]

    # File lib/sequel/extensions/pg_static_cache_updater.rb, line 92
92:       def create_static_cache_update_trigger(table, opts=OPTS)
93:         create_trigger(table, opts[:trigger_name]||default_static_cache_update_name, opts[:function_name]||default_static_cache_update_name, :after=>true)
94:       end

The default name for the function, trigger, and notification channel for this extension.

[Source]

     # File lib/sequel/extensions/pg_static_cache_updater.rb, line 98
 98:       def default_static_cache_update_name
 99:         :sequel_static_cache_update
100:       end

Listen on the notification channel for changes to any of tables for the models given in a new thread. If notified about a change to one of the tables, reload the cache for the related model. Options given are also passed to Database#listen.

Note that this implementation does not currently support multiple models that use the same underlying table.

Options:

:channel_name :Override the channel name to use.
:before_thread_exit :An object that responds to call that is called before the the created thread exits.

[Source]

     # File lib/sequel/extensions/pg_static_cache_updater.rb, line 114
114:       def listen_for_static_cache_updates(models, opts=OPTS)
115:         raise Error, "this database object does not respond to listen, use the postgres adapter with the pg driver" unless respond_to?(:listen)
116:         models = [models] unless models.is_a?(Array)
117:         raise Error, "array of models to listen for changes cannot be empty" if models.empty?
118: 
119:         oid_map = {}
120:         models.each do |model|
121:           raise Error, "#{model.inspect} does not use the static_cache plugin" unless model.respond_to?(:load_cache, true)
122:           oid_map[get(regclass_oid(model.dataset.first_source_table))] = model
123:         end
124: 
125:         Thread.new do
126:           begin
127:             listen(opts[:channel_name]||default_static_cache_update_name, {:loop=>true}.merge(opts)) do |_, _, oid|
128:               if model = oid_map[oid.to_i]
129:                 model.send(:load_cache)
130:               end
131:             end
132:           ensure
133:             opts[:before_thread_exit].call if opts[:before_thread_exit]
134:           end
135:         end
136:       end

[Validate]