em-pg-client-helper 2.0.0 → 2.0.1

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
  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