aerospike_native 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bb3d554ba14a9cdc3064e7f710e1fd8e2f5303c9
4
- data.tar.gz: 06b57fc85d271be4c845838f0918daf4e334a771
3
+ metadata.gz: 7ac94d9b34b064822cc15dd0976ed7ced4b76c27
4
+ data.tar.gz: 085fe5f23cb779c0ff29a7cb74d82ecef51de905
5
5
  SHA512:
6
- metadata.gz: 71bcee1166282f8a9cfb6a4df0ecb04f91ab86abc78f988c45fcee6c42f018b2b410a028b6ea74b4975c6bbe975d5a4db2c84b4a65933fe2ab43727a9798fa46
7
- data.tar.gz: 688f5da01520a1686952f2f376bb093dd5b1450a181fdc7d5c727a955692b6ef56aadbff20b6440e6f718884bdff84e946beec9c1437bf59f72861dc19a9baf5
6
+ metadata.gz: 95e3ce1b3fb8a94c61a88bb839790769f1f9112abc1ed7526c464e1c9cfb1195b13d8e4c0bdb40fa09d84c3dab6b289cc119f0f95b53d4f58b463409b2e18a9a
7
+ data.tar.gz: 9384e2914162cbcc79aa1bb0e2bd850685e158c0617c59c0b8ab338da4d50782a794715779a69d113b8fc13ccb1d55c835593813fedc2b9752d67b7a3545a27f
data/README.md CHANGED
@@ -26,13 +26,18 @@ Or install it yourself as:
26
26
  * `remove` command
27
27
  * `select` command
28
28
  * `exixts?` command
