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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 54910da339d3b8be844ddddb6b373dbec7ca04b5
4
- data.tar.gz: efb8474eb8d13f6020116b4923dfea5f4793059c
3
+ metadata.gz: f805f782a78651db5a93dbcba7516e3e1b0abe4f
4
+ data.tar.gz: 72132229cb096de84eb4c823e2d49b1d5691cc40
5
5
  SHA512:
6
- metadata.gz: c39f44d77f9238e333d22fd9ed3a6970f46c45a783d3414f733baa61a912479524032c962fdacd0e085e56f38c0615d3dba3e30fcbe66198168ab657a1c113ba
7
- data.tar.gz: 012405e9483038a357080c994b20ce3ce0793379e557b28f04331a34d70a07a2871afeadc98f1c6303d5d3397073fb61db0ff7b4a4c8826f8fff2cb7aee82055
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
- db = Sequel.connect("mock://postgres")
242
-
243
- # Guh hand-hacked SQL is fugly... but what I'm doing is so utterly
244
- # niche that Sequel doesn't support it.
245
- q_tbl = db.literal(tbl.to_sym)
246
- q_cols = columns.map { |c| db.literal(c.to_sym) }
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
- subselect = "SELECT 1 FROM #{q_tbl} AS dst WHERE " +
249
- q_cols.map { |c| "src.#{c}=dst.#{c}" }.join(" AND ")
253
+ subselect = "SELECT 1 FROM #{q_tbl} AS dst WHERE " +
254
+ q_cols.map { |c| "src.#{c}=dst.#{c}" }.join(" AND ")
250
255
 
251
- total_rows_inserted = 0
252
- DeferrableGroup.new.tap do |dg|
253
- rows.each_slice(100) do |slice|
254
- vals = slice.map do |row|
255
- "(" + row.map { |v| db.literal(v) }.join(", ") + ")"
256
- end.join(", ")
257
- q = "INSERT INTO #{q_tbl} (SELECT * FROM (VALUES #{vals}) " +
258
- "AS src (#{q_cols.join(", ")}) WHERE NOT EXISTS (#{subselect}))"
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
- dg.add(df)
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.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-14 00:00:00.000000000 Z
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