em_mysql2_connection_pool 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,32 +2,63 @@ require 'mysql2'
2
2
  require 'mysql2/em'
3
3
 
4
4
  class EmMysql2ConnectionPool
5
+
6
+ class Query
7
+ def initialize(sql, opts, deferrable)
8
+ @sql, @opts, @deferrable = sql, opts, deferrable
9
+ end
10
+
11
+ def sql(connection)
12
+ @sql.respond_to?(:call) ? @sql.call(connection) : @sql
13
+ end
14
+
15
+ def execute(connection, &block)
16
+ @busy = true
17
+ q = connection.query sql(connection), @opts
18
+ q.callback{ |result| succeed result, connection.affected_rows, &block }
19
+ q.errback{ |error| fail error, &block }
20
+ return q
21
+ end
22
+
23
+ def succeed(result, affected_rows, &block)
24
+ @deferrable.succeed result, affected_rows
25
+ ensure
26
+ @busy and block.call
27
+ @busy = false
28
+ end
29
+ def fail(error, &block)
30
+ @deferrable.fail error
31
+ ensure
32
+ @busy and block.call
33
+ @busy = false
34
+ end
35
+
36
+ end
37
+
5
38
  def initialize(conf)
6
39
  @pool_size = conf[:size] || 10
7
40
  @query_queue = EM::Queue.new
8
41
  start_queue conf
9
42
  end
10
-
43
+
11
44
  def worker
12
45
  proc{ |connection|
13
46
  @query_queue.pop do |query|
14
- sql = query[:sql].is_a?(Proc) ? query[:sql].call(connection) : query[:sql]
15
-
16
- connection.query(sql, query[:opts]).callback do |result|
17
- query[:callback].call result if query[:callback]
18
- worker.call connection
19
- end
47
+ query.execute(connection){ worker.call connection }
20
48
  end
21
49
  }
22
50
  end
23
-
51
+
24
52
  def start_queue(conf)
25
53
  @pool_size.times do
26
54
  worker.call Mysql2::EM::Client.new conf
27
55
  end
28
56
  end
29
-
30
- def query(sql, opts={}, &block)
31
- @query_queue.push :sql => sql, :opts => opts, :callback => block
57
+
58
+ def query(sql, opts={})
59
+ deferrable = EM::DefaultDeferrable.new
60
+ deferrable.callback{ |result,affected_rows| yield result, affected_rows } if block_given?
61
+ @query_queue.push Query.new(sql, opts, deferrable)
62
+ deferrable
32
63
  end
33
- end
64
+ end
@@ -1,3 +1,3 @@
1
1
  module EmMysql2ConnectionPool
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: em_mysql2_connection_pool
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 0
8
- - 2
9
- version: 0.0.2
4
+ prerelease:
5
+ version: 0.0.3
10
6
  platform: ruby
11
7
  authors:
12
8
  - Niko Dittmann
@@ -14,7 +10,7 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2011-01-28 00:00:00 +01:00
13
+ date: 2011-03-29 00:00:00 +02:00
18
14
  default_executable:
19
15
  dependencies:
20
16
  - !ruby/object:Gem::Dependency
@@ -25,8 +21,6 @@ dependencies:
25
21
  requirements:
26
22
  - - ">="
27
23
  - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
24
  version: "0"
31
25
  type: :runtime
32
26
  version_requirements: *id001
@@ -38,8 +32,6 @@ dependencies:
38
32
  requirements:
39
33
  - - ">="
40
34
  - !ruby/object:Gem::Version
41
- segments:
42
- - 0
43
35
  version: "0"
44
36
  type: :runtime
45
37
  version_requirements: *id002
@@ -51,8 +43,6 @@ dependencies:
51
43
  requirements:
52
44
  - - ~>
53
45
  - !ruby/object:Gem::Version
54
- segments:
55
- - 2
56
46
  version: "2"
57
47
  type: :development
58
48
  version_requirements: *id003
@@ -81,21 +71,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
81
71
  requirements:
82
72
  - - ">="
83
73
  - !ruby/object:Gem::Version
84
- segments:
85
- - 0
86
74
  version: "0"
87
75
  required_rubygems_version: !ruby/object:Gem::Requirement
88
76
  none: false
89
77
  requirements:
90
78
  - - ">="
91
79
  - !ruby/object:Gem::Version
92
- segments:
93
- - 0
94
80
  version: "0"
95
81
  requirements: []
96
82
 
97
83
  rubyforge_project: em_mysql2_connection_pool
98
- rubygems_version: 1.3.7
84
+ rubygems_version: 1.5.0
99
85
  signing_key:
100
86
  specification_version: 3
101
87
  summary: a simple connection pool for Mysql2::EM connections