em_mysql2_connection_pool 0.0.4 → 0.0.5

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.
@@ -14,29 +14,43 @@ class EmMysql2ConnectionPool
14
14
 
15
15
  def execute(connection, &block)
16
16
  @busy = true
17
- q = connection.query sql(connection), @opts
17
+ @query_text = sql(connection)
18
+ q = connection.query @query_text, @opts
18
19
  q.callback{ |result| succeed result, connection.affected_rows, &block }
19
- q.errback{ |error| fail error, &block }
20
+ q.errback{ |error| fail error, &block }
20
21
  return q
21
22
  end
22
23
 
23
24
  def succeed(result, affected_rows, &block)
24
25
  @deferrable.succeed result, affected_rows
26
+ rescue StandardError => error
27
+ fail error
25
28
  ensure
26
29
  @busy and block.call
27
30
  @busy = false
28
31
  end
32
+
29
33
  def fail(error, &block)
30
- @deferrable.fail error
34
+ @deferrable.errback &default_errback unless has_errbacks?
35
+ @deferrable.fail error, @query_text
31
36
  ensure
32
37
  @busy and block.call
33
38
  @busy = false
34
39
  end
35
40
 
41
+ def has_errbacks?
42
+ !@deferrable.errbacks.nil?
43
+ end
44
+
45
+ def default_errback
46
+ proc{ |error, sql| puts "#{error.class}: '#{error.message}' with query #{sql} in #{error.backtrace.first}" }
47
+ end
48
+
36
49
  end
37
50
 
38
51
  def initialize(conf)
39
52
  @pool_size = conf[:size] || 10
53
+ @on_error = conf[:on_error]
40
54
  @query_queue = EM::Queue.new
41
55
  start_queue conf
42
56
  end
@@ -59,10 +73,23 @@ class EmMysql2ConnectionPool
59
73
  end
60
74
  end
61
75
 
76
+ def on_error(&block)
77
+ @on_error = block
78
+ end
79
+
62
80
  def query(sql, opts={})
63
- deferrable = EM::DefaultDeferrable.new
81
+ deferrable = EM::DefaultDeferrableWithErrbacksAccessor.new
64
82
  deferrable.callback{ |result,affected_rows| yield result, affected_rows } if block_given?
83
+ deferrable.errback &@on_error if @on_error
84
+
65
85
  @query_queue.push Query.new(sql, opts, deferrable)
66
86
  deferrable
67
87
  end
68
88
  end
89
+
90
+ module EventMachine
91
+ class DefaultDeferrableWithErrbacksAccessor
92
+ include Deferrable
93
+ attr_accessor :errbacks
94
+ end
95
+ end
@@ -1,3 +1,3 @@
1
1
  module EmMysql2ConnectionPool
2
- VERSION = '0.0.4'
2
+ VERSION = '0.0.5'
3
3
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: em_mysql2_connection_pool
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.4
5
+ version: 0.0.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Niko Dittmann
@@ -10,8 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-04-05 00:00:00 +02:00
14
- default_executable:
13
+ date: 2011-04-15 00:00:00 Z
15
14
  dependencies:
16
15
  - !ruby/object:Gem::Dependency
17
16
  name: mysql2
@@ -57,7 +56,6 @@ extra_rdoc_files: []
57
56
  files:
58
57
  - lib/em_mysql2_connection_pool/version.rb
59
58
  - lib/em_mysql2_connection_pool.rb
60
- has_rdoc: true
61
59
  homepage: http://github.com/niko/em_mysql2_connection_pool
62
60
  licenses: []
63
61
 
@@ -81,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
81
79
  requirements: []
82
80
 
83
81
  rubyforge_project: em_mysql2_connection_pool
84
- rubygems_version: 1.5.0
82
+ rubygems_version: 1.7.2
85
83
  signing_key:
86
84
  specification_version: 3
87
85
  summary: a simple connection pool for Mysql2::EM connections