29
- * `where` command (query support)
30
- * :disappointed: Raw (bytes) type is not supported
29
+ * `query` command (where and select support)
30
+ * Supported bytes type for non-native object types(string or fixnum) via [msgpack](https://github.com/msgpack/msgpack-ruby)
31
+ * lists and maps for bin value not supported yet (stored as bytes at the moment)
31
32
  * Supported policies with all parameters for described commands
32
33
  * Supported digest keys
33
34
  * Supported exceptions (`AerospikeNative::Exception`) with several error codes constants `AerospikeNative::Exception.constants`
34
35
  * Index management (`create_index` and `drop_index`)
35
36
 
37
+ ## Examples
38
+
39
+ In path `examples`
40
+
36
41
  ## Usage
37
42
 
38
43
  ### Basic
@@ -21,6 +21,8 @@ Gem::Specification.new do |spec|
21
21
  spec.require_paths = ["lib", "ext"]
22
22
  spec.extensions = %w[ext/aerospike_native/extconf.rb]
23
23
 
24
+ spec.add_dependency "msgpack", "~> 0.6"
25
+
24
26
  spec.add_development_dependency "bundler", "~> 1.7"
25
27
  spec.add_development_dependency "rake", "~> 10.0"
26
28
  spec.add_development_dependency "rake-compiler", "~> 0.9"
@@ -0,0 +1,38 @@
1
+ require 'aerospike_native'
2
+ require 'logger'
3
+
4
+ module Common
5
+ class Common
6
+ class << self
7
+ def namespace; 'test' end
8
+ def set; 'examples' end
9
+ def client; @@client ||= AerospikeNative::Client.new([{'host' => '127.0.0.1', 'port' => 3010}]) end
10
+
11
+ def cleanup
12
+ client.query(namespace, set).exec{ |record| client.remove(record.key) }
13
+ end
14
+
15
+ def custom_logger
16
+ @@logger = Logger.new(STDOUT, Logger::DEBUG)
17
+ end
18
+
19
+ def set_custom_logger
20
+ AerospikeNative::Client.set_logger custom_logger
21
+ AerospikeNative::Client.set_log_level :debug
22
+ end
23
+
24
+ def init
25
+ set_custom_logger
26
+ client
27
+ end
28
+
29
+ def run_example
30
+ init
31
+ custom_logger.info "Example started"
32
+ yield(client, namespace, set, custom_logger)
33
+ cleanup
34
+ custom_logger.info "Example finished"
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,31 @@
1
+ require './common/common'
2
+
3
+ def main
4
+ Common::Common.run_example do |client, namespace, set, logger|
5
+ key = AerospikeNative::Key.new(namespace, set, "operate_test")
6
+ bins = []
7
+ bins << AerospikeNative::Operation.write('value', 'beep')
8
+ bins << AerospikeNative::Operation.write('incr', 5)
9
+
10
+ record = client.operate(key, bins)
11
+ logger.info "Without read or touch: #{record.inspect}"
12
+
13
+ bins = []
14
+ bins << AerospikeNative::Operation.touch
15
+ bins << AerospikeNative::Operation.append('value', '_once')
16
+ bins << AerospikeNative::Operation.increment('incr', 10)
17
+
18
+ record = client.operate(key, bins)
19
+ logger.info "With touch: #{record.inspect}"
20
+
21
+ bins = []
22
+ bins << AerospikeNative::Operation.read('value')
23
+ bins << AerospikeNative::Operation.read('incr')
24
+ bins << AerospikeNative::Operation.prepend('value', 'twice_')
25
+
26
+ record = client.operate(key, bins)
27
+ logger.info "With read: #{record.inspect}"
28
+ end
29
+ end
30
+
31
+ main
@@ -0,0 +1,19 @@
1
+ require './common/common'
2
+
3
+ def main
4
+ Common::Common.run_example do |client, namespace, set, logger|
5
+ index_name = "number_#{set}_idx"
6
+ client.create_index(namespace, set, 'number', index_name)
7
+
8
+ 20.times do |i|
9
+ client.put(AerospikeNative::Key.new(namespace, set, i), {'number' => i, 'key' => 'number', 'testbin' => i.to_s})
10
+ end
11
+
12
+ records = client.query(namespace, set).select(:number, :testbin).where(number: [10, 15]).exec
13
+ logger.info records.inspect
14
+
15
+ client.drop_index(namespace, index_name)
16
+ end
17
+ end
18
+
19
+ main
@@ -78,10 +78,17 @@ VALUE client_initialize(int argc, VALUE* argv, VALUE self)
78
78
  if (TYPE(ary) == T_ARRAY) {
79
79
  idx = RARRAY_LEN(ary);
80
80
  for(n = 0; n < idx; n++) {
81
+ VALUE vHost, vPort;
81
82
  VALUE hash = rb_ary_entry(ary, n);
82
- VALUE host = rb_hash_aref(hash, rb_str_new2("host"));
83
- VALUE port = rb_hash_aref(hash, rb_str_new2("port"));
84
- as_config_add_host(&config, StringValueCStr(host), NUM2UINT(port));
83
+ vHost = rb_hash_aref(hash, rb_str_new2("host"));
84
+ if (TYPE(vHost) == T_NIL) {
85
+ vHost = rb_hash_aref(hash, ID2SYM( rb_intern("host") ));
86
+ }
87
+ vPort = rb_hash_aref(hash, rb_str_new2("port"));
88
+ if (TYPE(vPort) == T_NIL) {
89
+ vPort = rb_hash_aref(hash, ID2SYM( rb_intern("port") ));
90
+ }
91
+ as_config_add_host(&config, StringValueCStr(vHost), NUM2UINT(vPort));
85
92
  }
86
93
  }
87
94
 
@@ -159,10 +166,17 @@ VALUE client_put(int argc, VALUE* vArgs, VALUE vSelf)
159
166
  case T_FIXNUM:
160
167
  as_record_set_int64(&record, StringValueCStr(bin_name), NUM2LONG(bin_value));
161
168
  break;
162
- default:
163
- rb_raise(rb_eTypeError, "wrong argument type for bin value (expected Nil, Fixnum or String)");
169
+ // case T_ARRAY:
170
+ // case T_HASH:
171
+ // rb_raise(rb_eTypeError, "wrong argument type for bin value (hashes and arrays not supported yet)");
172
+ // break;
173
+ default: {
174
+ VALUE vBytes = rb_funcall(bin_value, rb_intern("to_msgpack"), 0);
175
+ int strSize = RSTRING_LEN(vBytes);
176
+ as_record_set_raw(&record, StringValueCStr(bin_name), StringValuePtr(vBytes), strSize);
164
177
  break;
165
178
  }
179
+ }
166
180
  }
167
181
 
