viewy 0.6.0 → 0.6.1

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: 5613cd65de8385844a4dc87ef3d86c0c2b7e4fc6
4
- data.tar.gz: aefa1e1b7988285e56efb55884d0a4d7af5c2077
3
+ metadata.gz: a30b9ce8c8770572f1f08bcb87c8e3c6c3d9fe67
4
+ data.tar.gz: 912edc7ea3ba22968796540534ebf74969af3437
5
5
  SHA512:
6
- metadata.gz: c0500fc1252734621c99ab46607d772923d209210e22742b0df5e6cc827313c6de456bd86cd1e918fefc9284edb7b2c4cfde9c22b03f5533c1e1552721aaad66
7
- data.tar.gz: 7f26299cb973209c2822add39c25220f9c66fc72dc7077358cd1702897683c81051d5b9604a979ef349ac4dd39b5644300e3691c1a4b8d0d50431b1a38754c97
6
+ metadata.gz: 71f67b5c522c7ac4e7e8691ba4ba1c31132aa65dc0859dd3eb33b59cfad021ea1fc3a02a797ae951fb90580e96da532247ce231ac931bee4fe7f5329120b6b03
7
+ data.tar.gz: 96d867d0cdc6a3556bbe3e07839e7ddf20a0beabd34398cd58ccb92912340b0d4abe938d716b852285dbc6d81a339ea6adcb17d2064a36523e14a9e21232db30
@@ -0,0 +1,129 @@
1
+ class EnsureTablesAreExcludedAsDependencies < 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 AND pg_class.relkind IN ('m', 'v')
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
+ view_dependency_function_sql = <<-SQL
68
+ CREATE OR REPLACE FUNCTION all_view_dependencies(materialized_view NAME)
69
+ RETURNS NAME[]
70
+ AS $$
71
+ WITH RECURSIVE dependency_graph(oid, depth, path, cycle) AS (
72
+ SELECT oid, 1, ARRAY[oid], FALSE
73
+ FROM pg_class
74
+ WHERE relname = materialized_view
75
+ UNION
76
+ SELECT
77
+ dependents.refobjid,
78
+ dg.depth + 1,
79
+ dg.path || dependents.refobjid,
80
+ dependents.refobjid = ANY(dg.path)
81
+ FROM dependency_graph dg
82
+ JOIN pg_rewrite rewrites ON rewrites.ev_class = dg.oid
83
+ JOIN pg_depend dependents ON dependents.objid = rewrites.oid
84
+ JOIN pg_class ON dependents.refobjid = pg_class.OID
85
+ JOIN pg_authid ON pg_class.relowner = pg_authid.OID AND pg_authid.rolname != 'postgres'
86
+ WHERE NOT dg.cycle
87
+ ), dependencies AS(
88
+ SELECT
89
+ (SELECT relname FROM pg_class WHERE pg_class.OID = dependency_graph.oid) AS view_name,
90
+ dependency_graph.OID,
91
+ MIN(depth) AS min_depth
92
+ FROM dependency_graph
93
+ GROUP BY dependency_graph.OID ORDER BY min_depth
94
+ )
95
+ SELECT ARRAY(
96
+ SELECT dependencies.view_name
97
+ FROM dependencies
98
+ LEFT JOIN pg_matviews ON pg_matviews.matviewname = dependencies.view_name
99
+ LEFT JOIN pg_views ON pg_views.viewname = dependencies.view_name
100
+ WHERE dependencies.view_name != materialized_view
101
+ )
102
+ ;
103
+ $$ LANGUAGE SQL;
104
+ SQL
105
+ execute view_dependency_function_sql
106
+ dependency_sql = <<-SQL
107
+ DROP MATERIALIZED VIEW all_view_dependencies;
108
+ CREATE MATERIALIZED VIEW all_view_dependencies AS
109
+ WITH normal_view_dependencies AS (
110
+ SELECT
111
+ viewname AS view_name,
112
+ all_view_dependencies(viewname) AS view_dependencies
113
+ FROM pg_views
114
+ WHERE viewowner != 'postgres'
115
+ ),
116
+ matview_dependencies AS (
117
+ SELECT
118
+ matviewname AS view_name,
119
+ all_view_dependencies(matviewname) AS view_dependencies
120
+ FROM pg_matviews
121
+ WHERE matviewowner != 'postgres'
122
+ )
123
+ SELECT matview_dependencies.*, TRUE as materialized_view FROM matview_dependencies
124
+ UNION
125
+ SELECT normal_view_dependencies.*, FALSE AS materialized_view FROM normal_view_dependencies;
126
+ SQL
127
+ execute dependency_sql
128
+ end
129
+ end
@@ -1,3 +1,3 @@
1
1
  module Viewy
2
- VERSION = '0.6.0'
2
+ VERSION = '0.6.1'
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.6.0
4
+ version: 0.6.1
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-05-19 00:00:00.000000000 Z
11
+ date: 2018-05-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -96,6 +96,7 @@ files:
96
96
  - db/migrate/20160512173021_update_view_replace_function.rb
97
97
  - db/migrate/20160513141153_add_index_recreation.rb
98
98
  - db/migrate/20180518200311_update_view_dependencies_function.rb
99
+ - db/migrate/20180521162238_ensure_tables_are_excluded_as_dependencies.rb
99
100
  - lib/tasks/viewy_tasks.rake
100
101
  - lib/viewy.rb
101
102
  - lib/viewy/acts_as_materialized_view.rb