viewy 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: be07e759aa1592dd80a7f81bbec2427fff93af61
4
- data.tar.gz: 51318f8f014f9b6980730a7be4cbe8d2256c112b
3
+ metadata.gz: d8e8ccd085001708797e349fe6919ddcde5fa48b
4
+ data.tar.gz: 52b404095aab8d64a1a1405c9e60b7e5844bdab4
5
5
  SHA512:
6
- metadata.gz: 32fb3217aba66d3fee88ca8d11799f96f003c65ba10927117dbe37e829f76eb0eb0c2addc9d2f84eb109397cd354bd01fec3ef5597c18e864a2327dbdcb8276e
7
- data.tar.gz: de60f0942691053b95da785306fc6bb3c33a6adddfb6cf62a400c5ba0f522084f7613f7f884bd5d04f7cd19b9a5bab5cf564645c8381c9f1caa29feaa8115c43
6
+ metadata.gz: b1f64815917317f3003f19680a4a2672a5d8c125bf4e199e90fb10ebca8a10225a3ededad987ac35fc40eff2440912d82ecd661c67d954aad3993859abea29d9
7
+ data.tar.gz: f70abc7ff1750590aadf3a22f7ab2f8ae1e219a4da23fd0dbe896cb4294ea0a784355285e602827ad64074cdcd5d09e05f04b7dcb524bb4c6503b432ff366380
@@ -0,0 +1,75 @@
1
+ class UpdateDependencyViews < ActiveRecord::Migration
2
+ def up
3
+ dependency_sql = <<-SQL
4
+ DROP MATERIALIZED VIEW materialized_view_dependencies;
5
+ CREATE MATERIALIZED VIEW materialized_view_dependencies AS
6
+ SELECT
7
+ matviewname AS view_name,
8
+ view_dependencies(matviewname),
9
+ TRUE AS materialized_view
10
+ FROM pg_matviews
11
+ WHERE matviewname != 'materialized_view_dependencies' AND matviewname != 'all_view_dependencies'
12
+ ;
13
+ CREATE MATERIALIZED VIEW all_view_dependencies AS
14
+ WITH normal_view_dependencies AS (
15
+ SELECT viewname AS view_name, view_dependencies(viewname) FROM pg_views
16
+ )
17
+ SELECT * FROM materialized_view_dependencies
18
+ UNION
19
+ SELECT normal_view_dependencies.*, FALSE AS materialized_view FROM normal_view_dependencies WHERE array_length(normal_view_dependencies.view_dependencies, 1) > 0;
20
+ SQL
21
+ execute dependency_sql
22
+
23
+ trigger_sql = <<-SQL
24
+ CREATE OR REPLACE FUNCTION refresh_materialized_view_dependencies() RETURNS EVENT_TRIGGER AS $$
25
+ DECLARE
26
+ materialized_dependencies_exists BOOLEAN := (SELECT TRUE FROM pg_class WHERE pg_class.relname = 'materialized_view_dependencies' AND pg_class.relkind = 'm');
27
+ all_dependencies_exists BOOLEAN := (SELECT TRUE FROM pg_class WHERE pg_class.relname = 'all_view_dependencies' AND pg_class.relkind = 'm');
28
+ BEGIN
29
+ RAISE NOTICE 'refreshing view dependency hierarchy';
30
+ IF materialized_dependencies_exists THEN
31
+ REFRESH MATERIALIZED VIEW materialized_view_dependencies;
32
+ END IF;
33
+ IF all_dependencies_exists THEN
34
+ REFRESH MATERIALIZED VIEW all_view_dependencies;
35
+ END IF;
36
+ END
37
+ $$ LANGUAGE plpgsql;
38
+ SQL
39
+
40
+ execute trigger_sql
41
+ end
42
+
43
+ def down
44
+ dependency_sql = <<-SQL
45
+ DROP MATERIALIZED VIEW materialized_view_dependencies;
46
+ DROP MATERIALIZED VIEW all_view_dependencies;
47
+
48
+ CREATE MATERIALIZED VIEW materialized_view_dependencies AS
49
+ WITH normal_view_dependencies AS (
50
+ SELECT viewname AS view_name, view_dependencies(viewname) FROM pg_views
51
+ )
52
+ SELECT matviewname AS view_name, view_dependencies(matviewname), TRUE AS materialized_view FROM pg_matviews WHERE matviewname != 'materialized_view_dependencies'
53
+ UNION
54
+ SELECT normal_view_dependencies.*, FALSE AS materialized_view FROM normal_view_dependencies WHERE array_length(normal_view_dependencies.view_dependencies, 1) > 0;
55
+ ;
56
+ SQL
57
+ execute dependency_sql
58
+
59
+
60
+ trigger_sql = <<-SQL
61
+ CREATE OR REPLACE FUNCTION refresh_materialized_view_dependencies() RETURNS EVENT_TRIGGER AS $$
62
+ DECLARE
63
+ view_exists BOOLEAN := (SELECT TRUE FROM pg_class WHERE pg_class.relname = 'materialized_view_dependencies' AND pg_class.relkind = 'm');
64
+ BEGIN
65
+ RAISE NOTICE 'refreshing view dependency hierarchy';
66
+ IF view_exists THEN
67
+ REFRESH MATERIALIZED VIEW materialized_view_dependencies;
68
+ END IF;
69
+ END
70
+ $$ LANGUAGE plpgsql;
71
+ SQL
72
+
73
+ execute trigger_sql
74
+ end
75
+ end
@@ -9,15 +9,25 @@ require 'viewy/dependency_manager'
9
9
  # of views and their dependencies
