rroonga 6.0.0 → 6.0.2
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.
- checksums.yaml +4 -4
- data/doc/text/news.md +38 -1
- data/ext/groonga/extconf.rb +14 -1
- data/ext/groonga/rb-grn-array.c +1 -1
- data/ext/groonga/rb-grn-double-array-trie.c +1 -1
- data/ext/groonga/rb-grn-exception.c +18 -1
- data/ext/groonga/rb-grn-expression.c +0 -8
- data/ext/groonga/rb-grn-hash.c +15 -3
- data/ext/groonga/rb-grn-logger.c +22 -22
- data/ext/groonga/rb-grn-object.c +28 -6
- data/ext/groonga/rb-grn-patricia-trie.c +1 -1
- data/ext/groonga/rb-grn-request-canceler.c +164 -0
- data/ext/groonga/rb-grn-request-timer-id.c +64 -0
- data/ext/groonga/rb-grn-request-timer.c +155 -0
- data/ext/groonga/rb-grn-type.c +43 -1
- data/ext/groonga/rb-grn.h +17 -5
- data/ext/groonga/rb-groonga.c +3 -0
- data/lib/groonga/expression-builder.rb +4 -13
- data/rroonga-build.rb +3 -3
- data/rroonga.gemspec +1 -2
- data/test/run-test.rb +2 -2
- data/test/test-expression-builder.rb +13 -1
- data/test/test-hash.rb +22 -3
- data/test/test-request-canceler.rb +46 -0
- data/test/test-request-timer.rb +40 -0
- data/test/test-table.rb +43 -7
- data/test/test-type.rb +104 -2
- metadata +59 -66
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 475b1c66414213ee96bd581c7de7a6689abf3863
|
4
|
+
data.tar.gz: bec353bd58e2ab048f379cd73a33be130690242e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b091a21fe716b530d6c6d3d044fe164efe746665a4a0ef106a24cd4c1ffcc0c78dc4029edc1e755cade63286aa890f49654840c3a2aee67ce742a9d58a843095
|
7
|
+
data.tar.gz: 8876710a8d73dc06b1255800cd0b67203d74bdfe525c5b24c767126e79d4102aaa4d1acba4f0bf81012bb8bfb762466dbfa1488fc73fe7303fa62f0b9bbdeac9
|
data/doc/text/news.md
CHANGED
@@ -1,5 +1,42 @@
|
|
1
1
|
# NEWS
|
2
2
|
|
3
|
+
## 6.0.2 2016-05-18 {#version-6-0-2}
|
4
|
+
|
5
|
+
### Improvements
|
6
|
+
|
7
|
+
* Supported Groonga 6.0.2. Groonga 6.0.1 or older aren't supported.
|
8
|
+
|
9
|
+
* {Groonga::Table#select}: Supported nested array as conditions.
|
10
|
+
|
11
|
+
* Supported HTTP proxy with authentication on install.
|
12
|
+
[GitHub#129] [Patch by ngram]
|
13
|
+
|
14
|
+
* {Groonga::Cancel}: Added a new error class.
|
15
|
+
|
16
|
+
* {Groonga::Table#select}: Supported passing Hash as function argument.
|
17
|
+
|
18
|
+
* {Groonga::Hash.create}: Added `:key_large` option to create hash
|
19
|
+
table that supports 1TiB total key size.
|
20
|
+
|
21
|
+
* {Groonga::Type#text_family?}: Added a new predicate that returns
|
22
|
+
`true` for `ShortText`, `Text` and `LongText` types.
|
23
|
+
|
24
|
+
* {Groonga::Type#number_family?}: Added a new predicate that returns
|
25
|
+
`true` for `UInt8`, `Int8`, ..., `UInt64`, `Int64` and `Float`
|
26
|
+
types.
|
27
|
+
|
28
|
+
* {Groonga::Type#builtin?}: Added a new predicate that returns
|
29
|
+
`true` for builtin types such as `Int32`.
|
30
|
+
|
31
|
+
* {Groonga::Object#remove}: Added `:dependent` option to remove all
|
32
|
+
tables and columns that depend on the object.
|
33
|
+
|
34
|
+
* {Groonga::RequestCanceler}: Added an interface that cancels one or
|
35
|
+
more requests.
|
36
|
+
|
37
|
+
* {Groonga::RequestTimer}: Added an interface that provides request
|
38
|
+
timeout feature.
|
39
|
+
|
3
40
|
## 6.0.0: 2016-03-06 {#version-6-0-0}
|
4
41
|
|
5
42
|
### Improvements
|
@@ -22,7 +59,7 @@
|
|
22
59
|
as number object. The number object was always treated as ID not
|
23
60
|
key.
|
24
61
|
|
25
|
-
It's backward
|
62
|
+
It's backward incompatible change but we introduced the
|
26
63
|
change. Because we marked this behavior as a bug.
|
27
64
|
|
28
65
|
* Supported `require "rroonga"` for `Bundler.require`.
|
data/ext/groonga/extconf.rb
CHANGED
@@ -21,6 +21,7 @@ require "mkmf"
|
|
21
21
|
require "fileutils"
|
22
22
|
require "shellwords"
|
23
23
|
require "open-uri"
|
24
|
+
require "uri"
|
24
25
|
|
25
26
|
require "pkg-config"
|
26
27
|
|
@@ -83,7 +84,19 @@ def download(url)
|
|
83
84
|
if File.exist?(base_name)
|
84
85
|
message(" skip (use downloaded file)\n")
|
85
86
|
else
|
86
|
-
|
87
|
+
options = {}
|
88
|
+
proxy_env = ENV["http_proxy"]
|
89
|
+
if proxy_env
|
90
|
+
proxy_url = URI.parse(proxy_env)
|
91
|
+
if proxy_url.user
|
92
|
+
options[:proxy_http_basic_authentication] = [
|
93
|
+
proxy_url,
|
94
|
+
proxy_url.user,
|
95
|
+
proxy_url.password,
|
96
|
+
]
|
97
|
+
end
|
98
|
+
end
|
99
|
+
open(url, "rb", options) do |input|
|
87
100
|
File.open(base_name, "wb") do |output|
|
88
101
|
while (buffer = input.read(1024))
|
89
102
|
output.print(buffer)
|
data/ext/groonga/rb-grn-array.c
CHANGED
@@ -90,7 +90,7 @@ rb_grn_array_s_create (int argc, VALUE *argv, VALUE klass)
|
|
90
90
|
grn_obj *value_type = NULL, *table;
|
91
91
|
const char *name = NULL, *path = NULL;
|
92
92
|
unsigned name_size = 0;
|
93
|
-
|
93
|
+
grn_table_flags flags = GRN_OBJ_TABLE_NO_KEY;
|
94
94
|
VALUE rb_table;
|
95
95
|
VALUE options, rb_context, rb_name, rb_path, rb_persistent;
|
96
96
|
VALUE rb_value_type, rb_sub_records;
|
@@ -245,7 +245,7 @@ rb_grn_double_array_trie_s_create (int argc, VALUE *argv, VALUE klass)
|
|
245
245
|
grn_obj *key_type = NULL, *value_type = NULL, *table;
|
246
246
|
const char *name = NULL, *path = NULL;
|
247
247
|
unsigned name_size = 0;
|
248
|
-
|
248
|
+
grn_table_flags flags = GRN_OBJ_TABLE_DAT_KEY;
|
249
249
|
VALUE rb_table;
|
250
250
|
VALUE options, rb_context, rb_name, rb_path, rb_persistent;
|
251
251
|
VALUE rb_key_normalize, rb_key_with_sis, rb_key_type;
|
@@ -100,6 +100,7 @@ static VALUE eGrnTokenFilterError;
|
|
100
100
|
static VALUE eGrnCommandError;
|
101
101
|
static VALUE eGrnPluginError;
|
102
102
|
static VALUE eGrnScorerError;
|
103
|
+
static VALUE eGrnCancel;
|
103
104
|
|
104
105
|
VALUE
|
105
106
|
rb_grn_rc_to_exception (grn_rc rc)
|
@@ -341,6 +342,9 @@ rb_grn_rc_to_exception (grn_rc rc)
|
|
341
342
|
case GRN_SCORER_ERROR:
|
342
343
|
exception = eGrnScorerError;
|
343
344
|
break;
|
345
|
+
case GRN_CANCEL:
|
346
|
+
exception = eGrnCancel;
|
347
|
+
break;
|
344
348
|
}
|
345
349
|
|
346
350
|
if (NIL_P(exception))
|
@@ -589,6 +593,9 @@ rb_grn_rc_to_message (grn_rc rc)
|
|
589
593
|
case GRN_SCORER_ERROR:
|
590
594
|
message = "scorer error";
|
591
595
|
break;
|
596
|
+
case GRN_CANCEL:
|
597
|
+
message = "cancel";
|
598
|
+
break;
|
592
599
|
}
|
593
600
|
|
594
601
|
if (!message)
|
@@ -1276,6 +1283,16 @@ rb_grn_init_exception (VALUE mGrn)
|
|
1276
1283
|
*
|
1277
1284
|
* @since 5.0.1
|
1278
1285
|
*/
|
1279
|
-
|
1286
|
+
eGrnScorerError =
|
1280
1287
|
rb_define_class_under(mGrn, "ScorerError", rb_eGrnError);
|
1288
|
+
|
1289
|
+
/*
|
1290
|
+
* Document-class: Groonga::Cancel
|
1291
|
+
*
|
1292
|
+
* It is used when a processing is canceled.
|
1293
|
+
*
|
1294
|
+
* @since 6.0.2
|
1295
|
+
*/
|
1296
|
+
eGrnCancel =
|
1297
|
+
rb_define_class_under(mGrn, "Cancel", rb_eGrnError);
|
1281
1298
|
}
|
@@ -203,8 +203,6 @@ rb_grn_expression_define_variable (int argc, VALUE *argv, VALUE self)
|
|
203
203
|
return rb_variable;
|
204
204
|
}
|
205
205
|
|
206
|
-
/* TODO: Enable when Groonga 6.0.1 is released. */
|
207
|
-
/*
|
208
206
|
typedef struct
|
209
207
|
{
|
210
208
|
grn_ctx *context;
|
@@ -238,7 +236,6 @@ rb_grn_hash_from_ruby_hash_body (VALUE rb_key,
|
|
238
236
|
|
239
237
|
return ST_CONTINUE;
|
240
238
|
}
|
241
|
-
*/
|
242
239
|
|
243
240
|
/*
|
244
241
|
* _object_ を追加し、 _n_arguments_ 個の引数を取る _operation_ を追加する。
|
@@ -269,8 +266,6 @@ rb_grn_expression_append_object (int argc, VALUE *argv, VALUE self)
|
|
269
266
|
NULL, NULL,
|
270
267
|
NULL, NULL, NULL);
|
271
268
|
|
272
|
-
/* TODO: Enable when Groonga 6.0.1 is released. */
|
273
|
-
/*
|
274
269
|
if (RB_TYPE_P(rb_object, RUBY_T_HASH)) {
|
275
270
|
RbGrnHashFromRubyHashData data;
|
276
271
|
data.context = context;
|
@@ -288,13 +283,10 @@ rb_grn_expression_append_object (int argc, VALUE *argv, VALUE self)
|
|
288
283
|
grn_expr_append_obj(context, expression, (grn_obj *)(data.hash),
|
289
284
|
operation, n_arguments);
|
290
285
|
} else {
|
291
|
-
*/
|
292
286
|
object = RVAL2GRNOBJECT(rb_object, &context);
|
293
287
|
grn_expr_append_obj(context, expression, object,
|
294
288
|
operation, n_arguments);
|
295
|
-
/*
|
296
289
|
}
|
297
|
-
*/
|
298
290
|
rb_grn_context_check(context, self);
|
299
291
|
rb_ary_push(rb_iv_get(self, "@objects"), rb_object);
|
300
292
|
|
data/ext/groonga/rb-grn-hash.c
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2
2
|
/*
|
3
|
-
Copyright (C) 2009-
|
3
|
+
Copyright (C) 2009-2016 Kouhei Sutou <kou@clear-code.com>
|
4
4
|
|
5
5
|
This library is free software; you can redistribute it and/or
|
6
6
|
modify it under the terms of the GNU Lesser General Public
|
@@ -103,6 +103,12 @@ VALUE rb_cGrnHash;
|
|
103
103
|
*
|
104
104
|
* @deprecated Use @:normalizer => "NormalizerAuto"@ instead.
|
105
105
|
*
|
106
|
+
* @option options [Boolean] :key_large (false)
|
107
|
+
* It specifies whether total key size is large or not. The
|
108
|
+
* default total key size is 4GiB. Large total key size is 1TiB.
|
109
|
+
*
|
110
|
+
* @since 6.0.1
|
111
|
+
*
|
106
112
|
* @option options :key_type
|
107
113
|
* キーの種類を示すオブジェクトを指定する。キーの種類には型
|
108
114
|
* 名("Int32"や"ShortText"など)または {Groonga::Type} または
|
@@ -158,10 +164,12 @@ rb_grn_hash_s_create (int argc, VALUE *argv, VALUE klass)
|
|
158
164
|
grn_obj *key_type = NULL, *value_type = NULL, *table;
|
159
165
|
const char *name = NULL, *path = NULL;
|
160
166
|
unsigned name_size = 0;
|
161
|
-
|
167
|
+
grn_table_flags flags = GRN_OBJ_TABLE_HASH_KEY;
|
162
168
|
VALUE rb_table;
|
163
169
|
VALUE options, rb_context, rb_name, rb_path, rb_persistent;
|
164
|
-
VALUE rb_key_normalize
|
170
|
+
VALUE rb_key_normalize;
|
171
|
+
VALUE rb_key_large;
|
172
|
+
VALUE rb_key_type, rb_value_type, rb_default_tokenizer;
|
165
173
|
VALUE rb_token_filters;
|
166
174
|
VALUE rb_sub_records;
|
167
175
|
VALUE rb_normalizer;
|
@@ -174,6 +182,7 @@ rb_grn_hash_s_create (int argc, VALUE *argv, VALUE klass)
|
|
174
182
|
"path", &rb_path,
|
175
183
|
"persistent", &rb_persistent,
|
176
184
|
"key_normalize", &rb_key_normalize,
|
185
|
+
"key_large", &rb_key_large,
|
177
186
|
"key_type", &rb_key_type,
|
178
187
|
"value_type", &rb_value_type,
|
179
188
|
"default_tokenizer", &rb_default_tokenizer,
|
@@ -201,6 +210,9 @@ rb_grn_hash_s_create (int argc, VALUE *argv, VALUE klass)
|
|
201
210
|
if (RVAL2CBOOL(rb_key_normalize))
|
202
211
|
flags |= GRN_OBJ_KEY_NORMALIZE;
|
203
212
|
|
213
|
+
if (RVAL2CBOOL(rb_key_large))
|
214
|
+
flags |= GRN_OBJ_KEY_LARGE;
|
215
|
+
|
204
216
|
if (NIL_P(rb_key_type)) {
|
205
217
|
key_type = grn_ctx_at(context, GRN_DB_SHORT_TEXT);
|
206
218
|
} else {
|
data/ext/groonga/rb-grn-logger.c
CHANGED
@@ -28,9 +28,9 @@
|
|
28
28
|
#define GRNLOGLEVEL2RVAL(level) (rb_grn_log_level_to_ruby_object(level))
|
29
29
|
#define RVAL2GRNLOGLEVEL(rb_level) (rb_grn_log_level_from_ruby_object(rb_level))
|
30
30
|
|
31
|
-
VALUE
|
32
|
-
VALUE
|
33
|
-
VALUE
|
31
|
+
VALUE rb_cGrnLogger;
|
32
|
+
VALUE rb_mGrnLoggerFlags;
|
33
|
+
VALUE rb_cGrnCallbackLogger;
|
34
34
|
|
35
35
|
static ID id_caller_locations;
|
36
36
|
static ID id_path;
|
@@ -333,7 +333,7 @@ rb_grn_logger_s_register (int argc, VALUE *argv, VALUE klass)
|
|
333
333
|
if (!NIL_P(rb_logger)) {
|
334
334
|
rb_options = rb_logger;
|
335
335
|
}
|
336
|
-
rb_logger = rb_funcall(
|
336
|
+
rb_logger = rb_funcall(rb_cGrnCallbackLogger, id_new, 1, rb_callback);
|
337
337
|
}
|
338
338
|
|
339
339
|
rb_grn_scan_options(rb_options,
|
@@ -361,7 +361,7 @@ rb_grn_logger_s_register (int argc, VALUE *argv, VALUE klass)
|
|
361
361
|
flags |= GRN_LOG_LOCATION;
|
362
362
|
}
|
363
363
|
if (!NIL_P(rb_flags)) {
|
364
|
-
flags = rb_funcall(
|
364
|
+
flags = rb_funcall(rb_mGrnLoggerFlags, id_parse, 2,
|
365
365
|
INT2NUM(flags), rb_flags);
|
366
366
|
}
|
367
367
|
|
@@ -617,34 +617,34 @@ rb_grn_init_logger (VALUE mGrn)
|
|
617
617
|
|
618
618
|
rb_grn_logger.user_data = (void *)Qnil;
|
619
619
|
|
620
|
-
|
620
|
+
rb_cGrnLogger = rb_define_class_under(mGrn, "Logger", rb_cObject);
|
621
621
|
|
622
|
-
rb_cv_set(
|
623
|
-
rb_define_singleton_method(
|
622
|
+
rb_cv_set(rb_cGrnLogger, "@@current_logger", Qnil);
|
623
|
+
rb_define_singleton_method(rb_cGrnLogger, "log",
|
624
624
|
rb_grn_logger_s_log, -1);
|
625
|
-
rb_define_singleton_method(
|
625
|
+
rb_define_singleton_method(rb_cGrnLogger, "register",
|
626
626
|
rb_grn_logger_s_register, -1);
|
627
|
-
rb_define_singleton_method(
|
627
|
+
rb_define_singleton_method(rb_cGrnLogger, "unregister",
|
628
628
|
rb_grn_logger_s_unregister, 0);
|
629
|
-
rb_define_singleton_method(
|
629
|
+
rb_define_singleton_method(rb_cGrnLogger, "reopen",
|
630
630
|
rb_grn_logger_s_reopen, 0);
|
631
|
-
rb_define_singleton_method(
|
631
|
+
rb_define_singleton_method(rb_cGrnLogger, "max_level",
|
632
632
|
rb_grn_logger_s_get_max_level, 0);
|
633
|
-
rb_define_singleton_method(
|
633
|
+
rb_define_singleton_method(rb_cGrnLogger, "max_level=",
|
634
634
|
rb_grn_logger_s_set_max_level, 1);
|
635
|
-
rb_define_singleton_method(
|
635
|
+
rb_define_singleton_method(rb_cGrnLogger, "path",
|
636
636
|
rb_grn_logger_s_get_path, 0);
|
637
|
-
rb_define_singleton_method(
|
637
|
+
rb_define_singleton_method(rb_cGrnLogger, "path=",
|
638
638
|
rb_grn_logger_s_set_path, 1);
|
639
|
-
rb_define_singleton_method(
|
639
|
+
rb_define_singleton_method(rb_cGrnLogger, "rotate_threshold_size",
|
640
640
|
rb_grn_logger_s_get_rotate_threshold_size, 0);
|
641
|
-
rb_define_singleton_method(
|
641
|
+
rb_define_singleton_method(rb_cGrnLogger, "rotate_threshold_size=",
|
642
642
|
rb_grn_logger_s_set_rotate_threshold_size, 1);
|
643
|
-
rb_set_end_proc(rb_grn_logger_reset,
|
643
|
+
rb_set_end_proc(rb_grn_logger_reset, rb_cGrnLogger);
|
644
644
|
|
645
|
-
|
645
|
+
rb_mGrnLoggerFlags = rb_define_module_under(rb_cGrnLogger, "Flags");
|
646
646
|
#define DEFINE_FLAG(NAME) \
|
647
|
-
rb_define_const(
|
647
|
+
rb_define_const(rb_mGrnLoggerFlags, \
|
648
648
|
#NAME, INT2NUM(GRN_LOG_ ## NAME))
|
649
649
|
DEFINE_FLAG(TIME);
|
650
650
|
DEFINE_FLAG(TITLE);
|
@@ -652,6 +652,6 @@ rb_grn_init_logger (VALUE mGrn)
|
|
652
652
|
DEFINE_FLAG(LOCATION);
|
653
653
|
#undef DEFINE_FLAG
|
654
654
|
|
655
|
-
|
656
|
-
rb_define_class_under(mGrn, "CallbackLogger",
|
655
|
+
rb_cGrnCallbackLogger =
|
656
|
+
rb_define_class_under(mGrn, "CallbackLogger", rb_cGrnLogger);
|
657
657
|
}
|
data/ext/groonga/rb-grn-object.c
CHANGED
@@ -1461,23 +1461,45 @@ rb_grn_object_prepend_value (VALUE self, VALUE rb_id, VALUE rb_value)
|
|
1461
1461
|
}
|
1462
1462
|
|
1463
1463
|
/*
|
1464
|
-
*
|
1465
|
-
*
|
1464
|
+
* Free the `object`. If the `object` is persistent object, all files
|
1465
|
+
* related with the object are removed.
|
1466
1466
|
*
|
1467
|
-
* @overload remove
|
1467
|
+
* @overload remove(options={})
|
1468
|
+
*
|
1469
|
+
* @param [::Hash] options The optional parameters.
|
1470
|
+
*
|
1471
|
+
* @option options [Boolean] :dependent (false)
|
1472
|
+
* If it's `true`, all tables and columns that depend on the
|
1473
|
+
* `object`.
|
1468
1474
|
*/
|
1469
1475
|
static VALUE
|
1470
|
-
rb_grn_object_remove (VALUE self)
|
1476
|
+
rb_grn_object_remove (int argc, VALUE *argv, VALUE self)
|
1471
1477
|
{
|
1472
1478
|
RbGrnObject *rb_grn_object;
|
1473
1479
|
grn_ctx *context;
|
1480
|
+
VALUE rb_options;
|
1481
|
+
VALUE rb_dependent_p;
|
1482
|
+
grn_bool dependent_p = GRN_FALSE;
|
1474
1483
|
|
1475
1484
|
rb_grn_object = SELF(self);
|
1476
1485
|
if (!rb_grn_object->object)
|
1477
1486
|
return Qnil;
|
1478
1487
|
|
1488
|
+
rb_scan_args(argc, argv, "01", &rb_options);
|
1489
|
+
rb_grn_scan_options(rb_options,
|
1490
|
+
"dependent", &rb_dependent_p,
|
1491
|
+
NULL);
|
1492
|
+
|
1493
|
+
if (!NIL_P(rb_dependent_p)) {
|
1494
|
+
dependent_p = RVAL2CBOOL(rb_dependent_p);
|
1495
|
+
}
|
1496
|
+
|
1479
1497
|
context = rb_grn_object->context;
|
1480
|
-
|
1498
|
+
if (dependent_p) {
|
1499
|
+
grn_obj_remove_dependent(context, rb_grn_object->object);
|
1500
|
+
} else {
|
1501
|
+
grn_obj_remove(context, rb_grn_object->object);
|
1502
|
+
}
|
1481
1503
|
rb_grn_context_check(context, self);
|
1482
1504
|
|
1483
1505
|
rb_iv_set(self, "@context", Qnil);
|
@@ -1750,7 +1772,7 @@ rb_grn_init_object (VALUE mGrn)
|
|
1750
1772
|
rb_define_method(rb_cGrnObject, "append", rb_grn_object_append_value, 2);
|
1751
1773
|
rb_define_method(rb_cGrnObject, "prepend", rb_grn_object_prepend_value, 2);
|
1752
1774
|
|
1753
|
-
rb_define_method(rb_cGrnObject, "remove", rb_grn_object_remove,
|
1775
|
+
rb_define_method(rb_cGrnObject, "remove", rb_grn_object_remove, -1);
|
1754
1776
|
|
1755
1777
|
rb_define_method(rb_cGrnObject, "builtin?", rb_grn_object_builtin_p, 0);
|
1756
1778
|
rb_define_method(rb_cGrnObject, "table?", rb_grn_object_table_p, 0);
|
@@ -166,7 +166,7 @@ rb_grn_patricia_trie_s_create (int argc, VALUE *argv, VALUE klass)
|
|
166
166
|
grn_obj *key_type = NULL, *value_type = NULL, *table;
|
167
167
|
const char *name = NULL, *path = NULL;
|
168
168
|
unsigned name_size = 0;
|
169
|
-
|
169
|
+
grn_table_flags flags = GRN_OBJ_TABLE_PAT_KEY;
|
170
170
|
VALUE rb_table;
|
171
171
|
VALUE options, rb_context, rb_name, rb_path, rb_persistent;
|
172
172
|
VALUE rb_key_normalize, rb_key_with_sis, rb_key_type;
|
@@ -0,0 +1,164 @@
|
|
1
|
+
/* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2
|
+
/*
|
3
|
+
Copyright (C) 2016 Kouhei Sutou <kou@clear-code.com>
|
4
|
+
|
5
|
+
This library is free software; you can redistribute it and/or
|
6
|
+
modify it under the terms of the GNU Lesser General Public
|
7
|
+
License version 2.1 as published by the Free Software Foundation.
|
8
|
+
|
9
|
+
This library is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
Lesser General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU Lesser General Public
|
15
|
+
License along with this library; if not, write to the Free Software
|
16
|
+
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
17
|
+
*/
|
18
|
+
|
19
|
+
#include "rb-grn.h"
|
20
|
+
|
21
|
+
/*
|
22
|
+
* Document-module: Groonga::RequestCanceler
|
23
|
+
*
|
24
|
+
* This module provides API for canceling requests.
|
25
|
+
*/
|
26
|
+
|
27
|
+
VALUE rb_mGrnRequestCanceler;
|
28
|
+
|
29
|
+
/*
|
30
|
+
* Registers a request. The request can be canceled by
|
31
|
+
* {Groonga::RequestCanceler.cancel}.
|
32
|
+
*
|
33
|
+
* @example Register a request
|
34
|
+
* request_id = "request-29"
|
35
|
+
* Groonga::RequestCanceler.register(request_id)
|
36
|
+
*
|
37
|
+
* @overload register(request_id)
|
38
|
+
* @param request_id [String] The ID of request to be registered.
|
39
|
+
* @return [void]
|
40
|
+
*
|
41
|
+
* @since 6.0.2
|
42
|
+
*/
|
43
|
+
static VALUE
|
44
|
+
rb_grn_request_canceler_s_register (int argc, VALUE *argv, VALUE module)
|
45
|
+
{
|
46
|
+
VALUE rb_request_id;
|
47
|
+
VALUE rb_options;
|
48
|
+
VALUE rb_context;
|
49
|
+
const char *request_id;
|
50
|
+
unsigned int request_id_size;
|
51
|
+
grn_ctx *context;
|
52
|
+
|
53
|
+
rb_scan_args(argc, argv, "11", &rb_request_id, &rb_options);
|
54
|
+
rb_grn_scan_options(rb_options,
|
55
|
+
"context", &rb_context,
|
56
|
+
NULL);
|
57
|
+
context = rb_grn_context_ensure(&rb_context);
|
58
|
+
|
59
|
+
request_id = StringValuePtr(rb_request_id);
|
60
|
+
request_id_size = RSTRING_LEN(rb_request_id);
|
61
|
+
grn_request_canceler_register(context, request_id, request_id_size);
|
62
|
+
|
63
|
+
return Qnil;
|
64
|
+
}
|
65
|
+
|
66
|
+
/*
|
67
|
+
* Unregisters the specified request.
|
68
|
+
*
|
69
|
+
* @example Unregister a request by ID
|
70
|
+
* request_id = "request-29"
|
71
|
+
* Groonga::RequestCanceler.unregister(request_id)
|
72
|
+
*
|
73
|
+
* @overload unregister(request_id)
|
74
|
+
* @param request_id [String] The ID of request to be unregistered.
|
75
|
+
* @return [void]
|
76
|
+
*
|
77
|
+
* @since 6.0.2
|
78
|
+
*/
|
79
|
+
static VALUE
|
80
|
+
rb_grn_request_canceler_s_unregister (int argc, VALUE *argv, VALUE module)
|
81
|
+
{
|
82
|
+
VALUE rb_request_id;
|
83
|
+
VALUE rb_options;
|
84
|
+
VALUE rb_context;
|
85
|
+
const char *request_id;
|
86
|
+
unsigned int request_id_size;
|
87
|
+
grn_ctx *context;
|
88
|
+
|
89
|
+
rb_scan_args(argc, argv, "11", &rb_request_id, &rb_options);
|
90
|
+
rb_grn_scan_options(rb_options,
|
91
|
+
"context", &rb_context,
|
92
|
+
NULL);
|
93
|
+
context = rb_grn_context_ensure(&rb_context);
|
94
|
+
|
95
|
+
request_id = StringValuePtr(rb_request_id);
|
96
|
+
request_id_size = RSTRING_LEN(rb_request_id);
|
97
|
+
grn_request_canceler_unregister(context, request_id, request_id_size);
|
98
|
+
|
99
|
+
return Qnil;
|
100
|
+
}
|
101
|
+
|
102
|
+
/*
|
103
|
+
* Cancels the specified request.
|
104
|
+
*
|
105
|
+
* @example Cancels a request by ID
|
106
|
+
* request_id = "request-29"
|
107
|
+
* Groonga::RequestCanceler.cancel(request_id)
|
108
|
+
*
|
109
|
+
* @overload cancel(request_id)
|
110
|
+
* @param request_id [String] The ID of request to be canceled.
|
111
|
+
* @return [Boolean] `true` if the request is canceled, `false` otherwise.
|
112
|
+
*
|
113
|
+
* @since 6.0.2
|
114
|
+
*/
|
115
|
+
static VALUE
|
116
|
+
rb_grn_request_canceler_s_cancel (VALUE module, VALUE rb_request_id)
|
117
|
+
{
|
118
|
+
const char *request_id;
|
119
|
+
unsigned int request_id_size;
|
120
|
+
grn_bool canceled;
|
121
|
+
|
122
|
+
request_id = StringValuePtr(rb_request_id);
|
123
|
+
request_id_size = RSTRING_LEN(rb_request_id);
|
124
|
+
canceled = grn_request_canceler_cancel(request_id, request_id_size);
|
125
|
+
|
126
|
+
return CBOOL2RVAL(canceled);
|
127
|
+
}
|
128
|
+
|
129
|
+
/*
|
130
|
+
* Cancels all running requests.
|
131
|
+
*
|
132
|
+
* @example Cancels all requests
|
133
|
+
* Groonga::RequestCanceler.cancel_all
|
134
|
+
*
|
135
|
+
* @overload cancel_all
|
136
|
+
* @return [Boolean] `true` if one or more requests are canceled,
|
137
|
+
* `false` otherwise.
|
138
|
+
*
|
139
|
+
* @since 6.0.2
|
140
|
+
*/
|
141
|
+
static VALUE
|
142
|
+
rb_grn_request_canceler_s_cancel_all (VALUE module)
|
143
|
+
{
|
144
|
+
grn_bool canceled;
|
145
|
+
|
146
|
+
canceled = grn_request_canceler_cancel_all();
|
147
|
+
|
148
|
+
return CBOOL2RVAL(canceled);
|
149
|
+
}
|
150
|
+
|
151
|
+
void
|
152
|
+
rb_grn_init_request_canceler (VALUE mGrn)
|
153
|
+
{
|
154
|
+
rb_mGrnRequestCanceler = rb_define_module_under(mGrn, "RequestCanceler");
|
155
|
+
|
156
|
+
rb_define_singleton_method(rb_mGrnRequestCanceler, "register",
|
157
|
+
rb_grn_request_canceler_s_register, -1);
|
158
|
+
rb_define_singleton_method(rb_mGrnRequestCanceler, "unregister",
|
159
|
+
rb_grn_request_canceler_s_unregister, -1);
|
160
|
+
rb_define_singleton_method(rb_mGrnRequestCanceler, "cancel",
|
161
|
+
rb_grn_request_canceler_s_cancel, 1);
|
162
|
+
rb_define_singleton_method(rb_mGrnRequestCanceler, "cancel_all",
|
163
|
+
rb_grn_request_canceler_s_cancel_all, 0);
|
164
|
+
}
|