em-handlersocket 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -7,6 +7,7 @@ EventMachine client for HandlerSocket MySQL plugin for direct read/write of Inno
7
7
  ## Features
8
8
 
9
9
  - Plays nicely with the (EventMachine) reactor
10
+ - Find, Multi-find, Insert, Update, Delete support
10
11
  - No native extensions
11
12
  - Pipelined processing
12
13
 
@@ -29,10 +30,6 @@ Open the PRIMARY key index on the widgets.user InnoDB table, and query for id ==
29
30
  end
30
31
  }
31
32
 
32
- ## Todo
33
-
34
- - Add support for insert/update/delete
35
-
36
33
  ## Resources
37
34
 
38
35
  - [HandlerSocket Protocol](https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/blob/master/docs-en/protocol.en.txt)
@@ -46,8 +46,20 @@ module EventMachine
46
46
  execute([['P', opts[:id], opts[:db], opts[:table], opts[:index_name], opts[:columns]]])
47
47
  end
48
48
 
49
- def query(*queries)
50
- execute(queries.map{|q| [q[:id], q[:op], q[:key].size, q[:key], q[:limit], q[:offset]].compact })
49
+ def query(*qu)
50
+ execute(qu.map{|q| [q[:id], q[:op], q[:key].size, q[:key], q[:limit], q[:offset]].compact })
51
+ end
52
+
53
+ def insert(opts)
54
+ execute([[opts[:id], '+', opts[:data].size, opts[:data]]])
55
+ end
56
+
57
+ def delete(q)
58
+ execute([[q[:id], q[:op], q[:key].size, q[:key], (q[:limit] || 1), (q[:offset] || 0), 'D']])
59
+ end
60
+
61
+ def update(q)
62
+ execute([[q[:id], q[:op], q[:key].size, q[:key], (q[:limit] || 1), (q[:offset] || 0), 'U', q[:data]]])
51
63
  end
52
64
 
53
65
  def execute(cmd, &blk)
@@ -56,7 +68,6 @@ module EventMachine
56
68
  end
57
69
 
58
70
  private
59
-
60
71
  def send(data)
61
72
  send_data data.map {|d| d.join("\t")}.join("\n") + "\n"
62
73
  end
@@ -1,5 +1,5 @@
1
1
  module EventMachine
2
2
  module HandlerSocket
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -107,7 +107,7 @@ describe EventMachine::HandlerSocket do
107
107
  idx = {:id => 0, :db => 'widgets', :table => 'user', :index_name => 'id_created', :columns => 'user_name'}
108
108
 
109
109
  d = c.open_index(idx)
110
- d.callback do |s|
110
+ d.callback do
111
111
 
112
112
  d = c.query(:id => 0, :op => '>=', :key => ['2', '2010-01-03'])
113
113
  d.errback { fail }
@@ -119,4 +119,30 @@ describe EventMachine::HandlerSocket do
119
119
  }
120
120
  end
121
121
 
122
+ it "should insert, delete a new record" do
123
+ EM.run {
124
+ c = EM::HandlerSocket.new(:port => 9999)
125
+ idx = {:id => 0, :db => 'widgets', :table => 'user', :index_name => 'PRIMARY', :columns => 'user_name'}
126
+
127
+ d = c.open_index(idx)
128
+ d.callback do
129
+ d = c.insert(:id => 0, :data => ['Bobby'])
130
+ d.errback { fail }
131
+ d.callback {
132
+
133
+ d = c.update(:id => 0, :op => '=', :key => ['0'], :data => 'Andrew')
134
+ d.errback { fail }
135
+ d.callback do |n|
136
+ n.should == ["1"]
137
+
138
+ d = c.delete(:id => 0, :op => '=', :key => ['0'])
139
+ d.errback { fail }
140
+ d.callback { EM.stop }
141
+ end
142
+
143
+ }
144
+ end
145
+ }
146
+ end
147
+
122
148
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
7
+ - 2
8
8
  - 0
9
- version: 0.1.0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Ilya Grigorik