em-handlersocket 0.1.0 → 0.2.0
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/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
|