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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a30b9ce8c8770572f1f08bcb87c8e3c6c3d9fe67
|
4
|
+
data.tar.gz: 912edc7ea3ba22968796540534ebf74969af3437
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
data/lib/viewy/version.rb
CHANGED
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.
|
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-
|
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
|