Module: Repertoire::Faceting::PostgreSQLAdapter::MigrationMethods
- Included in:
- Repertoire::Faceting::PostgreSQLAdapter
- Defined in:
- lib/repertoire-faceting/adapters/postgresql_adapter.rb
Overview
:nodoc:
Instance Method Summary collapse
-
#create_materialized_view(view_name, sql) ⇒ Object
Methods used in creating, updating, and removing facet indices.
- #drop_materialized_view(view_name) ⇒ Object
-
#faceting_api_sql(api_name, schema_name) ⇒ Object
Returns the named PostgreSQL API binding sql; for shared hosts where you cannot build extensions.
- #refresh_materialized_view(view_name) ⇒ Object
Instance Method Details
#create_materialized_view(view_name, sql) ⇒ Object
Methods used in creating, updating, and removing facet indices
113 114 115 116 |
# File 'lib/repertoire-faceting/adapters/postgresql_adapter.rb', line 113 def create_materialized_view(view_name, sql) sql = "CREATE MATERIALIZED VIEW #{quote_table_name(view_name)} AS #{sql}" execute(sql) end |
#drop_materialized_view(view_name) ⇒ Object
123 124 125 126 |
# File 'lib/repertoire-faceting/adapters/postgresql_adapter.rb', line 123 def drop_materialized_view(view_name) sql = "DROP MATERIALIZED VIEW #{quote_table_name(view_name)} CASCADE" execute(sql) end |
#faceting_api_sql(api_name, schema_name) ⇒ Object
Returns the named PostgreSQL API binding sql; for shared hosts where you cannot build extensions
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/repertoire-faceting/adapters/postgresql_adapter.rb', line 129 def faceting_api_sql(api_name, schema_name) path = Repertoire::Faceting::MODULE_PATH version = Repertoire::Faceting::VERSION api_name = api_name.to_sym file_name = "#{path}/ext/faceting_#{api_name}--#{version}.sql" raise "Use 'CREATE EXTENSION faceting' to load the default facet api" if api_name == :signature raise "Currently, the faceting API must install into a schema named 'facet'" unless schema_name == facet_schema # TODO This approach allows production deploys to skip a "rake db:extensions:install" step when installing # to Heroku. In practice, this eases deployment significantly. But shelling out to make during a # Rails migration feels inelegant. system "cd #{path}/ext; make" unless File.exist?(file_name) raise "No API binding available for #{api_name}" unless File.exist?(file_name) File.read(file_name).gsub(/@extschema@/, facet_schema) end |
#refresh_materialized_view(view_name) ⇒ Object
118 119 120 121 |
# File 'lib/repertoire-faceting/adapters/postgresql_adapter.rb', line 118 def refresh_materialized_view(view_name) sql = "REFRESH MATERIALIZED VIEW #{quote_table_name(view_name)}" execute(sql) end |