table_saw 1.3.0 → 2.0.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
|
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
|