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 +1 -4
- data/lib/em-handlersocket/client.rb +14 -3
- data/lib/em-handlersocket/version.rb +1 -1
- data/spec/client_spec.rb +27 -1
- metadata +2 -2
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(*
|
50
|
-
execute(
|
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
|
data/spec/client_spec.rb
CHANGED
@@ -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
|
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
|