viewy 0.5.1 → 0.6.0

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: 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