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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5613cd65de8385844a4dc87ef3d86c0c2b7e4fc6
|
4
|
+
data.tar.gz: aefa1e1b7988285e56efb55884d0a4d7af5c2077
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
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.
|
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-
|
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.
|
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
|