viewy 0.5.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7a17a6fdc2bb34294caad99dae3dc21c3f701dfd
4
- data.tar.gz: d432f97b8b0209751abf8a5244cda1fdacd82025
3
+ metadata.gz: 5613cd65de8385844a4dc87ef3d86c0c2b7e4fc6
4
+ data.tar.gz: aefa1e1b7988285e56efb55884d0a4d7af5c2077
5
5
  SHA512:
6
- metadata.gz: f699620939c4353d9370ecaa003096da90973ab7821407bfe176b5ee6e6bbf37749fb2e8f502edf802ffda62e6ace36f2f0ca01f357258ca4c13d9531fccdfb9
7
- data.tar.gz: a67961b25da44c4d0b8888af3e83ce16449c53341b2332147e7296a95a8d7c6960a33989a2394852db67670f474c0847505e40a462e7d55913a7239886d6a2b4
6
+ metadata.gz: c0500fc1252734621c99ab46607d772923d209210e22742b0df5e6cc827313c6de456bd86cd1e918fefc9284edb7b2c4cfde9c22b03f5533c1e1552721aaad66
7
+ data.tar.gz: 7f26299cb973209c2822add39c25220f9c66fc72dc7077358cd1702897683c81051d5b9604a979ef349ac4dd39b5644300e3691c1a4b8d0d50431b1a38754c97
@@ -0,0 +1,83 @@
1
+ class UpdateViewDependenciesFunction < ActiveRecord::Migration[5.0]
2
+ def up
3
+ view_dependency_function_sql = <<-SQL
4
+ CREATE OR REPLACE FUNCTION all_view_dependencies(materialized_view NAME)
5
+ RETURNS NAME[]
6
+ AS $$
7
+ WITH RECURSIVE dependency_graph(oid, depth, path, cycle) AS (
8
+ SELECT oid, 1, ARRAY[oid], FALSE
9
+ FROM pg_class
10
+ WHERE relname = materialized_view
11
+ UNION
12
+ SELECT
13
+ dependents.refobjid,
14
+ dg.depth + 1,
15
+ dg.path || dependents.refobjid,
16
+ dependents.refobjid = ANY(dg.path)
17
+ FROM dependency_graph dg
18
+ JOIN pg_rewrite rewrites ON rewrites.ev_class = dg.oid
19
+ JOIN pg_depend dependents ON dependents.objid = rewrites.oid
20
+ JOIN pg_class ON dependents.refobjid = pg_class.OID
21
+ JOIN pg_authid ON pg_class.relowner = pg_authid.OID AND pg_authid.rolname != 'postgres'
22
+ WHERE NOT dg.cycle
23
+ ), dependencies AS(
24
+ SELECT
25
+ (SELECT relname FROM pg_class WHERE pg_class.OID = dependency_graph.oid) AS view_name,
26
+ dependency_graph.OID,
27
+ MIN(depth) AS min_depth
28
+ FROM dependency_graph
29
+ GROUP BY dependency_graph.OID ORDER BY min_depth
30
+ )
31
+ SELECT ARRAY(
32
+ SELECT dependencies.view_name
33
+ FROM dependencies
34
+ LEFT JOIN pg_matviews ON pg_matviews.matviewname = dependencies.view_name
35
+ LEFT JOIN pg_views ON pg_views.viewname = dependencies.view_name
36
+ WHERE dependencies.view_name != materialized_view
37
+ )
38
+ ;
39
+ $$ LANGUAGE SQL;
40
+ SQL
41
+ execute view_dependency_function_sql
42
+ dependency_sql = <<-SQL
43
+ DROP MATERIALIZED VIEW all_view_dependencies;
44
+ CREATE MATERIALIZED VIEW all_view_dependencies AS
45
+ WITH normal_view_dependencies AS (
46
+ SELECT
47
+ viewname AS view_name,
48
+ all_view_dependencies(viewname) AS view_dependencies
49
+ FROM pg_views
50
+ WHERE viewowner != 'postgres'
51
+ ),
52
+ matview_dependencies AS (
53
+ SELECT
54
+ matviewname AS view_name,
55
+ all_view_dependencies(matviewname) AS view_dependencies
56
+ FROM pg_matviews
57
+ WHERE matviewowner != 'postgres'
58
+ )
59
+ SELECT matview_dependencies.*, TRUE as materialized_view FROM matview_dependencies
60
+ UNION
61
+ SELECT normal_view_dependencies.*, FALSE AS materialized_view FROM normal_view_dependencies;
62
+ SQL
63
+ execute dependency_sql
64
+ end
65
+
66
+ def down
67
+ dependency_sql = <<-SQL
68
+ DROP MATERIALIZED VIEW all_view_dependencies;
69
+ CREATE MATERIALIZED VIEW all_view_dependencies AS
70
+ WITH normal_view_dependencies AS (
71
+ SELECT viewname AS view_name, view_dependencies(viewname) FROM pg_views
72
+ )
73
+ SELECT * FROM materialized_view_dependencies
74
+ UNION
75
+ SELECT normal_view_dependencies.*, FALSE AS materialized_view FROM normal_view_dependencies WHERE array_length(normal_view_dependencies.view_dependencies, 1) > 0;
76
+ SQL
77
+ execute dependency_sql
78
+ view_dependency_function_sql = <<-SQL
79
+ DROP FUNCTION all_view_dependencies(materialized_view NAME);
80
+ SQL
81
+ execute view_dependency_function_sql
82
+ end
83
+ end
@@ -1,3 +1,3 @@
1
1
  module Viewy
2
- VERSION = '0.5.1'
2
+ VERSION = '0.6.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: viewy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emerson Huitt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-05 00:00:00.000000000 Z
11
+ date: 2018-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -95,6 +95,7 @@ files:
95
95
  - db/migrate/20151005150022_update_dependency_views.rb
96
96
  - db/migrate/20160512173021_update_view_replace_function.rb
97
97
  - db/migrate/20160513141153_add_index_recreation.rb
98
+ - db/migrate/20180518200311_update_view_dependencies_function.rb
98
99
  - lib/tasks/viewy_tasks.rake
99
100
  - lib/viewy.rb
100
101
  - lib/viewy/acts_as_materialized_view.rb
@@ -129,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
129
130
  version: '0'
130
131
  requirements: []
131
132
  rubyforge_project:
132
- rubygems_version: 2.6.14
133
+ rubygems_version: 2.6.13
133
134
  signing_key:
134
135
  specification_version: 4
135
136
  summary: Viewy is a tool for managing views in Rails applications