memcached 0.19.10 → 0.20.0
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/CHANGELOG +2 -0
- data/Manifest +3 -0
- data/ext/extconf.rb +4 -0
- data/ext/libmemcached-5.patch +832 -0
- data/ext/rlibmemcached.i +17 -4
- data/ext/rlibmemcached_wrap.c +230 -26
- data/lib/memcached.rb +1 -0
- data/lib/memcached/experimental_memcached.rb +31 -0
- data/lib/memcached/memcached.rb +6 -1
- data/memcached.gemspec +5 -5
- data/test/unit/memcached_experimental_test.rb +230 -0
- metadata +9 -4
- metadata.gz.sig +0 -0
data/ext/rlibmemcached.i
CHANGED
@@ -23,6 +23,7 @@
|
|
23
23
|
|
24
24
|
%apply unsigned short { uint8_t };
|
25
25
|
%apply unsigned int { uint16_t };
|
26
|
+
%apply unsigned int { uint32_t user_spec_len };
|
26
27
|
%apply unsigned long { uint32_t flags, uint32_t offset, uint32_t weight };
|
27
28
|
%apply unsigned long long { uint64_t data, uint64_t cas };
|
28
29
|
|
@@ -149,12 +150,12 @@
|
|
149
150
|
|
150
151
|
//// Manual wrappers
|
151
152
|
|
152
|
-
// Single get. SWIG likes to use SWIG_FromCharPtr instead of SWIG_FromCharPtrAndSize because
|
153
|
-
// of the retval/argout split, so it truncates return values with \0 in them.
|
153
|
+
// Single get. SWIG likes to use SWIG_FromCharPtr instead of SWIG_FromCharPtrAndSize because
|
154
|
+
// of the retval/argout split, so it truncates return values with \0 in them.
|
154
155
|
VALUE memcached_get_rvalue(memcached_st *ptr, const char *key, size_t key_length, uint32_t *flags, memcached_return *error);
|
155
156
|
%{
|
156
157
|
VALUE memcached_get_rvalue(memcached_st *ptr, const char *key, size_t key_length, uint32_t *flags, memcached_return *error) {
|
157
|
-
VALUE ret;
|
158
|
+
VALUE ret;
|
158
159
|
size_t value_length;
|
159
160
|
char *value = memcached_get(ptr, key, key_length, &value_length, flags, error);
|
160
161
|
ret = rb_str_new(value, value_length);
|
@@ -163,10 +164,22 @@ VALUE memcached_get_rvalue(memcached_st *ptr, const char *key, size_t key_length
|
|
163
164
|
};
|
164
165
|
%}
|
165
166
|
|
167
|
+
VALUE memcached_get_len_rvalue(memcached_st *ptr, const char *key, size_t key_length, uint32_t user_spec_len, uint32_t *flags, memcached_return *error);
|
168
|
+
%{
|
169
|
+
VALUE memcached_get_len_rvalue(memcached_st *ptr, const char *key, size_t key_length, uint32_t user_spec_len, uint32_t *flags, memcached_return *error) {
|
170
|
+
VALUE ret;
|
171
|
+
size_t value_length;
|
172
|
+
char *value = memcached_get_len(ptr, key, key_length, user_spec_len, &value_length, flags, error);
|
173
|
+
ret = rb_str_new(value, value_length);
|
174
|
+
free(value);
|
175
|
+
return ret;
|
176
|
+
};
|
177
|
+
%}
|
178
|
+
|
166
179
|
VALUE memcached_get_from_last_rvalue(memcached_st *ptr, const char *key, size_t key_length, uint32_t *flags, memcached_return *error);
|
167
180
|
%{
|
168
181
|
VALUE memcached_get_from_last_rvalue(memcached_st *ptr, const char *key, size_t key_length, uint32_t *flags, memcached_return *error) {
|
169
|
-
VALUE ret;
|
182
|
+
VALUE ret;
|
170
183
|
size_t value_length;
|
171
184
|
char *value = memcached_get_from_last(ptr, key, key_length, &value_length, flags, error);
|
172
185
|
ret = rb_str_new(value, value_length);
|
data/ext/rlibmemcached_wrap.c
CHANGED
@@ -2251,7 +2251,7 @@ SWIG_From_unsigned_SS_int (unsigned int value)
|
|
2251
2251
|
|
2252
2252
|
|
2253
2253
|
VALUE memcached_get_rvalue(memcached_st *ptr, const char *key, size_t key_length, uint32_t *flags, memcached_return *error) {
|
2254
|
-
VALUE ret;
|
2254
|
+
VALUE ret;
|
2255
2255
|
size_t value_length;
|
2256
2256
|
char *value = memcached_get(ptr, key, key_length, &value_length, flags, error);
|
2257
2257
|
ret = rb_str_new(value, value_length);
|
@@ -2260,8 +2260,18 @@ VALUE memcached_get_rvalue(memcached_st *ptr, const char *key, size_t key_length
|
|
2260
2260
|
};
|
2261
2261
|
|
2262
2262
|
|
2263
|
+
VALUE memcached_get_len_rvalue(memcached_st *ptr, const char *key, size_t key_length, uint32_t user_spec_len, uint32_t *flags, memcached_return *error) {
|
2264
|
+
VALUE ret;
|
2265
|
+
size_t value_length;
|
2266
|
+
char *value = memcached_get_len(ptr, key, key_length, user_spec_len, &value_length, flags, error);
|
2267
|
+
ret = rb_str_new(value, value_length);
|
2268
|
+
free(value);
|
2269
|
+
return ret;
|
2270
|
+
};
|
2271
|
+
|
2272
|
+
|
2263
2273
|
VALUE memcached_get_from_last_rvalue(memcached_st *ptr, const char *key, size_t key_length, uint32_t *flags, memcached_return *error) {
|
2264
|
-
VALUE ret;
|
2274
|
+
VALUE ret;
|
2265
2275
|
size_t value_length;
|
2266
2276
|
char *value = memcached_get_from_last(ptr, key, key_length, &value_length, flags, error);
|
2267
2277
|
ret = rb_str_new(value, value_length);
|
@@ -8735,6 +8745,74 @@ fail:
|
|
8735
8745
|
}
|
8736
8746
|
|
8737
8747
|
|
8748
|
+
SWIGINTERN VALUE
|
8749
|
+
_wrap_memcached_get_len(int argc, VALUE *argv, VALUE self) {
|
8750
|
+
memcached_st *arg1 = (memcached_st *) 0 ;
|
8751
|
+
char *arg2 = (char *) 0 ;
|
8752
|
+
size_t arg3 ;
|
8753
|
+
uint32_t arg4 ;
|
8754
|
+
size_t *arg5 = (size_t *) 0 ;
|
8755
|
+
uint32_t *arg6 = (uint32_t *) 0 ;
|
8756
|
+
memcached_return *arg7 = (memcached_return *) 0 ;
|
8757
|
+
void *argp1 = 0 ;
|
8758
|
+
int res1 = 0 ;
|
8759
|
+
unsigned int val4 ;
|
8760
|
+
int ecode4 = 0 ;
|
8761
|
+
size_t temp5 ;
|
8762
|
+
int res5 = SWIG_TMPOBJ ;
|
8763
|
+
uint32_t temp6 ;
|
8764
|
+
int res6 = SWIG_TMPOBJ ;
|
8765
|
+
memcached_return temp7 ;
|
8766
|
+
int res7 = SWIG_TMPOBJ ;
|
8767
|
+
char *result = 0 ;
|
8768
|
+
VALUE vresult = Qnil;
|
8769
|
+
|
8770
|
+
arg5 = &temp5;
|
8771
|
+
arg6 = &temp6;
|
8772
|
+
arg7 = &temp7;
|
8773
|
+
if ((argc < 3) || (argc > 3)) {
|
8774
|
+
rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
|
8775
|
+
}
|
8776
|
+
res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_memcached_st, 0 | 0 );
|
8777
|
+
if (!SWIG_IsOK(res1)) {
|
8778
|
+
SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "memcached_st *","memcached_get_len", 1, argv[0] ));
|
8779
|
+
}
|
8780
|
+
arg1 = (memcached_st *)(argp1);
|
8781
|
+
{
|
8782
|
+
arg2 = StringValuePtr(argv[1]);
|
8783
|
+
arg3 = (size_t) RSTRING_LEN(argv[1]);
|
8784
|
+
}
|
8785
|
+
ecode4 = SWIG_AsVal_unsigned_SS_int(argv[2], &val4);
|
8786
|
+
if (!SWIG_IsOK(ecode4)) {
|
8787
|
+
SWIG_exception_fail(SWIG_ArgError(ecode4), Ruby_Format_TypeError( "", "uint32_t","memcached_get_len", 4, argv[2] ));
|
8788
|
+
}
|
8789
|
+
arg4 = (uint32_t)(val4);
|
8790
|
+
result = (char *)memcached_get_len(arg1,(char const *)arg2,arg3,arg4,arg5,arg6,arg7);
|
8791
|
+
vresult = SWIG_FromCharPtr((const char *)result);
|
8792
|
+
if (SWIG_IsTmpObj(res5)) {
|
8793
|
+
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_From_size_t((*arg5)));
|
8794
|
+
} else {
|
8795
|
+
int new_flags = SWIG_IsNewObj(res5) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
|
8796
|
+
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj((void*)(arg5), SWIGTYPE_p_size_t, new_flags));
|
8797
|
+
}
|
8798
|
+
if (SWIG_IsTmpObj(res6)) {
|
8799
|
+
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_From_unsigned_SS_int((*arg6)));
|
8800
|
+
} else {
|
8801
|
+
int new_flags = SWIG_IsNewObj(res6) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
|
8802
|
+
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj((void*)(arg6), SWIGTYPE_p_uint32_t, new_flags));
|
8803
|
+
}
|
8804
|
+
if (SWIG_IsTmpObj(res7)) {
|
8805
|
+
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_From_unsigned_SS_short((*arg7)));
|
8806
|
+
} else {
|
8807
|
+
int new_flags = SWIG_IsNewObj(res7) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
|
8808
|
+
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj((void*)(arg7), SWIGTYPE_p_memcached_return, new_flags));
|
8809
|
+
}
|
8810
|
+
return vresult;
|
8811
|
+
fail:
|
8812
|
+
return Qnil;
|
8813
|
+
}
|
8814
|
+
|
8815
|
+
|
8738
8816
|
SWIGINTERN VALUE
|
8739
8817
|
_wrap_memcached_mget(int argc, VALUE *argv, VALUE self) {
|
8740
8818
|
memcached_st *arg1 = (memcached_st *) 0 ;
|
@@ -8774,6 +8852,53 @@ fail:
|
|
8774
8852
|
}
|
8775
8853
|
|
8776
8854
|
|
8855
|
+
SWIGINTERN VALUE
|
8856
|
+
_wrap_memcached_mget_len(int argc, VALUE *argv, VALUE self) {
|
8857
|
+
memcached_st *arg1 = (memcached_st *) 0 ;
|
8858
|
+
char **arg2 = (char **) 0 ;
|
8859
|
+
size_t *arg3 = (size_t *) 0 ;
|
8860
|
+
size_t arg4 ;
|
8861
|
+
uint32_t arg5 ;
|
8862
|
+
void *argp1 = 0 ;
|
8863
|
+
int res1 = 0 ;
|
8864
|
+
unsigned int val5 ;
|
8865
|
+
int ecode5 = 0 ;
|
8866
|
+
memcached_return result;
|
8867
|
+
VALUE vresult = Qnil;
|
8868
|
+
|
8869
|
+
if ((argc < 3) || (argc > 3)) {
|
8870
|
+
rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
|
8871
|
+
}
|
8872
|
+
res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_memcached_st, 0 | 0 );
|
8873
|
+
if (!SWIG_IsOK(res1)) {
|
8874
|
+
SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "memcached_st *","memcached_mget_len", 1, argv[0] ));
|
8875
|
+
}
|
8876
|
+
arg1 = (memcached_st *)(argp1);
|
8877
|
+
{
|
8878
|
+
int i;
|
8879
|
+
Check_Type(argv[1], T_ARRAY);
|
8880
|
+
arg4 = (unsigned int) RARRAY_LEN(argv[1]);
|
8881
|
+
arg3 = (size_t *) malloc((arg4+1)*sizeof(size_t));
|
8882
|
+
arg2 = (char **) malloc((arg4+1)*sizeof(char *));
|
8883
|
+
for(i = 0; i < arg4; i ++) {
|
8884
|
+
Check_Type(RARRAY_PTR(argv[1])[i], T_STRING);
|
8885
|
+
arg3[i] = RSTRING_LEN(RARRAY_PTR(argv[1])[i]);
|
8886
|
+
arg2[i] = StringValuePtr(RARRAY_PTR(argv[1])[i]);
|
8887
|
+
}
|
8888
|
+
}
|
8889
|
+
ecode5 = SWIG_AsVal_unsigned_SS_int(argv[2], &val5);
|
8890
|
+
if (!SWIG_IsOK(ecode5)) {
|
8891
|
+
SWIG_exception_fail(SWIG_ArgError(ecode5), Ruby_Format_TypeError( "", "uint32_t","memcached_mget_len", 5, argv[2] ));
|
8892
|
+
}
|
8893
|
+
arg5 = (uint32_t)(val5);
|
8894
|
+
result = (memcached_return)memcached_mget_len(arg1,(char const **)arg2,arg3,arg4,arg5);
|
8895
|
+
vresult = SWIG_From_int((int)(result));
|
8896
|
+
return vresult;
|
8897
|
+
fail:
|
8898
|
+
return Qnil;
|
8899
|
+
}
|
8900
|
+
|
8901
|
+
|
8777
8902
|
SWIGINTERN VALUE
|
8778
8903
|
_wrap_memcached_get_by_key(int argc, VALUE *argv, VALUE self) {
|
8779
8904
|
memcached_st *arg1 = (memcached_st *) 0 ;
|
@@ -8781,25 +8906,28 @@ _wrap_memcached_get_by_key(int argc, VALUE *argv, VALUE self) {
|
|
8781
8906
|
size_t arg3 ;
|
8782
8907
|
char *arg4 = (char *) 0 ;
|
8783
8908
|
size_t arg5 ;
|
8784
|
-
|
8785
|
-
|
8786
|
-
|
8909
|
+
uint32_t arg6 ;
|
8910
|
+
size_t *arg7 = (size_t *) 0 ;
|
8911
|
+
uint32_t *arg8 = (uint32_t *) 0 ;
|
8912
|
+
memcached_return *arg9 = (memcached_return *) 0 ;
|
8787
8913
|
void *argp1 = 0 ;
|
8788
8914
|
int res1 = 0 ;
|
8789
|
-
|
8790
|
-
int
|
8791
|
-
|
8915
|
+
unsigned int val6 ;
|
8916
|
+
int ecode6 = 0 ;
|
8917
|
+
size_t temp7 ;
|
8792
8918
|
int res7 = SWIG_TMPOBJ ;
|
8793
|
-
|
8919
|
+
uint32_t temp8 ;
|
8794
8920
|
int res8 = SWIG_TMPOBJ ;
|
8921
|
+
memcached_return temp9 ;
|
8922
|
+
int res9 = SWIG_TMPOBJ ;
|
8795
8923
|
char *result = 0 ;
|
8796
8924
|
VALUE vresult = Qnil;
|
8797
8925
|
|
8798
|
-
arg6 = &temp6;
|
8799
8926
|
arg7 = &temp7;
|
8800
8927
|
arg8 = &temp8;
|
8801
|
-
|
8802
|
-
|
8928
|
+
arg9 = &temp9;
|
8929
|
+
if ((argc < 3) || (argc > 3)) {
|
8930
|
+
rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
|
8803
8931
|
}
|
8804
8932
|
res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_memcached_st, 0 | 0 );
|
8805
8933
|
if (!SWIG_IsOK(res1)) {
|
@@ -8810,25 +8938,30 @@ _wrap_memcached_get_by_key(int argc, VALUE *argv, VALUE self) {
|
|
8810
8938
|
arg4 = arg2 = StringValuePtr(argv[1]);
|
8811
8939
|
arg5 = arg3 = (size_t) RSTRING_LEN(argv[1]);
|
8812
8940
|
}
|
8813
|
-
|
8941
|
+
ecode6 = SWIG_AsVal_unsigned_SS_int(argv[2], &val6);
|
8942
|
+
if (!SWIG_IsOK(ecode6)) {
|
8943
|
+
SWIG_exception_fail(SWIG_ArgError(ecode6), Ruby_Format_TypeError( "", "uint32_t","memcached_get_by_key", 6, argv[2] ));
|
8944
|
+
}
|
8945
|
+
arg6 = (uint32_t)(val6);
|
8946
|
+
result = (char *)memcached_get_by_key(arg1,(char const *)arg2,arg3,(char const *)arg4,arg5,arg6,arg7,arg8,arg9);
|
8814
8947
|
vresult = SWIG_FromCharPtr((const char *)result);
|
8815
|
-
if (SWIG_IsTmpObj(res6)) {
|
8816
|
-
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_From_size_t((*arg6)));
|
8817
|
-
} else {
|
8818
|
-
int new_flags = SWIG_IsNewObj(res6) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
|
8819
|
-
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj((void*)(arg6), SWIGTYPE_p_size_t, new_flags));
|
8820
|
-
}
|
8821
8948
|
if (SWIG_IsTmpObj(res7)) {
|
8822
|
-
vresult = SWIG_Ruby_AppendOutput(vresult,
|
8949
|
+
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_From_size_t((*arg7)));
|
8823
8950
|
} else {
|
8824
8951
|
int new_flags = SWIG_IsNewObj(res7) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
|
8825
|
-
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj((void*)(arg7),
|
8952
|
+
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj((void*)(arg7), SWIGTYPE_p_size_t, new_flags));
|
8826
8953
|
}
|
8827
8954
|
if (SWIG_IsTmpObj(res8)) {
|
8828
|
-
vresult = SWIG_Ruby_AppendOutput(vresult,
|
8955
|
+
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_From_unsigned_SS_int((*arg8)));
|
8829
8956
|
} else {
|
8830
8957
|
int new_flags = SWIG_IsNewObj(res8) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
|
8831
|
-
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj((void*)(arg8),
|
8958
|
+
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj((void*)(arg8), SWIGTYPE_p_uint32_t, new_flags));
|
8959
|
+
}
|
8960
|
+
if (SWIG_IsTmpObj(res9)) {
|
8961
|
+
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_From_unsigned_SS_short((*arg9)));
|
8962
|
+
} else {
|
8963
|
+
int new_flags = SWIG_IsNewObj(res9) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
|
8964
|
+
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj((void*)(arg9), SWIGTYPE_p_memcached_return, new_flags));
|
8832
8965
|
}
|
8833
8966
|
return vresult;
|
8834
8967
|
fail:
|
@@ -8844,6 +8977,7 @@ _wrap_memcached_mget_by_key(int argc, VALUE *argv, VALUE self) {
|
|
8844
8977
|
char **arg4 = (char **) 0 ;
|
8845
8978
|
size_t *arg5 = (size_t *) 0 ;
|
8846
8979
|
size_t arg6 ;
|
8980
|
+
uint32_t arg7 ;
|
8847
8981
|
void *argp1 = 0 ;
|
8848
8982
|
int res1 = 0 ;
|
8849
8983
|
int res2 ;
|
@@ -8851,11 +8985,13 @@ _wrap_memcached_mget_by_key(int argc, VALUE *argv, VALUE self) {
|
|
8851
8985
|
int alloc2 = 0 ;
|
8852
8986
|
size_t val3 ;
|
8853
8987
|
int ecode3 = 0 ;
|
8988
|
+
unsigned int val7 ;
|
8989
|
+
int ecode7 = 0 ;
|
8854
8990
|
memcached_return result;
|
8855
8991
|
VALUE vresult = Qnil;
|
8856
8992
|
|
8857
|
-
if ((argc <
|
8858
|
-
rb_raise(rb_eArgError, "wrong # of arguments(%d for
|
8993
|
+
if ((argc < 5) || (argc > 5)) {
|
8994
|
+
rb_raise(rb_eArgError, "wrong # of arguments(%d for 5)",argc); SWIG_fail;
|
8859
8995
|
}
|
8860
8996
|
res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_memcached_st, 0 | 0 );
|
8861
8997
|
if (!SWIG_IsOK(res1)) {
|
@@ -8884,7 +9020,12 @@ _wrap_memcached_mget_by_key(int argc, VALUE *argv, VALUE self) {
|
|
8884
9020
|
arg4[i] = StringValuePtr(RARRAY_PTR(argv[3])[i]);
|
8885
9021
|
}
|
8886
9022
|
}
|
8887
|
-
|
9023
|
+
ecode7 = SWIG_AsVal_unsigned_SS_int(argv[4], &val7);
|
9024
|
+
if (!SWIG_IsOK(ecode7)) {
|
9025
|
+
SWIG_exception_fail(SWIG_ArgError(ecode7), Ruby_Format_TypeError( "", "uint32_t","memcached_mget_by_key", 7, argv[4] ));
|
9026
|
+
}
|
9027
|
+
arg7 = (uint32_t)(val7);
|
9028
|
+
result = (memcached_return)memcached_mget_by_key(arg1,(char const *)arg2,arg3,(char const **)arg4,arg5,arg6,arg7);
|
8888
9029
|
vresult = SWIG_From_int((int)(result));
|
8889
9030
|
if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
|
8890
9031
|
return vresult;
|
@@ -12366,6 +12507,64 @@ fail:
|
|
12366
12507
|
}
|
12367
12508
|
|
12368
12509
|
|
12510
|
+
SWIGINTERN VALUE
|
12511
|
+
_wrap_memcached_get_len_rvalue(int argc, VALUE *argv, VALUE self) {
|
12512
|
+
memcached_st *arg1 = (memcached_st *) 0 ;
|
12513
|
+
char *arg2 = (char *) 0 ;
|
12514
|
+
size_t arg3 ;
|
12515
|
+
uint32_t arg4 ;
|
12516
|
+
uint32_t *arg5 = (uint32_t *) 0 ;
|
12517
|
+
memcached_return *arg6 = (memcached_return *) 0 ;
|
12518
|
+
void *argp1 = 0 ;
|
12519
|
+
int res1 = 0 ;
|
12520
|
+
unsigned int val4 ;
|
12521
|
+
int ecode4 = 0 ;
|
12522
|
+
uint32_t temp5 ;
|
12523
|
+
int res5 = SWIG_TMPOBJ ;
|
12524
|
+
memcached_return temp6 ;
|
12525
|
+
int res6 = SWIG_TMPOBJ ;
|
12526
|
+
VALUE result;
|
12527
|
+
VALUE vresult = Qnil;
|
12528
|
+
|
12529
|
+
arg5 = &temp5;
|
12530
|
+
arg6 = &temp6;
|
12531
|
+
if ((argc < 3) || (argc > 3)) {
|
12532
|
+
rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
|
12533
|
+
}
|
12534
|
+
res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_memcached_st, 0 | 0 );
|
12535
|
+
if (!SWIG_IsOK(res1)) {
|
12536
|
+
SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "memcached_st *","memcached_get_len_rvalue", 1, argv[0] ));
|
12537
|
+
}
|
12538
|
+
arg1 = (memcached_st *)(argp1);
|
12539
|
+
{
|
12540
|
+
arg2 = StringValuePtr(argv[1]);
|
12541
|
+
arg3 = (size_t) RSTRING_LEN(argv[1]);
|
12542
|
+
}
|
12543
|
+
ecode4 = SWIG_AsVal_unsigned_SS_int(argv[2], &val4);
|
12544
|
+
if (!SWIG_IsOK(ecode4)) {
|
12545
|
+
SWIG_exception_fail(SWIG_ArgError(ecode4), Ruby_Format_TypeError( "", "uint32_t","memcached_get_len_rvalue", 4, argv[2] ));
|
12546
|
+
}
|
12547
|
+
arg4 = (uint32_t)(val4);
|
12548
|
+
result = (VALUE)memcached_get_len_rvalue(arg1,(char const *)arg2,arg3,arg4,arg5,arg6);
|
12549
|
+
vresult = result;
|
12550
|
+
if (SWIG_IsTmpObj(res5)) {
|
12551
|
+
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_From_unsigned_SS_int((*arg5)));
|
12552
|
+
} else {
|
12553
|
+
int new_flags = SWIG_IsNewObj(res5) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
|
12554
|
+
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj((void*)(arg5), SWIGTYPE_p_uint32_t, new_flags));
|
12555
|
+
}
|
12556
|
+
if (SWIG_IsTmpObj(res6)) {
|
12557
|
+
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_From_unsigned_SS_short((*arg6)));
|
12558
|
+
} else {
|
12559
|
+
int new_flags = SWIG_IsNewObj(res6) ? (SWIG_POINTER_OWN | 0 ) : 0 ;
|
12560
|
+
vresult = SWIG_Ruby_AppendOutput(vresult, SWIG_NewPointerObj((void*)(arg6), SWIGTYPE_p_memcached_return, new_flags));
|
12561
|
+
}
|
12562
|
+
return vresult;
|
12563
|
+
fail:
|
12564
|
+
return Qnil;
|
12565
|
+
}
|
12566
|
+
|
12567
|
+
|
12369
12568
|
SWIGINTERN VALUE
|
12370
12569
|
_wrap_memcached_get_from_last_rvalue(int argc, VALUE *argv, VALUE self) {
|
12371
12570
|
memcached_st *arg1 = (memcached_st *) 0 ;
|
@@ -13359,8 +13558,12 @@ SWIGEXPORT void Init_rlibmemcached(void) {
|
|
13359
13558
|
rb_define_const(mRlibmemcached, "MEMCACHED_CONNECTION_TCP", SWIG_From_int((int)(MEMCACHED_CONNECTION_TCP)));
|
13360
13559
|
rb_define_const(mRlibmemcached, "MEMCACHED_CONNECTION_UDP", SWIG_From_int((int)(MEMCACHED_CONNECTION_UDP)));
|
13361
13560
|
rb_define_const(mRlibmemcached, "MEMCACHED_CONNECTION_UNIX_SOCKET", SWIG_From_int((int)(MEMCACHED_CONNECTION_UNIX_SOCKET)));
|
13561
|
+
rb_define_const(mRlibmemcached, "GET_LEN_ARG_UNSPECIFIED", SWIG_From_unsigned_SS_int((unsigned int)(-1U)));
|
13562
|
+
rb_define_const(mRlibmemcached, "GET_LEN_BUFSZ", SWIG_From_int((int)(32)));
|
13362
13563
|
rb_define_module_function(mRlibmemcached, "memcached_get", _wrap_memcached_get, -1);
|
13564
|
+
rb_define_module_function(mRlibmemcached, "memcached_get_len", _wrap_memcached_get_len, -1);
|
13363
13565
|
rb_define_module_function(mRlibmemcached, "memcached_mget", _wrap_memcached_mget, -1);
|
13566
|
+
rb_define_module_function(mRlibmemcached, "memcached_mget_len", _wrap_memcached_mget_len, -1);
|
13364
13567
|
rb_define_module_function(mRlibmemcached, "memcached_get_by_key", _wrap_memcached_get_by_key, -1);
|
13365
13568
|
rb_define_module_function(mRlibmemcached, "memcached_mget_by_key", _wrap_memcached_mget_by_key, -1);
|
13366
13569
|
rb_define_module_function(mRlibmemcached, "memcached_fetch", _wrap_memcached_fetch, -1);
|
@@ -13484,6 +13687,7 @@ SWIGEXPORT void Init_rlibmemcached(void) {
|
|
13484
13687
|
rb_define_module_function(mRlibmemcached, "memcached_get_sasl_callbacks", _wrap_memcached_get_sasl_callbacks, -1);
|
13485
13688
|
rb_define_module_function(mRlibmemcached, "memcached_sasl_authenticate_connection", _wrap_memcached_sasl_authenticate_connection, -1);
|
13486
13689
|
rb_define_module_function(mRlibmemcached, "memcached_get_rvalue", _wrap_memcached_get_rvalue, -1);
|
13690
|
+
rb_define_module_function(mRlibmemcached, "memcached_get_len_rvalue", _wrap_memcached_get_len_rvalue, -1);
|
13487
13691
|
rb_define_module_function(mRlibmemcached, "memcached_get_from_last_rvalue", _wrap_memcached_get_from_last_rvalue, -1);
|
13488
13692
|
rb_define_module_function(mRlibmemcached, "memcached_fetch_rvalue", _wrap_memcached_fetch_rvalue, -1);
|
13489
13693
|
rb_define_module_function(mRlibmemcached, "memcached_stat_get_rvalue", _wrap_memcached_stat_get_rvalue, -1);
|
data/lib/memcached.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
module ExperimentalMemcached
|
2
|
+
def get_len(user_spec_len, keys)
|
3
|
+
if keys.is_a? ::Array
|
4
|
+
# Multi get
|
5
|
+
ret = ::Memcached::Lib.memcached_mget_len(@struct, keys, user_spec_len);
|
6
|
+
check_return_code(ret, keys)
|
7
|
+
|
8
|
+
hash = {}
|
9
|
+
keys.each do
|
10
|
+
value, key, flags, ret = ::Memcached::Lib.memcached_fetch_rvalue(@struct)
|
11
|
+
break if ret == ::Memcached::Lib::MEMCACHED_END
|
12
|
+
if ret != ::Memcached::Lib::MEMCACHED_NOTFOUND
|
13
|
+
check_return_code(ret, key)
|
14
|
+
# Assign the value
|
15
|
+
hash[key] = value
|
16
|
+
end
|
17
|
+
end
|
18
|
+
hash
|
19
|
+
else
|
20
|
+
# Single get_len
|
21
|
+
value, flags, ret = ::Memcached::Lib.memcached_get_len_rvalue(@struct, keys, user_spec_len)
|
22
|
+
check_return_code(ret, keys)
|
23
|
+
value
|
24
|
+
end
|
25
|
+
rescue => e
|
26
|
+
tries ||= 0
|
27
|
+
raise unless tries < options[:exception_retry_limit] && should_retry(e)
|
28
|
+
tries += 1
|
29
|
+
retry
|
30
|
+
end
|
31
|
+
end
|
data/lib/memcached/memcached.rb
CHANGED
@@ -33,6 +33,7 @@ class Memcached
|
|
33
33
|
:use_udp => false,
|
34
34
|
:binary_protocol => false,
|
35
35
|
:credentials => nil,
|
36
|
+
:experimental_features => false,
|
36
37
|
:exception_retry_limit => 5,
|
37
38
|
:exceptions_to_retry => [
|
38
39
|
Memcached::ServerIsMarkedDead,
|
@@ -118,6 +119,10 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
118
119
|
options[:credentials] = [ENV["MEMCACHE_USERNAME"], ENV["MEMCACHE_PASSWORD"]]
|
119
120
|
end
|
120
121
|
|
122
|
+
if options[:experimental_features]
|
123
|
+
instance_eval { send(:extend, ::ExperimentalMemcached) }
|
124
|
+
end
|
125
|
+
|
121
126
|
options[:binary_protocol] = true if options[:credentials] != nil
|
122
127
|
|
123
128
|
# Force :buffer_requests to use :no_block
|
@@ -521,7 +526,7 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
521
526
|
tries ||= 0
|
522
527
|
raise unless tries < options[:exception_retry_limit] && should_retry(e)
|
523
528
|
tries += 1
|
524
|
-
retry
|
529
|
+
retry
|
525
530
|
end
|
526
531
|
|
527
532
|
# Gets a key's value from the previous server. Only useful with random distribution.
|