em-mysql 0.4.0 → 0.4.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.
data/em-mysql.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  spec = Gem::Specification.new do |s|
2
2
  s.name = 'em-mysql'
3
- s.version = '0.4.0'
3
+ s.version = '0.4.1'
4
4
  s.date = '2009-06-23'
5
5
  s.summary = 'Async MySQL client API for Ruby/EventMachine'
6
6
  s.email = "em-mysql@tmm1.net"
data/lib/em/mysql.rb CHANGED
@@ -15,7 +15,6 @@ class EventedMysql < EM::Connection
15
15
  @fd = mysql.socket
16
16
  @opts = opts
17
17
  @current = nil
18
- @@queue ||= []
19
18
  @processing = false
20
19
  @connected = true
21
20
 
@@ -33,6 +32,10 @@ class EventedMysql < EM::Connection
33
32
  'Lost connection to MySQL server during query'
34
33
  ] unless defined? DisconnectErrors
35
34
 
35
+ def queue
36
+ opts[:em_mysql].queue
37
+ end
38
+
36
39
  def notify_readable
37
40
  log 'readable'
38
41
  if item = @current
@@ -73,11 +76,11 @@ class EventedMysql < EM::Connection
73
76
  rescue Mysql::Error => e
74
77
  log 'mysql error', e.message
75
78
  if e.message =~ /Deadlock/
76
- @@queue << [response, sql, cblk, eblk]
79
+ queue << [response, sql, cblk, eblk]
77
80
  @processing = false
78
81
  next_query
79
82
  elsif DisconnectErrors.include? e.message
80
- @@queue << [response, sql, cblk, eblk]
83
+ queue << [response, sql, cblk, eblk]
81
84
  return close
82
85
  elsif cb = (eblk || @opts[:on_error])
83
86
  cb.call(e)
@@ -140,13 +143,13 @@ class EventedMysql < EM::Connection
140
143
  log 'mysql sending', sql
141
144
  @mysql.send_query(sql)
142
145
  else
143
- @@queue << [response, sql, cblk, eblk]
146
+ queue << [response, sql, cblk, eblk]
144
147
  return
145
148
  end
146
149
  rescue Mysql::Error => e
147
150
  log 'mysql error', e.message
148
151
  if DisconnectErrors.include? e.message
149
- @@queue << [response, sql, cblk, eblk]
152
+ queue << [response, sql, cblk, eblk]
150
153
  return close
151
154
  else
152
155
  raise e
@@ -166,7 +169,7 @@ class EventedMysql < EM::Connection
166
169
  private
167
170
 
168
171
  def next_query
169
- if @connected and !@processing and pending = @@queue.shift
172
+ if @connected and !@processing and pending = queue.shift
170
173
  response, sql, cblk, eblk = pending
171
174
  execute(sql, response, cblk, eblk)
172
175
  end
@@ -176,6 +179,7 @@ class EventedMysql < EM::Connection
176
179
  return unless @opts[:logging]
177
180
  p [Time.now, @fd, (@signature[-4..-1] if @signature), *args]
178
181
  end
182
+
179
183
 
180
184
  public
181
185
 
@@ -248,30 +252,40 @@ class EventedMysql < EM::Connection
248
252
  end
249
253
  end
250
254
 
251
- class EventedMysql
252
- def self.settings
253
- @settings ||= { :connections => 4, :logging => false }
255
+ class EmMysql
256
+ def initialize(settings = {})
257
+ @queue = []
258
+ @settings = { :connections => 4, :logging => false, :em_mysql => self }.merge settings
259
+ end
260
+
261
+ def queue
262
+ @queue
263
+ end
264
+
265
+ def settings
266
+ @settings
254
267
  end
255
268
 
256
- def self.execute query, type = nil, cblk = nil, eblk = nil, &blk
269
+ def execute query, type = nil, cblk = nil, eblk = nil, &blk
257
270
  unless nil#connection = connection_pool.find{|c| not c.processing and c.connected }
258
271
  @n ||= 0
272
+
259
273
  connection = connection_pool[@n]
260
274
  @n = 0 if (@n+=1) >= connection_pool.size
261
275
  end
262
-
276
+
263
277
  connection.execute(query, type, cblk, eblk, &blk)
