table_saw 1.3.0 → 2.0.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
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f87bd795a89acabf42bd2ff9cc75dd2035d024cc877d8cf47f45cf8cc96b3029
|
4
|
+
data.tar.gz: dce4ea88bed8c8cf92e68020f528721dbe43eebcfa9adb92f3e0669a90cba6f3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9f263214ec9a1d04f7e1c795c7d91b8a476cd9776ce67d16e4bec86a1db93684c9183090ff7cf7926bf29fe13260abafb24f56c71c59d5500e991983f24db61
|
7
|
+
data.tar.gz: 2274e86e0cdc654b5635400910c532957db83dc7f7de14f3ee497f8e7fecf31fd7d6dea1c9ec12a9fc2eeb8794bf6e816de9499f37ae1acb4af95e38c4c91443
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
table_saw (
|
4
|
+
table_saw (2.0.0)
|
5
5
|
pg
|
6
6
|
thor
|
7
7
|
|
@@ -41,7 +41,7 @@ GEM
|
|
41
41
|
railties (>= 3.0.0)
|
42
42
|
thor (>= 0.14.6)
|
43
43
|
concurrent-ruby (1.1.5)
|
44
|
-
crass (1.0.
|
44
|
+
crass (1.0.5)
|
45
45
|
database_cleaner (1.7.0)
|
46
46
|
diff-lcs (1.3)
|
47
47
|
docile (1.3.1)
|
@@ -50,13 +50,13 @@ GEM
|
|
50
50
|
concurrent-ruby (~> 1.0)
|
51
51
|
jaro_winkler (1.5.2)
|
52
52
|
json (2.2.0)
|
53
|
-
loofah (2.
|
53
|
+
loofah (2.3.1)
|
54
54
|
crass (~> 1.0.2)
|
55
55
|
nokogiri (>= 1.5.9)
|
56
56
|
method_source (0.9.2)
|
57
57
|
mini_portile2 (2.4.0)
|
58
58
|
minitest (5.11.3)
|
59
|
-
nokogiri (1.10.
|
59
|
+
nokogiri (1.10.5)
|
60
60
|
mini_portile2 (~> 2.4.0)
|
61
61
|
parallel (1.17.0)
|
62
62
|
parser (2.6.3.0)
|
@@ -13,10 +13,11 @@ module TableSaw
|
|
13
13
|
def call
|
14
14
|
File.delete(file) if File.exist?(file)
|
15
15
|
|
16
|
+
alter_constraints_to_deferrable
|
17
|
+
|
16
18
|
write_to_file <<~SQL
|
17
19
|
BEGIN;
|
18
20
|
|
19
|
-
SET session_replication_role = replica;
|
20
21
|
SET statement_timeout = 0;
|
21
22
|
SET lock_timeout = 0;
|
22
23
|
SET client_encoding = 'UTF8';
|
@@ -28,6 +29,8 @@ module TableSaw
|
|
28
29
|
SQL
|
29
30
|
|
30
31
|
records.each do |name, table|
|
32
|
+
defer_constraints(name)
|
33
|
+
|
31
34
|
write_to_file <<~COMMENT
|
32
35
|
--
|
33
36
|
-- Data for Name: #{name}; Type: TABLE DATA
|
@@ -60,6 +63,34 @@ module TableSaw
|
|
60
63
|
|
61
64
|
private
|
62
65
|
|
66
|
+
def alter_constraints_to_deferrable
|
67
|
+
records.each_key do |name|
|
68
|
+
write_to_file <<~COMMENT
|
69
|
+
--
|
70
|
+
-- Alter Constraints for Name: #{name}; Type: DEFERRABLE
|
71
|
+
--
|
72
|
+
|
73
|
+
COMMENT
|
74
|
+
|
75
|
+
TableSaw.information_schema.constraint_names[name].each do |constraint_name|
|
76
|
+
write_to_file "ALTER TABLE #{name} ALTER CONSTRAINT #{constraint_name} DEFERRABLE;"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def defer_constraints(name)
|
82
|
+
write_to_file <<~COMMENT
|
83
|
+
--
|
84
|
+
-- Set Constraints for Name: #{name}; Type: DEFERRED
|
85
|
+
--
|
86
|
+
|
87
|
+
COMMENT
|
88
|
+
|
89
|
+
TableSaw.information_schema.constraint_names[name].each do |constraint_name|
|
90
|
+
write_to_file "SET CONSTRAINTS #{constraint_name} DEFERRED;"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
63
94
|
def refresh_materialized_views
|
64
95
|
TableSaw::Queries::MaterializedViews.new.call.each do |view|
|
65
96
|
write_to_file "refresh materialized view #{view};"
|
@@ -2,12 +2,10 @@
|
|
2
2
|
|
3
3
|
module TableSaw
|
4
4
|
class InformationSchema
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
def has_many
|
10
|
-
foreign_key_relationships.has_many
|
5
|
+
%i(belongs_to constraint_names has_many).each do |method_name|
|
6
|
+
define_method method_name do
|
7
|
+
foreign_key_relationships.public_send method_name
|
8
|
+
end
|
11
9
|
end
|
12
10
|
|
13
11
|
def primary_keys
|
@@ -5,6 +5,7 @@ module TableSaw
|
|
5
5
|
class ForeignKeyRelationships
|
6
6
|
QUERY = <<~SQL
|
7
7
|
select
|
8
|
+
tc.constraint_name,
|
8
9
|
tc.table_name as from_table,
|
9
10
|
kcu.column_name as from_column,
|
10
11
|
ccu.table_name as to_table,
|
@@ -27,6 +28,12 @@ module TableSaw
|
|
27
28
|
end
|
28
29
|
end
|
29
30
|
|
31
|
+
def constraint_names
|
32
|
+
@constraint_names ||= result.each_with_object(Hash.new { |h, k| h[k] = [] }) do |row, memo|
|
33
|
+
memo[row['from_table']].push(row['constraint_name'])
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
30
37
|
private
|
31
38
|
|
32
39
|
def result
|
data/lib/table_saw/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: table_saw
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hamed Asghari
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-11-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pg
|