em-pg-client-helper 2.0.0 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/em-pg-client-helper/transaction.rb +26 -22
- 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: f805f782a78651db5a93dbcba7516e3e1b0abe4f
|
4
|
+
data.tar.gz: 72132229cb096de84eb4c823e2d49b1d5691cc40
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a8390c30559d4986d5a9704ea4c118b5948cb87811c6208e6399bd874ee2a5979c1b3690b78684be69c3f6e77b28fa93f06c2bb6e9de6cffe52b0756b1b0bd5
|
7
|
+
data.tar.gz: b6efc7278ca5a06be0930cfa7a0a5125e5345f6215d27fa724e2d59fd2897700cf0e2bd679fd1d8eebc7fb30287722b5f285179941996361354757747df1de9a
|
@@ -238,32 +238,32 @@ class PG::EM::Client::Helper::Transaction
|
|
238
238
|
# @since 2.0.0
|
239
239
|
#
|
240
240
|
def bulk_insert(tbl, columns, rows, &blk)
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
241
|
+
if rows.length > 1000
|
242
|
+
bulk_insert(tbl, columns, rows[0..999]) do |count1|
|
243
|
+
bulk_insert(tbl, columns, rows[1000..-1]) do |count2|
|
244
|
+
blk.call(count1 + count2)
|
245
|
+
end
|
246
|
+
end
|
247
|
+
else
|
248
|
+
# Guh hand-hacked SQL is fugly... but what I'm doing is so utterly
|
249
|
+
# niche that Sequel doesn't support it.
|
250
|
+
q_tbl = mock_db.literal(tbl.to_sym)
|
251
|
+
q_cols = columns.map { |c| mock_db.literal(c.to_sym) }
|
247
252
|
|
248
|
-
|
249
|
-
|
253
|
+
subselect = "SELECT 1 FROM #{q_tbl} AS dst WHERE " +
|
254
|
+
q_cols.map { |c| "src.#{c}=dst.#{c}" }.join(" AND ")
|
250
255
|
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
df = exec(q) do |res|
|
260
|
-
total_rows_inserted += res.cmd_tuples
|
256
|
+
vals = rows.map do |row|
|
257
|
+
"(" + row.map { |v| mock_db.literal(v) }.join(", ") + ")"
|
258
|
+
end.join(", ")
|
259
|
+
q = "INSERT INTO #{q_tbl} (SELECT * FROM (VALUES #{vals}) " +
|
260
|
+
"AS src (#{q_cols.join(", ")}) WHERE NOT EXISTS (#{subselect}))"
|
261
|
+
exec(q).tap do |df|
|
262
|
+
df.callback do |res|
|
263
|
+
df.succeed(res.cmd_tuples)
|
261
264
|
end
|
262
|
-
|
265
|
+
df.callback(&blk) if blk
|
263
266
|
end
|
264
|
-
dg.callback { dg.succeed(total_rows_inserted) }
|
265
|
-
dg.callback(&blk) if blk
|
266
|
-
dg.close
|
267
267
|
end
|
268
268
|
end
|
269
269
|
|
@@ -315,4 +315,8 @@ class PG::EM::Client::Helper::Transaction
|
|
315
315
|
def trace_query(q, v=nil)
|
316
316
|
$stderr.puts "#{@conn.inspect}: #{q} #{v.inspect}" if ENV['EM_PG_TXN_TRACE']
|
317
317
|
end
|
318
|
+
|
319
|
+
def mock_db
|
320
|
+
@mock_db ||= Sequel.connect("mock://postgres")
|
321
|
+
end
|
318
322
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: em-pg-client-helper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Palmer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: em-pg-client
|