def notify_readable
log 'readable'
if item = @current
@current = nil
start, response, sql, cblk, eblk = item
log 'mysql response', Time.now-start, sql
arg = case response
when :raw
result = @mysql.get_result
@mysql.instance_variable_set('@cur_result', result)
@mysql
when :select
ret = []
result = @mysql.get_result
result.each_hash{|h| ret << h }
log 'mysql result', ret
ret
when :update
result = @mysql.get_result
@mysql.affected_rows
when :insert
result = @mysql.get_result
@mysql.insert_id
else
result = @mysql.get_result
log 'got a result??', result if result
nil
end
@processing = false
next_query
cblk.call(arg) if cblk
else
log 'readable, but nothing queued?! probably an ERROR state'
return close
end
rescue Mysql::Error => e
log 'mysql error', e.message
if e.message =~ /Deadlock/
@@queue << [response, sql, cblk, eblk]
@processing = false
next_query
elsif DisconnectErrors.include? e.message
@@queue << [response, sql, cblk, eblk]
return close
elsif cb = (eblk || @opts[:on_error])
cb.call(e)
@processing = false
next_query
else
raise e
end
end