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 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