rroonga 5.0.0 → 5.0.1
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/.yardopts +1 -0
- data/Rakefile +1 -10
- data/ext/groonga/extconf.rb +3 -1
- data/ext/groonga/rb-grn-array.c +1 -1
- data/ext/groonga/rb-grn-column.c +33 -67
- data/ext/groonga/rb-grn-context.c +5 -5
- data/ext/groonga/rb-grn-database.c +2 -2
- data/ext/groonga/rb-grn-double-array-trie.c +4 -2
- data/ext/groonga/rb-grn-encoding-support.c +7 -1
- data/ext/groonga/rb-grn-equal-operator.c +85 -0
- data/ext/groonga/rb-grn-exception.c +17 -0
- data/ext/groonga/rb-grn-expression.c +85 -43
- data/ext/groonga/rb-grn-greater-equal-operator.c +88 -0
- data/ext/groonga/rb-grn-greater-operator.c +85 -0
- data/ext/groonga/rb-grn-hash.c +1 -1
- data/ext/groonga/rb-grn-index-column.c +150 -11
- data/ext/groonga/rb-grn-less-equal-operator.c +88 -0
- data/ext/groonga/rb-grn-less-operator.c +85 -0
- data/ext/groonga/rb-grn-logger.c +5 -5
- data/ext/groonga/rb-grn-match-operator.c +86 -0
- data/ext/groonga/rb-grn-normalizer.c +8 -1
- data/ext/groonga/rb-grn-not-equal-operator.c +85 -0
- data/ext/groonga/rb-grn-object.c +170 -36
- data/ext/groonga/rb-grn-operator.c +395 -172
- data/ext/groonga/rb-grn-patricia-trie.c +10 -8
- data/ext/groonga/rb-grn-plugin.c +51 -3
- data/ext/groonga/rb-grn-prefix-operator.c +86 -0
- data/ext/groonga/rb-grn-procedure-type.c +4 -0
- data/ext/groonga/rb-grn-query-logger.c +4 -4
- data/ext/groonga/rb-grn-regexp-operator.c +85 -0
- data/ext/groonga/rb-grn-snippet.c +1 -1
- data/ext/groonga/rb-grn-table-key-support.c +9 -5
- data/ext/groonga/rb-grn-table.c +52 -66
- data/ext/groonga/rb-grn-type.c +1 -1
- data/ext/groonga/rb-grn-utils.c +22 -3
- data/ext/groonga/rb-grn.h +31 -4
- data/ext/groonga/rb-groonga.c +9 -9
- data/lib/groonga/context.rb +31 -0
- data/lib/groonga/expression-builder.rb +14 -1
- data/lib/groonga/record.rb +10 -8
- data/lib/groonga/schema.rb +3 -1
- data/rroonga-build.rb +2 -2
- data/rroonga.gemspec +3 -3
- data/test/groonga-test-utils.rb +4 -0
- data/test/test-column.rb +28 -26
- data/test/test-exception.rb +1 -0
- data/test/test-expression-builder.rb +83 -1
- data/test/test-expression.rb +80 -48
- data/test/test-index-column.rb +102 -29
- data/test/test-normalizer.rb +35 -29
- data/test/test-operator.rb +214 -0
- data/test/test-plugin.rb +24 -6
- data/test/test-procedure.rb +29 -0
- data/test/test-schema-type.rb +14 -0
- data/test/test-table-select-mecab.rb +1 -4
- data/test/test-table.rb +7 -0
- data/test/test-token-regexp.rb +30 -0
- data/test/test-type.rb +24 -0
- metadata +61 -49
- data/doc/text/news.textile +0 -1217
@@ -232,7 +232,7 @@ rb_grn_patricia_trie_s_create (int argc, VALUE *argv, VALUE klass)
|
|
232
232
|
table = grn_table_create(context, name, name_size, path,
|
233
233
|
flags, key_type, value_type);
|
234
234
|
if (!table)
|
235
|
-
rb_grn_context_check(context,
|
235
|
+
rb_grn_context_check(context, rb_ary_new_from_values(argc, argv));
|
236
236
|
rb_table = GRNOBJECT2RVAL(klass, context, table, GRN_TRUE);
|
237
237
|
|
238
238
|
if (!NIL_P(rb_default_tokenizer))
|
@@ -306,6 +306,8 @@ rb_grn_patricia_trie_search (int argc, VALUE *argv, VALUE self)
|
|
306
306
|
grn_bool search_options_is_set = GRN_FALSE;
|
307
307
|
VALUE rb_key, options, rb_result, rb_operator, rb_type;
|
308
308
|
|
309
|
+
memset(&search_options, 0, sizeof(grn_search_optarg));
|
310
|
+
|
309
311
|
rb_grn_table_key_support_deconstruct(SELF(self), &table, &context,
|
310
312
|
&key, &domain_id, &domain,
|
311
313
|
NULL, NULL, NULL,
|
@@ -422,11 +424,11 @@ rb_grn_patricia_trie_scan (VALUE self, VALUE rb_string)
|
|
422
424
|
term = rb_grn_context_rb_string_new(context,
|
423
425
|
string + hits[i].offset,
|
424
426
|
hits[i].length);
|
425
|
-
matched_info =
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
427
|
+
matched_info = rb_ary_new_from_args(4,
|
428
|
+
record,
|
429
|
+
term,
|
430
|
+
UINT2NUM(hits[i].offset),
|
431
|
+
UINT2NUM(hits[i].length));
|
430
432
|
if (block_given) {
|
431
433
|
rb_yield(matched_info);
|
432
434
|
} else {
|
@@ -532,7 +534,7 @@ rb_grn_patricia_trie_open_grn_prefix_cursor (int argc, VALUE *argv, VALUE self,
|
|
532
534
|
if (!NIL_P(rb_key_bytes) && !NIL_P(rb_key_bits)) {
|
533
535
|
rb_raise(rb_eArgError,
|
534
536
|
"should not specify both :key_bytes and :key_bits once: %s",
|
535
|
-
rb_grn_inspect(
|
537
|
+
rb_grn_inspect(rb_ary_new_from_values(argc, argv)));
|
536
538
|
} else if (!NIL_P(rb_key_bytes)) {
|
537
539
|
prefix_size = NUM2UINT(rb_key_bytes);
|
538
540
|
} else if (!NIL_P(rb_key_bits)) {
|
@@ -682,7 +684,7 @@ rb_grn_patricia_trie_open_grn_rk_cursor (int argc, VALUE *argv, VALUE self,
|
|
682
684
|
if (!NIL_P(rb_key_bytes) && !NIL_P(rb_key_bits)) {
|
683
685
|
rb_raise(rb_eArgError,
|
684
686
|
"should not specify both :key_bytes and :key_bits once: %s",
|
685
|
-
rb_grn_inspect(
|
687
|
+
rb_grn_inspect(rb_ary_new_from_values(argc, argv)));
|
686
688
|
} else if (!NIL_P(rb_key_bytes)) {
|
687
689
|
prefix_size = NUM2UINT(rb_key_bytes);
|
688
690
|
} else if (!NIL_P(rb_key_bits)) {
|
data/ext/groonga/rb-grn-plugin.c
CHANGED
@@ -117,7 +117,53 @@ rb_grn_plugin_s_register (int argc, VALUE *argv, VALUE klass)
|
|
117
117
|
grn_plugin_register_by_path(context, path);
|
118
118
|
}
|
119
119
|
|
120
|
-
rb_grn_context_check(context,
|
120
|
+
rb_grn_context_check(context, rb_ary_new_from_values(argc, argv));
|
121
|
+
return Qnil;
|
122
|
+
}
|
123
|
+
|
124
|
+
/*
|
125
|
+
* Unregister a registered plugin.
|
126
|
+
*
|
127
|
+
* Unregister `name` plugin by name if `name` plugin is installed to
|
128
|
+
* plugin directory. You can also specify the path of `name` plugin
|
129
|
+
* explicitly.
|
130
|
+
*
|
131
|
+
* @example Unregister a registerd plugin by name.
|
132
|
+
* Groonga::Plugin.register("token_filters/stop_word")
|
133
|
+
* Groonga::Plugin.unregister("token_filters/stop_word")
|
134
|
+
* @example unregister a registerd plugin by path
|
135
|
+
* Groonga::Plugin.register("token_filters/stop_word")
|
136
|
+
* Groonga::Plugin.unregister("/usr/local/lib/groonga/plugins/token_filters/stop_word.so")
|
137
|
+
* @overload unregister(name, options={})
|
138
|
+
* Unregister specified `name` plugin.
|
139
|
+
* You can specify the path of plugin explicitly.
|
140
|
+
* @param [String] name The name of plugin.
|
141
|
+
* @param options [::Hash] The name and value pairs.
|
142
|
+
* @option options :context (Groonga::Context.default)
|
143
|
+
* The context which is bound to database.
|
144
|
+
*/
|
145
|
+
static VALUE
|
146
|
+
rb_grn_plugin_s_unregister (int argc, VALUE *argv, VALUE klass)
|
147
|
+
{
|
148
|
+
const char *name = NULL;
|
149
|
+
VALUE rb_options, rb_name = Qnil, rb_context;
|
150
|
+
grn_ctx *context;
|
151
|
+
|
152
|
+
rb_scan_args(argc, argv, "11", &rb_name, &rb_options);
|
153
|
+
rb_grn_scan_options(rb_options,
|
154
|
+
"context", &rb_context,
|
155
|
+
NULL);
|
156
|
+
rb_name = rb_grn_convert_to_string(rb_name);
|
157
|
+
name = StringValueCStr(rb_name);
|
158
|
+
|
159
|
+
if (NIL_P(rb_context)) {
|
160
|
+
rb_context = rb_grn_context_get_default();
|
161
|
+
}
|
162
|
+
context = RVAL2GRNCONTEXT(rb_context);
|
163
|
+
|
164
|
+
grn_plugin_unregister(context, name);
|
165
|
+
|
166
|
+
rb_grn_context_check(context, rb_ary_new_from_values(argc, argv));
|
121
167
|
return Qnil;
|
122
168
|
}
|
123
169
|
|
@@ -130,7 +176,7 @@ rb_grn_plugin_s_register (int argc, VALUE *argv, VALUE klass)
|
|
130
176
|
static VALUE
|
131
177
|
rb_grn_plugin_s_system_plugins_dir (VALUE klass)
|
132
178
|
{
|
133
|
-
return
|
179
|
+
return rb_str_new_cstr(grn_plugin_get_system_plugins_dir());
|
134
180
|
}
|
135
181
|
|
136
182
|
/*
|
@@ -142,7 +188,7 @@ rb_grn_plugin_s_system_plugins_dir (VALUE klass)
|
|
142
188
|
static VALUE
|
143
189
|
rb_grn_plugin_s_suffix (VALUE klass)
|
144
190
|
{
|
145
|
-
return
|
191
|
+
return rb_str_new_cstr(grn_plugin_get_suffix());
|
146
192
|
}
|
147
193
|
|
148
194
|
void
|
@@ -153,6 +199,8 @@ rb_grn_init_plugin (VALUE mGrn)
|
|
153
199
|
|
154
200
|
rb_define_singleton_method(cGrnPlugin, "register",
|
155
201
|
rb_grn_plugin_s_register, -1);
|
202
|
+
rb_define_singleton_method(cGrnPlugin, "unregister",
|
203
|
+
rb_grn_plugin_s_unregister, -1);
|
156
204
|
rb_define_singleton_method(cGrnPlugin, "system_plugins_dir",
|
157
205
|
rb_grn_plugin_s_system_plugins_dir, 0);
|
158
206
|
rb_define_singleton_method(cGrnPlugin, "suffix",
|
@@ -0,0 +1,86 @@
|
|
1
|
+
/* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2
|
+
/*
|
3
|
+
Copyright (C) 2015 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
|
+
VALUE rb_cGrnPrefixOperator;
|
22
|
+
|
23
|
+
/*
|
24
|
+
* Executes a prefix-search operation. Prefix-serach operation checks
|
25
|
+
* whether `text` starts with `prefix` or not.
|
26
|
+
*
|
27
|
+
* @example Executes prefix-search operations with the default context
|
28
|
+
* Groonga::Operator::PREFIX.exec("Hello Rroonga", "Hello") # => true
|
29
|
+
* Groonga::Operator::PREFIX.exec("Hello Rroonga", "Rroonga") # => false
|
30
|
+
*
|
31
|
+
* @example Executes prefix-search operations with the specified context
|
32
|
+
* context = Groonga::Context.new
|
33
|
+
* Groonga::Operator::PREFIX.exec("Hello Rroonga", "Hello",
|
34
|
+
* :context => context) # => true
|
35
|
+
* Groonga::Operator::PREFIX.exec("Hello Rroonga", "Rroonga",
|
36
|
+
* :context => context) # => false
|
37
|
+
*
|
38
|
+
* @overload exec(text, prefix, options={})
|
39
|
+
* @param text [String] The text to be searched.
|
40
|
+
* @param prefix [String] The prefix to be contained.
|
41
|
+
* @param options [::Hash] The options.
|
42
|
+
* @option options [Groonga::Context] (Groonga::Context.default)
|
43
|
+
* The context to executes the operation.
|
44
|
+
* @return [Boolean] `true` if `text` starts with `prefix`, `false`
|
45
|
+
* otherwise.
|
46
|
+
*/
|
47
|
+
static VALUE
|
48
|
+
rb_grn_prefix_operator_exec (int argc, VALUE *argv, VALUE self)
|
49
|
+
{
|
50
|
+
grn_bool have_prefix;
|
51
|
+
VALUE rb_text;
|
52
|
+
VALUE rb_prefix;
|
53
|
+
VALUE rb_options;
|
54
|
+
VALUE rb_context;
|
55
|
+
grn_ctx *context;
|
56
|
+
grn_obj text;
|
57
|
+
grn_obj prefix;
|
58
|
+
|
59
|
+
rb_scan_args(argc, argv, "21", &rb_text, &rb_prefix, &rb_options);
|
60
|
+
|
61
|
+
rb_grn_scan_options(rb_options,
|
62
|
+
"context", &rb_context,
|
63
|
+
NULL);
|
64
|
+
context = rb_grn_context_ensure(&rb_context);
|
65
|
+
|
66
|
+
GRN_VOID_INIT(&text);
|
67
|
+
GRN_VOID_INIT(&prefix);
|
68
|
+
RVAL2GRNBULK(rb_text, context, &text);
|
69
|
+
RVAL2GRNBULK(rb_prefix, context, &prefix);
|
70
|
+
have_prefix = grn_operator_exec_prefix(context, &text, &prefix);
|
71
|
+
GRN_OBJ_FIN(context, &text);
|
72
|
+
GRN_OBJ_FIN(context, &prefix);
|
73
|
+
|
74
|
+
return CBOOL2RVAL(have_prefix);
|
75
|
+
}
|
76
|
+
|
77
|
+
void
|
78
|
+
rb_grn_init_prefix_operator (VALUE mGrn)
|
79
|
+
{
|
80
|
+
rb_cGrnPrefixOperator = rb_define_class_under(mGrn,
|
81
|
+
"PrefixOperator",
|
82
|
+
rb_cGrnOperator);
|
83
|
+
|
84
|
+
rb_define_method(rb_cGrnPrefixOperator, "exec",
|
85
|
+
rb_grn_prefix_operator_exec, -1);
|
86
|
+
}
|
@@ -37,4 +37,8 @@ rb_grn_init_procedure_type (VALUE mGrn)
|
|
37
37
|
"HOOK", INT2NUM(GRN_PROC_HOOK));
|
38
38
|
rb_define_const(rb_mGrnProcedureType,
|
39
39
|
"NORMALIZER", INT2NUM(GRN_PROC_NORMALIZER));
|
40
|
+
rb_define_const(rb_mGrnProcedureType,
|
41
|
+
"TOKEN_FILTER", INT2NUM(GRN_PROC_TOKEN_FILTER));
|
42
|
+
rb_define_const(rb_mGrnProcedureType,
|
43
|
+
"SCORER", INT2NUM(GRN_PROC_SCORER));
|
40
44
|
}
|
@@ -58,9 +58,9 @@ rb_grn_query_logger_log (grn_ctx *ctx, unsigned int flag,
|
|
58
58
|
/* TODO: use rb_protect(). */
|
59
59
|
rb_funcall(handler, id_log, 4,
|
60
60
|
GRNQUERYLOGFLAGS2RVAL(flag),
|
61
|
-
|
62
|
-
|
63
|
-
|
61
|
+
rb_str_new_cstr(timestamp),
|
62
|
+
rb_str_new_cstr(info),
|
63
|
+
rb_str_new_cstr(message));
|
64
64
|
}
|
65
65
|
|
66
66
|
static void
|
@@ -234,7 +234,7 @@ rb_grn_query_logger_s_get_path (VALUE klass)
|
|
234
234
|
|
235
235
|
path = grn_default_query_logger_get_path();
|
236
236
|
if (path) {
|
237
|
-
rb_path =
|
237
|
+
rb_path = rb_str_new_cstr(path);
|
238
238
|
}
|
239
239
|
return rb_path;
|
240
240
|
}
|
@@ -0,0 +1,85 @@
|
|
1
|
+
/* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2
|
+
/*
|
3
|
+
Copyright (C) 2015 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
|
+
VALUE rb_cGrnRegexpOperator;
|
22
|
+
|
23
|
+
/*
|
24
|
+
* Executes a regular expression match operation.
|
25
|
+
*
|
26
|
+
* @example Executes regular expression match operations with the default context
|
27
|
+
* Groonga::Operator::REGEXP.exec("Hello Rroonga", /Rro+nga/) # => true
|
28
|
+
* Groonga::Operator::REGEXP.exec("Hello Rroonga", /Gro+nga/) # => false
|
29
|
+
*
|
30
|
+
* @example Executes regular expression match operations with the specified context
|
31
|
+
* context = Groonga::Context.new
|
32
|
+
* Groonga::Operator::REGEXP.exec("Hello Rroonga", /Rro+nga/,
|
33
|
+
* :context => context) # => true
|
34
|
+
* Groonga::Operator::REGEXP.exec("Hello Rroonga", /Gro+nga/,
|
35
|
+
* :context => context) # => false
|
36
|
+
*
|
37
|
+
* @overload exec(text, regexp, options={})
|
38
|
+
* @param text [String] The text to be matched.
|
39
|
+
* @param regexp [Regexp] The regular expression.
|
40
|
+
* @param options [::Hash] The options.
|
41
|
+
* @option options [Groonga::Context] (Groonga::Context.default)
|
42
|
+
* The context to executes the operation.
|
43
|
+
* @return [Boolean] `true` if `text` matches `regexp`, `false`
|
44
|
+
* otherwise.
|
45
|
+
*/
|
46
|
+
static VALUE
|
47
|
+
rb_grn_regexp_operator_exec (int argc, VALUE *argv, VALUE self)
|
48
|
+
{
|
49
|
+
grn_bool matched;
|
50
|
+
VALUE rb_text;
|
51
|
+
VALUE rb_regexp;
|
52
|
+
VALUE rb_options;
|
53
|
+
VALUE rb_context;
|
54
|
+
grn_ctx *context;
|
55
|
+
grn_obj text;
|
56
|
+
grn_obj regexp;
|
57
|
+
|
58
|
+
rb_scan_args(argc, argv, "21", &rb_text, &rb_regexp, &rb_options);
|
59
|
+
|
60
|
+
rb_grn_scan_options(rb_options,
|
61
|
+
"context", &rb_context,
|
62
|
+
NULL);
|
63
|
+
context = rb_grn_context_ensure(&rb_context);
|
64
|
+
|
65
|
+
GRN_VOID_INIT(&text);
|
66
|
+
GRN_VOID_INIT(®exp);
|
67
|
+
RVAL2GRNBULK(rb_text, context, &text);
|
68
|
+
RVAL2GRNBULK(rb_regexp, context, ®exp);
|
69
|
+
matched = grn_operator_exec_regexp(context, &text, ®exp);
|
70
|
+
GRN_OBJ_FIN(context, &text);
|
71
|
+
GRN_OBJ_FIN(context, ®exp);
|
72
|
+
|
73
|
+
return CBOOL2RVAL(matched);
|
74
|
+
}
|
75
|
+
|
76
|
+
void
|
77
|
+
rb_grn_init_regexp_operator (VALUE mGrn)
|
78
|
+
{
|
79
|
+
rb_cGrnRegexpOperator = rb_define_class_under(mGrn,
|
80
|
+
"RegexpOperator",
|
81
|
+
rb_cGrnOperator);
|
82
|
+
|
83
|
+
rb_define_method(rb_cGrnRegexpOperator, "exec",
|
84
|
+
rb_grn_regexp_operator_exec, -1);
|
85
|
+
}
|
@@ -146,7 +146,7 @@ rb_grn_snippet_initialize (int argc, VALUE *argv, VALUE self)
|
|
146
146
|
default_open_tag, default_open_tag_length,
|
147
147
|
default_close_tag, default_close_tag_length,
|
148
148
|
mapping);
|
149
|
-
rb_grn_context_check(context,
|
149
|
+
rb_grn_context_check(context, rb_ary_new_from_values(argc, argv));
|
150
150
|
|
151
151
|
rb_grn_object_assign(Qnil, self, rb_context, context, snippet);
|
152
152
|
rb_grn_context_register_floating_object(DATA_PTR(self));
|
@@ -196,7 +196,7 @@ rb_grn_table_key_support_inspect (VALUE self)
|
|
196
196
|
{
|
197
197
|
VALUE inspected;
|
198
198
|
|
199
|
-
inspected =
|
199
|
+
inspected = rb_str_new_cstr("");
|
200
200
|
rb_grn_object_inspect_header(self, inspected);
|
201
201
|
rb_grn_object_inspect_content(self, inspected);
|
202
202
|
rb_grn_table_inspect_content(self, inspected);
|
@@ -525,7 +525,9 @@ rb_grn_table_key_support_array_set (VALUE self, VALUE rb_key, VALUE rb_values)
|
|
525
525
|
if (id == GRN_ID_NIL) {
|
526
526
|
rb_raise(rb_eGrnError,
|
527
527
|
"failed to add record: %s",
|
528
|
-
rb_grn_inspect(
|
528
|
+
rb_grn_inspect(rb_ary_new_from_args(3,
|
529
|
+
self,
|
530
|
+
rb_key, rb_values)));
|
529
531
|
}
|
530
532
|
|
531
533
|
data.self = self;
|
@@ -568,9 +570,11 @@ rb_grn_table_key_support_set_column_value (int argc, VALUE *argv, VALUE self)
|
|
568
570
|
if (id == GRN_ID_NIL) {
|
569
571
|
rb_raise(rb_eGrnError,
|
570
572
|
"failed to add record: %s",
|
571
|
-
rb_grn_inspect(
|
572
|
-
|
573
|
-
|
573
|
+
rb_grn_inspect(rb_ary_new_from_args(4,
|
574
|
+
self,
|
575
|
+
rb_key,
|
576
|
+
rb_name,
|
577
|
+
rb_value)));
|
574
578
|
}
|
575
579
|
|
576
580
|
return rb_grn_table_set_column_value_raw(self, id, rb_name, rb_value);
|
data/ext/groonga/rb-grn-table.c
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2
2
|
/*
|
3
3
|
Copyright (C) 2014-2015 Masafumi Yokoyama <yokoyama@clear-code.com>
|
4
|
-
Copyright (C) 2009-
|
4
|
+
Copyright (C) 2009-2015 Kouhei Sutou <kou@clear-code.com>
|
5
5
|
|
6
6
|
This library is free software; you can redistribute it and/or
|
7
7
|
modify it under the terms of the GNU Lesser General Public
|
@@ -199,7 +199,7 @@ rb_grn_table_inspect (VALUE self)
|
|
199
199
|
{
|
200
200
|
VALUE inspected;
|
201
201
|
|
202
|
-
inspected =
|
202
|
+
inspected = rb_str_new_cstr("");
|
203
203
|
rb_grn_object_inspect_header(self, inspected);
|
204
204
|
rb_grn_object_inspect_content(self, inspected);
|
205
205
|
rb_grn_table_inspect_content(self, inspected);
|
@@ -238,7 +238,7 @@ rb_grn_table_inspect (VALUE self)
|
|
238
238
|
* - +:zlib+ := 値をzlib圧縮して格納する。
|
239
239
|
* - +:lz4+ := 値をLZ4圧縮して格納する。
|
240
240
|
*
|
241
|
-
* @return [Groonga::FixSizeColumn
|
241
|
+
* @return [Groonga::FixSizeColumn, Groonga::VariableSizeColumn]
|
242
242
|
*/
|
243
243
|
static VALUE
|
244
244
|
rb_grn_table_define_column (int argc, VALUE *argv, VALUE self)
|
@@ -328,8 +328,12 @@ rb_grn_table_define_column (int argc, VALUE *argv, VALUE self)
|
|
328
328
|
column = grn_column_create(context, table, name, name_size,
|
329
329
|
path, flags, value_type);
|
330
330
|
if (context->rc) {
|
331
|
-
|
332
|
-
|
331
|
+
VALUE rb_related_object;
|
332
|
+
rb_related_object =
|
333
|
+
rb_ary_new_from_args(2,
|
334
|
+
self,
|
335
|
+
rb_ary_new_from_values(argc, argv));
|
336
|
+
rb_grn_context_check(context, rb_related_object);
|
333
337
|
}
|
334
338
|
|
335
339
|
rb_column = GRNCOLUMN2RVAL(Qnil, context, column, GRN_TRUE);
|
@@ -451,8 +455,10 @@ rb_grn_table_define_index_column (int argc, VALUE *argv, VALUE self)
|
|
451
455
|
column = grn_column_create(context, table, name, name_size,
|
452
456
|
path, flags, value_type);
|
453
457
|
if (context->rc) {
|
454
|
-
|
455
|
-
|
458
|
+
VALUE rb_related_object;
|
459
|
+
rb_related_object =
|
460
|
+
rb_ary_new_from_args(2, self, rb_ary_new_from_values(argc, argv));
|
461
|
+
rb_grn_context_check(context, rb_related_object);
|
456
462
|
}
|
457
463
|
|
458
464
|
rb_column = GRNCOLUMN2RVAL(Qnil, context, column, GRN_TRUE);
|
@@ -494,7 +500,7 @@ ruby_object_to_column_name (VALUE rb_name,
|
|
494
500
|
* い場合は +nil+ を返す。
|
495
501
|
*
|
496
502
|
* @overload column(name)
|
497
|
-
* @return [Groonga::Column
|
503
|
+
* @return [Groonga::Column, nil]
|
498
504
|
*/
|
499
505
|
VALUE
|
500
506
|
rb_grn_table_get_column (VALUE self, VALUE rb_name)
|
@@ -1338,7 +1344,7 @@ rb_grn_table_sort (int argc, VALUE *argv, VALUE self)
|
|
1338
1344
|
* @option options :max_n_sub_records
|
1339
1345
|
* グループ化した後のレコードのそれぞれについて最大 _:max_n_sub_records_ 件まで
|
1340
1346
|
* そのグループに含まれる _table_ のレコードをサブレコードとして格納する。
|
1341
|
-
* @option options [String
|
1347
|
+
* @option options [String, Symbol] :calc_target
|
1342
1348
|
* The target column name for _:calc_types_.
|
1343
1349
|
* @option options [::Array] :calc_types
|
1344
1350
|
* It specifies how to calculate (aggregate) values in grouped records by
|
@@ -1584,10 +1590,14 @@ rb_grn_table_get_value_convenience (int argc, VALUE *argv, VALUE self)
|
|
1584
1590
|
"id", &rb_option_id,
|
1585
1591
|
NULL);
|
1586
1592
|
if (!(NIL_P(rb_option_id) || RVAL2CBOOL(rb_option_id))) {
|
1593
|
+
VALUE rb_related_object;
|
1594
|
+
rb_related_object =
|
1595
|
+
rb_ary_new_from_args(2,
|
1596
|
+
self,
|
1597
|
+
rb_ary_new_from_values(argc, argv));
|
1587
1598
|
rb_raise(rb_eArgError, ":id options must be true or nil: %s: %s",
|
1588
1599
|
rb_grn_inspect(rb_option_id),
|
1589
|
-
rb_grn_inspect(
|
1590
|
-
self, rb_ary_new4(argc, argv))));
|
1600
|
+
rb_grn_inspect(rb_related_object));
|
1591
1601
|
}
|
1592
1602
|
}
|
1593
1603
|
|
@@ -1642,10 +1652,14 @@ rb_grn_table_set_value_convenience (int argc, VALUE *argv, VALUE self)
|
|
1642
1652
|
"id", &rb_option_id,
|
1643
1653
|
NULL);
|
1644
1654
|
if (!(NIL_P(rb_option_id) || RVAL2CBOOL(rb_option_id))) {
|
1655
|
+
VALUE rb_related_object;
|
1656
|
+
rb_related_object =
|
1657
|
+
rb_ary_new_from_args(2,
|
1658
|
+
self,
|
1659
|
+
rb_ary_new_from_values(argc, argv));
|
1645
1660
|
rb_raise(rb_eArgError, ":id options must be true or nil: %s: %s",
|
1646
1661
|
rb_grn_inspect(rb_option_id),
|
1647
|
-
rb_grn_inspect(
|
1648
|
-
self, rb_ary_new4(argc, argv))));
|
1662
|
+
rb_grn_inspect(rb_related_object));
|
1649
1663
|
}
|
1650
1664
|
}
|
1651
1665
|
|
@@ -1693,11 +1707,14 @@ rb_grn_table_get_column_value_convenience (int argc, VALUE *argv, VALUE self)
|
|
1693
1707
|
"id", &rb_option_id,
|
1694
1708
|
NULL);
|
1695
1709
|
if (!(NIL_P(rb_option_id) || RVAL2CBOOL(rb_option_id))) {
|
1710
|
+
VALUE rb_related_object;
|
1711
|
+
rb_related_object =
|
1712
|
+
rb_ary_new_from_args(2,
|
1713
|
+
self,
|
1714
|
+
rb_ary_new_from_values(argc, argv));
|
1696
1715
|
rb_raise(rb_eArgError, ":id options must be true or nil: %s: %s",
|
1697
1716
|
rb_grn_inspect(rb_option_id),
|
1698
|
-
rb_grn_inspect(
|
1699
|
-
self,
|
1700
|
-
rb_ary_new4(argc, argv))));
|
1717
|
+
rb_grn_inspect(rb_related_object));
|
1701
1718
|
}
|
1702
1719
|
}
|
1703
1720
|
|
@@ -1733,7 +1750,7 @@ rb_grn_table_set_column_value (VALUE self, VALUE rb_id,
|
|
1733
1750
|
* @overload set_column_value(id, name, value)
|
1734
1751
|
* @!macro [new] table.set_column_value.base_arguments
|
1735
1752
|
* @param id [Integer] The ID of the target record.
|
1736
|
-
* @param name [String
|
1753
|
+
* @param name [String, Symbol] The name of the target column.
|
1737
1754
|
* @!macro [new] table.set_column_value.value
|
1738
1755
|
* @param value [::Object] The new value.
|
1739
1756
|
*
|
@@ -1894,11 +1911,14 @@ rb_grn_table_set_column_value_convenience (int argc, VALUE *argv, VALUE self)
|
|
1894
1911
|
"id", &rb_option_id,
|
1895
1912
|
NULL);
|
1896
1913
|
if (!(NIL_P(rb_option_id) || RVAL2CBOOL(rb_option_id))) {
|
1914
|
+
VALUE rb_related_object;
|
1915
|
+
rb_related_object =
|
1916
|
+
rb_ary_new_from_args(2,
|
1917
|
+
self,
|
1918
|
+
rb_ary_new_from_values(argc, argv));
|
1897
1919
|
rb_raise(rb_eArgError, ":id options must be true or nil: %s: %s",
|
1898
1920
|
rb_grn_inspect(rb_option_id),
|
1899
|
-
rb_grn_inspect(
|
1900
|
-
self,
|
1901
|
-
rb_ary_new4(argc, argv))));
|
1921
|
+
rb_grn_inspect(rb_related_object));
|
1902
1922
|
}
|
1903
1923
|
}
|
1904
1924
|
|
@@ -2019,78 +2039,44 @@ rb_grn_table_lock (int argc, VALUE *argv, VALUE self)
|
|
2019
2039
|
}
|
2020
2040
|
|
2021
2041
|
/*
|
2022
|
-
*
|
2042
|
+
* Forces to clear lock of the `table`.
|
2023
2043
|
*
|
2024
|
-
* @overload clear_lock
|
2025
|
-
* @
|
2026
|
-
* pairs. Omitted names are initialized as the default value.
|
2027
|
-
* @option options :id
|
2028
|
-
* _:id_ で指定したレコードのロックを強制的に解除する。
|
2029
|
-
* (注: groonga側が未実装のため、現在は無視される。実装さ
|
2030
|
-
* れるのではないかと思っているが、実装されないかもしれな
|
2031
|
-
* い。)
|
2044
|
+
* @overload clear_lock
|
2045
|
+
* @return [void]
|
2032
2046
|
*/
|
2033
2047
|
static VALUE
|
2034
|
-
rb_grn_table_clear_lock (
|
2048
|
+
rb_grn_table_clear_lock (VALUE self)
|
2035
2049
|
{
|
2036
|
-
grn_id id = GRN_ID_NIL;
|
2037
2050
|
grn_ctx *context;
|
2038
2051
|
grn_obj *table;
|
2039
|
-
VALUE options, rb_id;
|
2040
|
-
|
2041
|
-
rb_scan_args(argc, argv, "01", &options);
|
2042
2052
|
|
2043
2053
|
rb_grn_table_deconstruct(SELF(self), &table, &context,
|
2044
2054
|
NULL, NULL,
|
2045
2055
|
NULL, NULL, NULL,
|
2046
2056
|
NULL);
|
2047
2057
|
|
2048
|
-
rb_grn_scan_options(options,
|
2049
|
-
"id", &rb_id,
|
2050
|
-
NULL);
|
2051
|
-
|
2052
|
-
if (!NIL_P(rb_id))
|
2053
|
-
id = NUM2UINT(rb_id);
|
2054
|
-
|
2055
2058
|
grn_obj_clear_lock(context, table);
|
2056
2059
|
|
2057
2060
|
return Qnil;
|
2058
2061
|
}
|
2059
2062
|
|
2060
2063
|
/*
|
2061
|
-
*
|
2064
|
+
* Checks whether the `table` is locked or not.
|
2062
2065
|
*
|
2063
|
-
* @overload locked?
|
2064
|
-
* @
|
2065
|
-
* pairs. Omitted names are initialized as the default value.
|
2066
|
-
* @option options :id
|
2067
|
-
* _:id_ で指定したレコードがロックされていれば +true+ を返す。
|
2068
|
-
* (注: groonga側が未実装のため、現在は無視される。実装さ
|
2069
|
-
* れるのではないかと思っているが、実装されないかもしれな
|
2070
|
-
* い。)
|
2066
|
+
* @overload locked?
|
2067
|
+
* @return [Boolean] `true` if the `table` is locked, `false` otherwise.
|
2071
2068
|
*/
|
2072
2069
|
static VALUE
|
2073
|
-
|
2070
|
+
rb_grn_table_locked_p (VALUE self)
|
2074
2071
|
{
|
2075
|
-
grn_id id = GRN_ID_NIL;
|
2076
2072
|
grn_ctx *context;
|
2077
2073
|
grn_obj *table;
|
2078
|
-
VALUE options, rb_id;
|
2079
|
-
|
2080
|
-
rb_scan_args(argc, argv, "01", &options);
|
2081
2074
|
|
2082
2075
|
rb_grn_table_deconstruct(SELF(self), &table, &context,
|
2083
2076
|
NULL, NULL,
|
2084
2077
|
NULL, NULL, NULL,
|
2085
2078
|
NULL);
|
2086
2079
|
|
2087
|
-
rb_grn_scan_options(options,
|
2088
|
-
"id", &rb_id,
|
2089
|
-
NULL);
|
2090
|
-
|
2091
|
-
if (!NIL_P(rb_id))
|
2092
|
-
id = NUM2UINT(rb_id);
|
2093
|
-
|
2094
2080
|
return CBOOL2RVAL(grn_obj_is_locked(context, table));
|
2095
2081
|
}
|
2096
2082
|
|
@@ -2257,7 +2243,7 @@ rb_grn_table_select (int argc, VALUE *argv, VALUE self)
|
|
2257
2243
|
"should be [query_string, option_hash], "
|
2258
2244
|
"[expression, option_hash] "
|
2259
2245
|
"or [option_hash]: %s",
|
2260
|
-
rb_grn_inspect(
|
2246
|
+
rb_grn_inspect(rb_ary_new_from_values(argc, argv)));
|
2261
2247
|
options = condition_or_options;
|
2262
2248
|
}
|
2263
2249
|
|
@@ -2285,7 +2271,7 @@ rb_grn_table_select (int argc, VALUE *argv, VALUE self)
|
|
2285
2271
|
if (!result) {
|
2286
2272
|
rb_raise(rb_eGrnNoMemoryAvailable,
|
2287
2273
|
"failed to create result table: %s",
|
2288
|
-
rb_grn_inspect(
|
2274
|
+
rb_grn_inspect(rb_ary_new_from_values(argc, argv)));
|
2289
2275
|
}
|
2290
2276
|
rb_result = GRNTABLE2RVAL(context, result, GRN_TRUE);
|
2291
2277
|
} else {
|
@@ -2631,8 +2617,8 @@ rb_grn_init_table (VALUE mGrn)
|
|
2631
2617
|
|
2632
2618
|
rb_define_method(rb_cGrnTable, "lock", rb_grn_table_lock, -1);
|
2633
2619
|
rb_define_method(rb_cGrnTable, "unlock", rb_grn_table_unlock, -1);
|
2634
|
-
rb_define_method(rb_cGrnTable, "clear_lock", rb_grn_table_clear_lock,
|
2635
|
-
rb_define_method(rb_cGrnTable, "locked?",
|
2620
|
+
rb_define_method(rb_cGrnTable, "clear_lock", rb_grn_table_clear_lock, 0);
|
2621
|
+
rb_define_method(rb_cGrnTable, "locked?", rb_grn_table_locked_p, 0);
|
2636
2622
|
|
2637
2623
|
rb_define_method(rb_cGrnTable, "select", rb_grn_table_select, -1);
|
2638
2624
|
|