sequel_postgresql_triggers 1.0.6 → 1.0.7
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 +4 -4
- data/lib/sequel_postgresql_triggers.rb +11 -7
- data/spec/sequel_postgresql_triggers_spec.rb +80 -34
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a388774a0a7f318413ccf24063648887c2d0c255
|
4
|
+
data.tar.gz: 94fda351f9e4a355471a06510086bdef2b5adac2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 36dbc0cf115d5ac8251d1fdef1062f229f91312e4903628f4e358c3d5d1e926b30f12dba25cd625901464165984f9bcc5f49c90cddcfa8cb18d4e0706cb12698
|
7
|
+
data.tar.gz: 17421670cd5eb2fb65741de020808f6629b7545111fbc65675a37849eea32ead8b39dad3135e6ca33c75d02ce295611aab77fce345e0087748dc1b6a6ecf9b06
|
@@ -35,11 +35,15 @@ module Sequel
|
|
35
35
|
|
36
36
|
pgt_trigger(counted_table, trigger_name, function_name, [:insert, :update, :delete], <<-SQL)
|
37
37
|
BEGIN
|
38
|
-
IF (TG_OP = '
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
38
|
+
IF (TG_OP = 'UPDATE' AND (NEW.#{id_column} = OLD.#{id_column} OR (OLD.#{id_column} IS NULL AND NEW.#{id_column} IS NULL))) THEN
|
39
|
+
RETURN NEW;
|
40
|
+
ELSE
|
41
|
+
IF ((TG_OP = 'INSERT' OR TG_OP = 'UPDATE') AND NEW.#{id_column} IS NOT NULL) THEN
|
42
|
+
UPDATE #{table} SET #{count_column} = #{count_column} + 1 WHERE #{main_column} = NEW.#{id_column};
|
43
|
+
END IF;
|
44
|
+
IF ((TG_OP = 'DELETE' OR TG_OP = 'UPDATE') AND OLD.#{id_column} IS NOT NULL) THEN
|
45
|
+
UPDATE #{table} SET #{count_column} = #{count_column} - 1 WHERE #{main_column} = OLD.#{id_column};
|
46
|
+
END IF;
|
43
47
|
END IF;
|
44
48
|
|
45
49
|
IF (TG_OP = 'DELETE') THEN
|
@@ -118,10 +122,10 @@ module Sequel
|
|
118
122
|
IF (TG_OP = 'UPDATE' AND NEW.#{id_column} = OLD.#{id_column}) THEN
|
119
123
|
UPDATE #{table} SET #{sum_column} = #{sum_column} + NEW.#{summed_column} - OLD.#{summed_column} WHERE #{main_column} = NEW.#{id_column};
|
120
124
|
ELSE
|
121
|
-
IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
|
125
|
+
IF ((TG_OP = 'INSERT' OR TG_OP = 'UPDATE') AND NEW.#{id_column} IS NOT NULL) THEN
|
122
126
|
UPDATE #{table} SET #{sum_column} = #{sum_column} + NEW.#{summed_column} WHERE #{main_column} = NEW.#{id_column};
|
123
127
|
END IF;
|
124
|
-
IF (TG_OP = 'DELETE' OR TG_OP = 'UPDATE') THEN
|
128
|
+
IF ((TG_OP = 'DELETE' OR TG_OP = 'UPDATE') AND OLD.#{id_column} IS NOT NULL) THEN
|
125
129
|
UPDATE #{table} SET #{sum_column} = #{sum_column} - OLD.#{summed_column} WHERE #{main_column} = OLD.#{id_column};
|
126
130
|
END IF;
|
127
131
|
END IF;
|
@@ -29,26 +29,40 @@ describe "PostgreSQL Triggers" do
|
|
29
29
|
end
|
30
30
|
|
31
31
|
specify "Should modify counter cache when adding or removing records" do
|
32
|
-
DB[:accounts].
|
33
|
-
|
32
|
+
DB[:accounts].order(:id).select_map(:num_entries).should == [0, 0]
|
33
|
+
|
34
34
|
DB[:entries] << {:id=>1, :account_id=>1}
|
35
|
-
DB[:accounts].
|
36
|
-
|
35
|
+
DB[:accounts].order(:id).select_map(:num_entries).should == [1, 0]
|
36
|
+
|
37
37
|
DB[:entries] << {:id=>2, :account_id=>1}
|
38
|
-
DB[:accounts].
|
39
|
-
|
40
|
-
DB[:entries] << {:id=>3, :account_id=>
|
41
|
-
DB[:accounts].
|
42
|
-
|
38
|
+
DB[:accounts].order(:id).select_map(:num_entries).should == [2, 0]
|
39
|
+
|
40
|
+
DB[:entries] << {:id=>3, :account_id=>nil}
|
41
|
+
DB[:accounts].order(:id).select_map(:num_entries).should == [2, 0]
|
42
|
+
|
43
|
+
DB[:entries].where(:id=>3).update(:account_id=>2)
|
44
|
+
DB[:accounts].order(:id).select_map(:num_entries).should == [2, 1]
|
45
|
+
|
43
46
|
DB[:entries].where(:id=>2).update(:account_id=>2)
|
44
|
-
DB[:accounts].
|
45
|
-
|
46
|
-
DB[:entries].
|
47
|
-
DB[:accounts].
|
48
|
-
|
47
|
+
DB[:accounts].order(:id).select_map(:num_entries).should == [1, 2]
|
48
|
+
|
49
|
+
DB[:entries].where(:id=>2).update(:account_id=>nil)
|
50
|
+
DB[:accounts].order(:id).select_map(:num_entries).should == [1, 1]
|
51
|
+
|
52
|
+
DB[:entries].where(:id=>2).update(:id=>4)
|
53
|
+
DB[:accounts].order(:id).select_map(:num_entries).should == [1, 1]
|
54
|
+
|
55
|
+
DB[:entries].where(:id=>4).update(:account_id=>2)
|
56
|
+
DB[:accounts].order(:id).select_map(:num_entries).should == [1, 2]
|
57
|
+
|
58
|
+
DB[:entries].where(:id=>4).update(:account_id=>nil)
|
59
|
+
DB[:accounts].order(:id).select_map(:num_entries).should == [1, 1]
|
60
|
+
|
61
|
+
DB[:entries].filter(:id=>4).delete
|
62
|
+
DB[:accounts].order(:id).select_map(:num_entries).should == [1, 1]
|
63
|
+
|
49
64
|
DB[:entries].delete
|
50
|
-
DB[:accounts].
|
51
|
-
DB[:accounts].filter(:id=>2).get(:num_entries).should == 0
|
65
|
+
DB[:accounts].order(:id).select_map(:num_entries).should == [0, 0]
|
52
66
|
end
|
53
67
|
end
|
54
68
|
|
@@ -123,29 +137,43 @@ describe "PostgreSQL Triggers" do
|
|
123
137
|
end
|
124
138
|
|
125
139
|
specify "Should modify sum cache when adding, updating, or removing records" do
|
126
|
-
DB[:accounts].
|
127
|
-
|
140
|
+
DB[:accounts].order(:id).select_map(:balance).should == [0, 0]
|
141
|
+
|
128
142
|
DB[:entries] << {:id=>1, :account_id=>1, :amount=>100}
|
129
|
-
DB[:accounts].
|
130
|
-
|
143
|
+
DB[:accounts].order(:id).select_map(:balance).should == [100, 0]
|
144
|
+
|
131
145
|
DB[:entries] << {:id=>2, :account_id=>1, :amount=>200}
|
132
|
-
DB[:accounts].
|
133
|
-
|
134
|
-
DB[:entries] << {:id=>3, :account_id=>
|
135
|
-
DB[:accounts].
|
136
|
-
|
146
|
+
DB[:accounts].order(:id).select_map(:balance).should == [300, 0]
|
147
|
+
|
148
|
+
DB[:entries] << {:id=>3, :account_id=>nil, :amount=>500}
|
149
|
+
DB[:accounts].order(:id).select_map(:balance).should == [300, 0]
|
150
|
+
|
151
|
+
DB[:entries].where(:id=>3).update(:account_id=>2)
|
152
|
+
DB[:accounts].order(:id).select_map(:balance).should == [300, 500]
|
153
|
+
|
137
154
|
DB[:entries].exclude(:id=>2).update(:amount=>Sequel.*(:amount, 2))
|
138
|
-
DB[:accounts].
|
139
|
-
|
155
|
+
DB[:accounts].order(:id).select_map(:balance).should == [400, 1000]
|
156
|
+
|
140
157
|
DB[:entries].where(:id=>2).update(:account_id=>2)
|
141
|
-
DB[:accounts].
|
142
|
-
|
143
|
-
DB[:entries].
|
144
|
-
DB[:accounts].
|
145
|
-
|
158
|
+
DB[:accounts].order(:id).select_map(:balance).should == [200, 1200]
|
159
|
+
|
160
|
+
DB[:entries].where(:id=>2).update(:account_id=>nil)
|
161
|
+
DB[:accounts].order(:id).select_map(:balance).should == [200, 1000]
|
162
|
+
|
163
|
+
DB[:entries].where(:id=>2).update(:id=>4)
|
164
|
+
DB[:accounts].order(:id).select_map(:balance).should == [200, 1000]
|
165
|
+
|
166
|
+
DB[:entries].where(:id=>4).update(:account_id=>2)
|
167
|
+
DB[:accounts].order(:id).select_map(:balance).should == [200, 1200]
|
168
|
+
|
169
|
+
DB[:entries].where(:id=>4).update(:account_id=>nil)
|
170
|
+
DB[:accounts].order(:id).select_map(:balance).should == [200, 1000]
|
171
|
+
|
172
|
+
DB[:entries].filter(:id=>4).delete
|
173
|
+
DB[:accounts].order(:id).select_map(:balance).should == [200, 1000]
|
174
|
+
|
146
175
|
DB[:entries].delete
|
147
|
-
DB[:accounts].
|
148
|
-
DB[:accounts].filter(:id=>2).get(:balance).should == 0
|
176
|
+
DB[:accounts].order(:id).select_map(:balance).should == [0, 0]
|
149
177
|
end
|
150
178
|
end
|
151
179
|
|
@@ -198,9 +226,27 @@ describe "PostgreSQL Triggers" do
|
|
198
226
|
DB[:children].update(:parent_id1=>2)
|
199
227
|
DB[:parents].order(:id1).select_map(:changed_on).map{|t| t.strftime('%F')}.should == [d.strftime('%F'), d.strftime('%F')]
|
200
228
|
|
229
|
+
DB[:parents].update(:changed_on=>d30)
|
230
|
+
DB[:children].update(:parent_id1=>nil)
|
231
|
+
DB[:parents].order(:id1).select_map(:changed_on).map{|t| t.strftime('%F')}.should == [d30.strftime('%F'), d.strftime('%F')]
|
232
|
+
|
233
|
+
DB[:parents].update(:changed_on=>d30)
|
234
|
+
DB[:children].update(:parent_id2=>1)
|
235
|
+
DB[:parents].order(:id1).select_map(:changed_on).map{|t| t.strftime('%F')}.should == [d30.strftime('%F'), d30.strftime('%F')]
|
236
|
+
|
237
|
+
DB[:parents].update(:changed_on=>d30)
|
238
|
+
DB[:children].update(:parent_id1=>2)
|
239
|
+
DB[:parents].order(:id1).select_map(:changed_on).map{|t| t.strftime('%F')}.should == [d30.strftime('%F'), d.strftime('%F')]
|
240
|
+
|
201
241
|
DB[:parents].update(:changed_on=>d30)
|
202
242
|
DB[:children].delete
|
203
243
|
DB[:parents].order(:id1).select_map(:changed_on).map{|t| t.strftime('%F')}.should == [d30.strftime('%F'), d.strftime('%F')]
|
244
|
+
|
245
|
+
DB[:parents].update(:changed_on=>d30)
|
246
|
+
DB[:children] << {:id=>2, :parent_id1=>nil}
|
247
|
+
DB[:parents].order(:id1).select_map(:changed_on).map{|t| t.strftime('%F')}.should == [d30.strftime('%F'), d30.strftime('%F')]
|
248
|
+
DB[:children].where(:id=>2).delete
|
249
|
+
DB[:parents].order(:id1).select_map(:changed_on).map{|t| t.strftime('%F')}.should == [d30.strftime('%F'), d30.strftime('%F')]
|
204
250
|
end
|
205
251
|
|
206
252
|
specify "Should update the timestamp column of the related table when there is a composite foreign key" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sequel_postgresql_triggers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Evans
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|