10
10
  module Viewy
11
11
  # Calling this method will refresh the materialized view that stores the dependency information for other
12
- # views in the system
12
+ # materialized views in the system
13
13
  #
14
14
  # @raise [ActiveRecord::StatementInvalidError] raised if a dependent view is somehow not refreshed correctly
15
15
  # @return [PG::Result] the result of the refresh statement on the materialized view
16
- def self.refresh_dependency_information
16
+ def self.refresh_materialized_dependency_information
17
17
  view_refresher = Viewy::DependencyManagement::ViewRefresher.new(connection)
18
18
  view_refresher.refresh_materialized_view('materialized_view_dependencies')
19
19
  end
20
20
 
21
+ # Calling this method will refresh the materialized view that stores the dependency information for other
22
+ # views in the system
23
+ #
24
+ # @raise [ActiveRecord::StatementInvalidError] raised if a dependent view is somehow not refreshed correctly
25
+ # @return [PG::Result] the result of the refresh statement on the materialized view
26
+ def self.refresh_all_dependency_information
27
+ view_refresher = Viewy::DependencyManagement::ViewRefresher.new(connection)
28
+ view_refresher.refresh_materialized_view('all_view_dependencies')
29
+ end
30
+
21
31
  # The connection used by viewy to manage views
22
32
  #
23
33
  # @return [ActiveRecord::ConnectionAdapters::PostgreSQLAdapter] An ActiveRecord connection
@@ -8,6 +8,7 @@ module Viewy
8
8
  #
9
9
  # @raise [ActiveRecord::StatementInvalidError] raised if a view is somehow not refreshed correctly
10
10
  def refresh_all_materialized_views
11
+ Viewy.refresh_materialized_dependency_information
11
12
  view_refresher.refresh_all_materialized_views
12
13
  end
13
14
 
@@ -1,4 +1,5 @@
1
1
  require_relative 'models/materialized_view_dependency'
2
+ require_relative 'models/view_dependency'
2
3
 
3
4
  module Viewy
4
5
  # The models namespace for viewy
@@ -1,6 +1,6 @@
1
1
  module Viewy
2
2
  module Models
3
- # Provides a means of accessing information about view dependencies from within a Rails app.
3
+ # Provides a means of accessing information about view dependencies for a materialized view from within a Rails app.
4
4
  # The foreign key of the dependency information table is the name of the view that a user needs
5
5
  # dependency information about.
6
6
  class MaterializedViewDependency < ActiveRecord::Base
@@ -0,0 +1,11 @@
1
+ module Viewy
2
+ module Models
3
+ # Provides a means of accessing information about view dependencies from within a Rails app.
4
+ # The foreign key of the dependency information table is the name of the view that a user needs
5
+ # dependency information about.
6
+ class ViewDependency < ActiveRecord::Base
7
+ self.table_name = 'all_view_dependencies'
8
+ self.primary_key = 'view_name'
9
+ end
10
+ end
11
+ end
@@ -1,3 +1,3 @@
1
1
  module Viewy
2
- VERSION = '0.0.6'
2
+ VERSION = '0.0.7'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: viewy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emerson Huitt
@@ -79,6 +79,7 @@ files:
79
79
  - config/routes.rb
80
80
  - db/migrate/20150929144540_add_view_replace_function.rb
81
81
  - db/migrate/20150929205301_add_view_dependencies.rb
82
+ - db/migrate/20151005150022_update_dependency_views.rb
82
83
  - lib/tasks/viewy_tasks.rake
83
84
  - lib/viewy.rb
84
85
  - lib/viewy/acts_as_materialized_view.rb
@@ -87,9 +88,9 @@ files:
87
88
  - lib/viewy/dependency_management/view_refresher.rb
88
89
  - lib/viewy/dependency_manager.rb
89
90
  - lib/viewy/engine.rb
90
- - lib/viewy/materialized_views.rb
91
91
  - lib/viewy/models.rb
92
92
  - lib/viewy/models/materialized_view_dependency.rb
93
+ - lib/viewy/models/view_dependency.rb
93
94
  - lib/viewy/version.rb
94
95
  homepage: http://www.scimedsolutions.com
95
96
  licenses:
@@ -1,7 +0,0 @@
1
- require_relative 'materialized_views/dependency_list'
2
-
3
- module Viewy
4
- module MaterializedViews
5
-
6
- end
7
- end