264
278
  end
265
279
 
266
280
  %w[ select insert update raw ].each do |type| class_eval %[
267
281
 
268
- def self.#{type} query, cblk = nil, eblk = nil, &blk
282
+ def #{type} query, cblk = nil, eblk = nil, &blk
269
283
  execute query, :#{type}, cblk, eblk, &blk
270
284
  end
271
285
 
272
286
  ] end
273
287
 
274
- def self.all query, type = nil, &blk
288
+ def all query, type = nil, &blk
275
289
  responses = 0
276
290
  connection_pool.each do |c|
277
291
  c.execute(query, type) do
@@ -281,7 +295,7 @@ class EventedMysql
281
295
  end
282
296
  end
283
297
 
284
- def self.connection_pool
298
+ def connection_pool
285
299
  @connection_pool ||= (1..settings[:connections]).map{ EventedMysql.connect(settings) }
286
300
  # p ['connpool', settings[:connections], @connection_pool.size]
287
301
  # (1..(settings[:connections]-@connection_pool.size)).each do
@@ -291,6 +305,23 @@ class EventedMysql
291
305
  end
292
306
  end
293
307
 
308
+ class EventedMysql
309
+ @@proxy_object = EmMysql.new
310
+
311
+ def self.databases
312
+ @@databases ||= {}
313
+ end
314
+
315
+ [:settings, :connection_pool].each do |name|
316
+ class_eval "def self.#{name}(*args) @@proxy_object.send(:#{name}, *args); end"
317
+ end
318
+
319
+ [:execute, :connection_pool, :select, :insert, :update, :raw].each do |name|
320
+ class_eval "def self.#{name}(*args, &block) @@proxy_object.send(:#{name}, *args, &block); end"
321
+ end
322
+
323
+ end
324
+
294
325
  if __FILE__ == $0 and require 'em/spec'
295
326
 
296
327
  EM.describe EventedMysql, 'individual connections' do
data/lib/sequel/async.rb CHANGED
@@ -50,38 +50,43 @@ raise 'need Sequel >= 3.2.0' unless Sequel::MAJOR == 3 and Sequel::MINOR >= 2
50
50
 
51
51
  module Sequel
52
52
  class Dataset
53
+ STOCK_COUNT_OPTS = {:select => ["COUNT(*)".lit], :order => nil} unless defined? STOCK_COUNT_OPTS
54
+ def em_mysq
55
+ EventedMysql.databases[db] || EventedMysql
56
+ end
57
+
53
58
  def async_insert *args, &cb
54
- EventedMysql.insert insert_sql(*args), &cb
59
+ em_mysq.insert insert_sql(*args), &cb
55
60
  nil
56
61
  end
57
62
 
58
63
  def async_insert_ignore *args, &cb
59
- EventedMysql.insert insert_ignore.insert_sql(*args), &cb
64
+ em_mysq.insert insert_ignore.insert_sql(*args), &cb
60
65
  nil
61
66
  end
62
67
 
63
68
  def async_update *args, &cb
64
- EventedMysql.update update_sql(*args), &cb
69
+ em_mysq.update update_sql(*args), &cb
65
70
  nil
66
71
  end
67
72
 
68
73
  def async_delete &cb
69
- EventedMysql.execute delete_sql, &cb
74
+ em_mysq.execute delete_sql, &cb
70
75
  nil
71
76
  end
72
77
 
73
78
  def async_multi_insert *args, &cb
74
- EventedMysql.execute multi_insert_sql(*args).first, &cb
79
+ em_mysq.execute multi_insert_sql(*args).first, &cb
75
80
  nil
76
81
  end
77
82
 
78
83
  def async_multi_insert_ignore *args, &cb
79
- EventedMysql.execute insert_ignore.multi_insert_sql(*args).first, &cb
84
+ em_mysq.execute insert_ignore.multi_insert_sql(*args).first, &cb
80
85
  nil
81
86
  end
82
87
 
83
88
  def async_fetch_rows sql, iter = :each
84
- EventedMysql.raw(sql) do |m|
89
+ em_mysq.raw(sql) do |m|
85
90
  r = m.result
86
91
 
87
92
  i = -1
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: em-mysql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aman Gupta