em_mysql2_connection_pool 0.0.2 → 0.0.3

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