em_mysql2_connection_pool 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -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