viewy 0.6.0 → 0.6.1

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