168
182
  Data_Get_Struct(vKey, as_key, key);
@@ -285,10 +299,17 @@ VALUE client_operate(int argc, VALUE* vArgs, VALUE vSelf)
285
299
  case T_FIXNUM:
286
300
  as_operations_add_write_int64(&ops, StringValueCStr( bin_name ), NUM2LONG( bin_value ));
287
301
  break;
288
- default:
289
- rb_raise(rb_eTypeError, "wrong argument type for bin value (expected Nil, Fixnum or String)");
302
+ // case T_ARRAY:
303
+ // case T_HASH:
304
+ // rb_raise(rb_eTypeError, "wrong argument type for bin value (hashes and arrays not supported yet)");
305
+ // break;
306
+ default: {
307
+ VALUE vBytes = rb_funcall(bin_value, rb_intern("to_msgpack"), 0);
308
+ int strSize = RSTRING_LEN(vBytes);
309
+ as_operations_add_write_raw(&ops, StringValueCStr(bin_name), StringValuePtr(vBytes), strSize);
290
310
  break;
291
311
  }
312
+ }
292
313
 
293
314
  break;
294
315
  case OPERATION_READ:
@@ -602,9 +623,9 @@ VALUE client_drop_index(int argc, VALUE* vArgs, VALUE vSelf)
602
623
 
603
624
  /*
604
625
  * call-seq:
605
- * where(namespace, set) -> AerospikeNative::Query
626
+ * query(namespace, set) -> AerospikeNative::Query
606
627
  *
607
- * Instanciate new query
628
+ * Instantiate new query
608
629
  */
609
630
  VALUE client_query(VALUE vSelf, VALUE vNamespace, VALUE vSet)
610
631
  {
@@ -29,6 +29,7 @@ VALUE rb_record_from_c(as_record* record, as_key* key)
29
29
  {
30
30
  VALUE vKeyParams[5], vParams[4];
31
31
  VALUE vLogger;
32
+ VALUE vMsgPackClass;
32
33
  as_key current_key;
33
34
  as_bin bin;
34
35
  int n;
@@ -60,6 +61,7 @@ VALUE rb_record_from_c(as_record* record, as_key* key)
60
61
  vParams[2] = UINT2NUM(record->gen);
61
62
  vParams[3] = UINT2NUM(record->ttl);
62
63
 
64
+ vMsgPackClass = rb_const_get(rb_cObject, rb_intern("MessagePack"));
63
65
  for(n = 0; n < record->bins.size; n++) {
64
66
  bin = record->bins.entries[n];
65
67
  switch( as_val_type(bin.valuep) ) {
@@ -72,6 +74,11 @@ VALUE rb_record_from_c(as_record* record, as_key* key)
72
74
  case AS_STRING:
73
75
  rb_hash_aset(vParams[1], rb_str_new2(bin.name), rb_str_new2(bin.valuep->string.value));
74
76
  break;
77
+ case AS_BYTES: {
78
+ VALUE vString = rb_str_new(bin.valuep->bytes.value, bin.valuep->bytes.size);
79
+ rb_hash_aset(vParams[1], rb_str_new2(bin.name), rb_funcall(vMsgPackClass, rb_intern("unpack"), 1, vString));
80
+ break;
81
+ }
75
82
  case AS_UNDEF:
76
83
  default:
77
84
  vLogger = rb_cv_get(ClientClass, "@@logger");
@@ -1,4 +1,5 @@
1
1
  require "aerospike_native/version"
2
+ require "msgpack"
2
3
 
3
4
  module AerospikeNative
4
5
  # Your code goes here...
@@ -1,3 +1,3 @@
1
1
  module AerospikeNative
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aerospike_native
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Ziablitskii
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-18 00:00:00.000000000 Z
11
+ date: 2015-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: msgpack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.6'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -81,6 +95,9 @@ files:
81
95
  - README.md
82
96
  - Rakefile
83
97
  - aerospike_native.gemspec
98
+ - examples/common/common.rb
99
+ - examples/operate.rb
100
+ - examples/query_and_index.rb
84
101
  - ext/aerospike_native/aerospike_native.c
85
102
  - ext/aerospike_native/aerospike_native.h
86
103
  - ext/aerospike_native/client.c