rroonga 4.0.5 → 4.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.yardopts +1 -1
- data/benchmark/common.rb +4 -4
- data/benchmark/create-wikipedia-database.rb +5 -5
- data/benchmark/read-write-many-small-items.rb +8 -8
- data/benchmark/repeat-load.rb +4 -4
- data/benchmark/select.rb +9 -9
- data/benchmark/write-many-small-items.rb +8 -8
- data/doc/images/sample-schema.png +0 -0
- data/doc/text/install.textile +2 -2
- data/doc/text/news.textile +41 -0
- data/doc/text/tutorial.textile +4 -4
- data/example/bookmark.rb +6 -7
- data/example/index-html.rb +6 -6
- data/ext/groonga/extconf.rb +23 -1
- data/ext/groonga/rb-grn-column.c +3 -2
- data/ext/groonga/rb-grn-context.c +20 -3
- data/ext/groonga/rb-grn-double-array-trie.c +11 -2
- data/ext/groonga/rb-grn-exception.c +28 -10
- data/ext/groonga/rb-grn-expression.c +78 -0
- data/ext/groonga/rb-grn-hash.c +10 -0
- data/ext/groonga/rb-grn-logger.c +7 -3
- data/ext/groonga/rb-grn-object.c +3 -2
- data/ext/groonga/rb-grn-patricia-trie.c +23 -20
- data/ext/groonga/rb-grn-table-key-support.c +92 -1
- data/ext/groonga/rb-grn-table.c +60 -17
- data/ext/groonga/rb-grn-utils.c +51 -2
- data/ext/groonga/rb-grn-variable-size-column.c +11 -7
- data/ext/groonga/rb-grn.h +11 -1
- data/lib/groonga/dumper.rb +23 -1
- data/lib/groonga/patricia-trie.rb +1 -1
- data/lib/groonga/schema.rb +190 -205
- data/misc/grnop2ruby.rb +1 -1
- data/rroonga-build.rb +3 -3
- data/rroonga.gemspec +1 -0
- data/test/groonga-test-utils.rb +2 -2
- data/test/test-column.rb +19 -0
- data/test/test-context.rb +5 -1
- data/test/test-double-array-trie.rb +19 -0
- data/test/test-exception.rb +7 -2
- data/test/test-expression.rb +19 -0
- data/test/test-fix-size-column.rb +49 -36
- data/test/test-hash.rb +22 -0
- data/test/test-patricia-trie.rb +26 -7
- data/test/test-schema-dumper.rb +65 -1
- data/test/test-schema.rb +13 -2
- data/test/test-variable-size-column.rb +6 -5
- metadata +47 -46
data/ext/groonga/rb-grn-column.c
CHANGED
@@ -758,7 +758,7 @@ rb_grn_column_get_indexes (int argc, VALUE *argv, VALUE self)
|
|
758
758
|
}
|
759
759
|
|
760
760
|
/*
|
761
|
-
* Renames the
|
761
|
+
* Renames the column to name.
|
762
762
|
* @since 1.3.0
|
763
763
|
* @overload rename(name)
|
764
764
|
* @param name [String] the new name
|
@@ -782,7 +782,8 @@ rb_grn_column_rename (VALUE self, VALUE rb_name)
|
|
782
782
|
rc = grn_column_rename(context, column, name, name_size);
|
783
783
|
rb_grn_context_check(context, self);
|
784
784
|
rb_grn_rc_check(rc, self);
|
785
|
-
|
785
|
+
rb_grn_named_object_set_name(RB_GRN_NAMED_OBJECT(DATA_PTR(self)),
|
786
|
+
name, name_size);
|
786
787
|
return self;
|
787
788
|
}
|
788
789
|
|
@@ -670,13 +670,28 @@ rb_grn_context_support_zlib_p (VALUE self)
|
|
670
670
|
}
|
671
671
|
|
672
672
|
/*
|
673
|
-
*
|
674
|
-
*
|
673
|
+
* If Groonga supports LZO compression, it returns +true+,
|
674
|
+
* otherwise it returns +false+.
|
675
|
+
*
|
676
|
+
* Groonga does not support LZO compression 4.0.7 or later.
|
677
|
+
* This method always returns +false+.
|
675
678
|
*
|
676
679
|
* @overload support_lzo?
|
677
680
|
*/
|
678
681
|
static VALUE
|
679
682
|
rb_grn_context_support_lzo_p (VALUE self)
|
683
|
+
{
|
684
|
+
return Qfalse;
|
685
|
+
}
|
686
|
+
|
687
|
+
/*
|
688
|
+
* If Groonga supports LZ4 compression, it returns +true+,
|
689
|
+
* otherwise it returns +false+.
|
690
|
+
*
|
691
|
+
* @overload support_lz4?
|
692
|
+
*/
|
693
|
+
static VALUE
|
694
|
+
rb_grn_context_support_lz4_p (VALUE self)
|
680
695
|
{
|
681
696
|
VALUE rb_support_p;
|
682
697
|
grn_ctx *context;
|
@@ -684,7 +699,7 @@ rb_grn_context_support_lzo_p (VALUE self)
|
|
684
699
|
|
685
700
|
context = SELF(self);
|
686
701
|
GRN_BOOL_INIT(&support_p, 0);
|
687
|
-
grn_obj_get_info(context, NULL,
|
702
|
+
grn_obj_get_info(context, NULL, GRN_INFO_SUPPORT_LZ4, &support_p);
|
688
703
|
rb_support_p = CBOOL2RVAL(GRN_BOOL_VALUE(&support_p));
|
689
704
|
GRN_OBJ_FIN(context, &support_p);
|
690
705
|
|
@@ -974,6 +989,8 @@ rb_grn_init_context (VALUE mGrn)
|
|
974
989
|
rb_grn_context_support_zlib_p, 0);
|
975
990
|
rb_define_method(cGrnContext, "support_lzo?",
|
976
991
|
rb_grn_context_support_lzo_p, 0);
|
992
|
+
rb_define_method(cGrnContext, "support_lz4?",
|
993
|
+
rb_grn_context_support_lz4_p, 0);
|
977
994
|
|
978
995
|
rb_define_method(cGrnContext, "database", rb_grn_context_get_database, 0);
|
979
996
|
|
@@ -219,6 +219,10 @@ rb_grn_double_array_trie_bind (RbGrnDoubleArrayTrie *rb_grn_double_array_trie,
|
|
219
219
|
* {Groonga::IndexColumn} を定義する場合は
|
220
220
|
* @"TokenBigram"@ などを指定する必要がある。
|
221
221
|
*
|
222
|
+
* @option options [::Array<String, Groonga::Procedure>, nil]
|
223
|
+
* :token_filters (nil) The token filters to be used in the
|
224
|
+
* table.
|
225
|
+
*
|
222
226
|
* @option options :sub_records
|
223
227
|
* +true+ を指定すると {#group} でグループ化したときに、
|
224
228
|
* {Groonga::Record#n_sub_records} でグループに含まれるレコー
|
@@ -246,7 +250,9 @@ rb_grn_double_array_trie_s_create (int argc, VALUE *argv, VALUE klass)
|
|
246
250
|
VALUE options, rb_context, rb_name, rb_path, rb_persistent;
|
247
251
|
VALUE rb_key_normalize, rb_key_with_sis, rb_key_type;
|
248
252
|
VALUE rb_value_type;
|
249
|
-
VALUE rb_default_tokenizer
|
253
|
+
VALUE rb_default_tokenizer;
|
254
|
+
VALUE rb_token_filters;
|
255
|
+
VALUE rb_sub_records;
|
250
256
|
VALUE rb_normalizer;
|
251
257
|
|
252
258
|
rb_scan_args(argc, argv, "01", &options);
|
@@ -261,6 +267,7 @@ rb_grn_double_array_trie_s_create (int argc, VALUE *argv, VALUE klass)
|
|
261
267
|
"key_type", &rb_key_type,
|
262
268
|
"value_type", &rb_value_type,
|
263
269
|
"default_tokenizer", &rb_default_tokenizer,
|
270
|
+
"token_filters", &rb_token_filters,
|
264
271
|
"sub_records", &rb_sub_records,
|
265
272
|
"normalizer", &rb_normalizer,
|
266
273
|
NULL);
|
@@ -308,7 +315,9 @@ rb_grn_double_array_trie_s_create (int argc, VALUE *argv, VALUE klass)
|
|
308
315
|
if (!NIL_P(rb_default_tokenizer))
|
309
316
|
rb_funcall(rb_table, rb_intern("default_tokenizer="), 1,
|
310
317
|
rb_default_tokenizer);
|
311
|
-
|
318
|
+
if (!NIL_P(rb_token_filters))
|
319
|
+
rb_funcall(rb_table, rb_intern("token_filters="), 1,
|
320
|
+
rb_token_filters);
|
312
321
|
if (!NIL_P(rb_normalizer))
|
313
322
|
rb_funcall(rb_table, rb_intern("normalizer="), 1,
|
314
323
|
rb_normalizer);
|
@@ -1,6 +1,7 @@
|
|
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-2014 Kouhei Sutou <kou@clear-code.com>
|
4
|
+
Copyright (C) 2014 Masafumi Yokoyama <myokoym@gmail.com>
|
4
5
|
|
5
6
|
This library is free software; you can redistribute it and/or
|
6
7
|
modify it under the terms of the GNU Lesser General Public
|
@@ -83,7 +84,7 @@ static VALUE eGrnNotSocket;
|
|
83
84
|
static VALUE eGrnOperationNotSupported;
|
84
85
|
static VALUE eGrnAddressIsInUse;
|
85
86
|
static VALUE eGrnZLibError;
|
86
|
-
static VALUE
|
87
|
+
static VALUE eGrnLZ4Error;
|
87
88
|
static VALUE eGrnStackOverFlow;
|
88
89
|
static VALUE eGrnSyntaxError;
|
89
90
|
static VALUE eGrnRetryMax;
|
@@ -95,6 +96,7 @@ static VALUE eGrnTooSmallLimit;
|
|
95
96
|
static VALUE eGrnCASError;
|
96
97
|
static VALUE eGrnUnsupportedCommandVersion;
|
97
98
|
static VALUE eGrnNormalizerError;
|
99
|
+
static VALUE eGrnTokenFilterError;
|
98
100
|
|
99
101
|
VALUE
|
100
102
|
rb_grn_rc_to_exception (grn_rc rc)
|
@@ -288,8 +290,8 @@ rb_grn_rc_to_exception (grn_rc rc)
|
|
288
290
|
case GRN_ZLIB_ERROR:
|
289
291
|
exception = eGrnZLibError;
|
290
292
|
break;
|
291
|
-
case
|
292
|
-
exception =
|
293
|
+
case GRN_LZ4_ERROR:
|
294
|
+
exception = eGrnLZ4Error;
|
293
295
|
break;
|
294
296
|
case GRN_STACK_OVER_FLOW:
|
295
297
|
exception = eGrnStackOverFlow;
|
@@ -324,6 +326,9 @@ rb_grn_rc_to_exception (grn_rc rc)
|
|
324
326
|
case GRN_NORMALIZER_ERROR:
|
325
327
|
exception = eGrnNormalizerError;
|
326
328
|
break;
|
329
|
+
case GRN_TOKEN_FILTER_ERROR:
|
330
|
+
exception = eGrnTokenFilterError;
|
331
|
+
break;
|
327
332
|
}
|
328
333
|
|
329
334
|
if (NIL_P(exception))
|
@@ -524,8 +529,8 @@ rb_grn_rc_to_message (grn_rc rc)
|
|
524
529
|
case GRN_ZLIB_ERROR:
|
525
530
|
message = "ZLib error";
|
526
531
|
break;
|
527
|
-
case
|
528
|
-
message = "
|
532
|
+
case GRN_LZ4_ERROR:
|
533
|
+
message = "LZ4 error";
|
529
534
|
break;
|
530
535
|
case GRN_STACK_OVER_FLOW:
|
531
536
|
message = "stack over flow";
|
@@ -560,6 +565,9 @@ rb_grn_rc_to_message (grn_rc rc)
|
|
560
565
|
case GRN_NORMALIZER_ERROR:
|
561
566
|
message = "normalizer error";
|
562
567
|
break;
|
568
|
+
case GRN_TOKEN_FILTER_ERROR:
|
569
|
+
message = "token filter error";
|
570
|
+
break;
|
563
571
|
}
|
564
572
|
|
565
573
|
if (!message)
|
@@ -1114,12 +1122,12 @@ rb_grn_init_exception (VALUE mGrn)
|
|
1114
1122
|
rb_define_class_under(mGrn, "ZLibError", rb_eGrnError);
|
1115
1123
|
|
1116
1124
|
/*
|
1117
|
-
* Document-class: Groonga::
|
1125
|
+
* Document-class: Groonga::LZ4Error
|
1118
1126
|
*
|
1119
|
-
*
|
1127
|
+
* LZ4に問題があるときに発生する。
|
1120
1128
|
*/
|
1121
|
-
|
1122
|
-
rb_define_class_under(mGrn, "
|
1129
|
+
eGrnLZ4Error =
|
1130
|
+
rb_define_class_under(mGrn, "LZ4Error", rb_eGrnError);
|
1123
1131
|
|
1124
1132
|
/*
|
1125
1133
|
* Document-class: Groonga::StackOverFlow
|
@@ -1209,4 +1217,14 @@ rb_grn_init_exception (VALUE mGrn)
|
|
1209
1217
|
*/
|
1210
1218
|
eGrnNormalizerError =
|
1211
1219
|
rb_define_class_under(mGrn, "NormalizerError", rb_eGrnError);
|
1220
|
+
|
1221
|
+
/*
|
1222
|
+
* Document-class: Groonga::TokenFilterError
|
1223
|
+
*
|
1224
|
+
* It is used when a token filter causes an error.
|
1225
|
+
*
|
1226
|
+
* @since 4.0.6
|
1227
|
+
*/
|
1228
|
+
eGrnTokenFilterError =
|
1229
|
+
rb_define_class_under(mGrn, "TokenFilterError", rb_eGrnError);
|
1212
1230
|
}
|
@@ -1,6 +1,7 @@
|
|
1
1
|
/* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2
2
|
/*
|
3
3
|
Copyright (C) 2009-2014 Kouhei Sutou <kou@clear-code.com>
|
4
|
+
Copyright (C) 2014 Masafumi Yokoyama <myokoym@gmail.com>
|
4
5
|
|
5
6
|
This library is free software; you can redistribute it and/or
|
6
7
|
modify it under the terms of the GNU Lesser General Public
|
@@ -493,6 +494,37 @@ rb_grn_expression_compile (VALUE self)
|
|
493
494
|
return Qnil;
|
494
495
|
}
|
495
496
|
|
497
|
+
/*
|
498
|
+
* Dump execution plan of the `expression` in string.
|
499
|
+
*
|
500
|
+
* @overload dump_plan
|
501
|
+
* @since 4.0.8
|
502
|
+
*/
|
503
|
+
static VALUE
|
504
|
+
rb_grn_expression_dump_plan (VALUE self)
|
505
|
+
{
|
506
|
+
/* TODO: Remove me after Groogna 4.0.8 is released. */
|
507
|
+
#ifdef HAVE_GRN_EXPR_DUMP_PLAN
|
508
|
+
grn_ctx *context = NULL;
|
509
|
+
grn_obj *expression;
|
510
|
+
grn_obj dumped_plan;
|
511
|
+
VALUE rb_dumped_plan;
|
512
|
+
|
513
|
+
rb_grn_expression_deconstruct(SELF(self), &expression, &context,
|
514
|
+
NULL, NULL,
|
515
|
+
NULL, NULL, NULL);
|
516
|
+
|
517
|
+
GRN_TEXT_INIT(&dumped_plan, 0);
|
518
|
+
grn_expr_dump_plan(context, expression, &dumped_plan);
|
519
|
+
rb_dumped_plan = GRNBULK2RVAL(context, &dumped_plan, NULL, self);
|
520
|
+
grn_obj_unlink(context, &dumped_plan);
|
521
|
+
|
522
|
+
return rb_dumped_plan;
|
523
|
+
#else
|
524
|
+
return rb_str_new2("");
|
525
|
+
#endif
|
526
|
+
}
|
527
|
+
|
496
528
|
/*
|
497
529
|
* _expression_ で使用可能な変数のうち、名前が _name_
|
498
530
|
* または _offset_ 番目に {Expression#append_object}
|
@@ -717,6 +749,47 @@ rb_grn_expression_snippet (int argc, VALUE *argv, VALUE self)
|
|
717
749
|
return GRNOBJECT2RVAL(Qnil, context, snippet, GRN_TRUE);
|
718
750
|
}
|
719
751
|
|
752
|
+
/*
|
753
|
+
* Extracts keywords from _expression_. The keywords order isn't
|
754
|
+
* guaranteed.
|
755
|
+
*
|
756
|
+
* @example
|
757
|
+
* expression.parse("Ruby OR Groonga")
|
758
|
+
* expression.keywords #=> ["Groonga", "Ruby"]
|
759
|
+
*
|
760
|
+
* @overload keywords
|
761
|
+
* @return [::Array<String>] the extracted keywords
|
762
|
+
*
|
763
|
+
* @since 4.0.6
|
764
|
+
*/
|
765
|
+
static VALUE
|
766
|
+
rb_grn_expression_get_keywords (VALUE self)
|
767
|
+
{
|
768
|
+
grn_ctx *context = NULL;
|
769
|
+
grn_obj *expression;
|
770
|
+
grn_obj keywords;
|
771
|
+
VALUE rb_keywords = rb_ary_new();
|
772
|
+
|
773
|
+
rb_grn_expression_deconstruct(SELF(self), &expression, &context,
|
774
|
+
NULL, NULL,
|
775
|
+
NULL, NULL, NULL);
|
776
|
+
|
777
|
+
GRN_PTR_INIT(&keywords, GRN_OBJ_VECTOR, GRN_ID_NIL);
|
778
|
+
grn_expr_get_keywords(context, expression, &keywords);
|
779
|
+
{
|
780
|
+
int i, n_keywords;
|
781
|
+
n_keywords = GRN_BULK_VSIZE(&keywords) / sizeof(grn_obj *);
|
782
|
+
for (i = 0; i < n_keywords; i++) {
|
783
|
+
grn_obj *keyword = GRN_PTR_VALUE_AT(&keywords, i);
|
784
|
+
rb_ary_push(rb_keywords,
|
785
|
+
GRNBULK2RVAL(context, keyword, NULL, self));
|
786
|
+
}
|
787
|
+
}
|
788
|
+
GRN_OBJ_FIN(context, &keywords);
|
789
|
+
|
790
|
+
return rb_keywords;
|
791
|
+
}
|
792
|
+
|
720
793
|
void
|
721
794
|
rb_grn_init_expression (VALUE mGrn)
|
722
795
|
{
|
@@ -741,6 +814,8 @@ rb_grn_init_expression (VALUE mGrn)
|
|
741
814
|
rb_grn_expression_execute, 0);
|
742
815
|
rb_define_method(rb_cGrnExpression, "compile",
|
743
816
|
rb_grn_expression_compile, 0);
|
817
|
+
rb_define_method(rb_cGrnExpression, "dump_plan",
|
818
|
+
rb_grn_expression_dump_plan, 0);
|
744
819
|
|
745
820
|
rb_define_method(rb_cGrnExpression, "[]",
|
746
821
|
rb_grn_expression_array_reference, 1);
|
@@ -748,6 +823,9 @@ rb_grn_init_expression (VALUE mGrn)
|
|
748
823
|
rb_define_method(rb_cGrnExpression, "snippet",
|
749
824
|
rb_grn_expression_snippet, -1);
|
750
825
|
|
826
|
+
rb_define_method(rb_cGrnExpression, "keywords",
|
827
|
+
rb_grn_expression_get_keywords, 0);
|
828
|
+
|
751
829
|
rb_define_method(rb_cGrnExpression, "inspect",
|
752
830
|
rb_grn_expression_inspect, 0);
|
753
831
|
}
|
data/ext/groonga/rb-grn-hash.c
CHANGED
@@ -131,6 +131,11 @@ VALUE rb_cGrnHash;
|
|
131
131
|
* デフォルトでは何も設定されていないので、テーブルに
|
132
132
|
* {Groonga::IndexColumn} を定義する場合は
|
133
133
|
* @"TokenBigram"@ などを指定する必要がある。
|
134
|
+
*
|
135
|
+
* @option options [::Array<String, Groonga::Procedure>, nil]
|
136
|
+
* :token_filters (nil) The token filters to be used in the
|
137
|
+
* table.
|
138
|
+
*
|
134
139
|
* @option options [Groonga::Record#n_sub_records] :sub_records
|
135
140
|
* +true+ を指定すると {#group} でグループ化したときに、
|
136
141
|
* {Groonga::Record#n_sub_records} でグループに含まれるレコー
|
@@ -157,6 +162,7 @@ rb_grn_hash_s_create (int argc, VALUE *argv, VALUE klass)
|
|
157
162
|
VALUE rb_table;
|
158
163
|
VALUE options, rb_context, rb_name, rb_path, rb_persistent;
|
159
164
|
VALUE rb_key_normalize, rb_key_type, rb_value_type, rb_default_tokenizer;
|
165
|
+
VALUE rb_token_filters;
|
160
166
|
VALUE rb_sub_records;
|
161
167
|
VALUE rb_normalizer;
|
162
168
|
|
@@ -171,6 +177,7 @@ rb_grn_hash_s_create (int argc, VALUE *argv, VALUE klass)
|
|
171
177
|
"key_type", &rb_key_type,
|
172
178
|
"value_type", &rb_value_type,
|
173
179
|
"default_tokenizer", &rb_default_tokenizer,
|
180
|
+
"token_filters", &rb_token_filters,
|
174
181
|
"sub_records", &rb_sub_records,
|
175
182
|
"normalizer", &rb_normalizer,
|
176
183
|
NULL);
|
@@ -215,6 +222,9 @@ rb_grn_hash_s_create (int argc, VALUE *argv, VALUE klass)
|
|
215
222
|
if (!NIL_P(rb_default_tokenizer))
|
216
223
|
rb_funcall(rb_table, rb_intern("default_tokenizer="), 1,
|
217
224
|
rb_default_tokenizer);
|
225
|
+
if (!NIL_P(rb_token_filters))
|
226
|
+
rb_funcall(rb_table, rb_intern("token_filters="), 1,
|
227
|
+
rb_token_filters);
|
218
228
|
if (!NIL_P(rb_normalizer))
|
219
229
|
rb_funcall(rb_table, rb_intern("normalizer="), 1,
|
220
230
|
rb_normalizer);
|
data/ext/groonga/rb-grn-logger.c
CHANGED
@@ -193,13 +193,14 @@ rb_grn_logger_fin (grn_ctx *ctx, void *user_data)
|
|
193
193
|
* groongaがログを出力する度に呼び出されるブロックを登録する。
|
194
194
|
*
|
195
195
|
* @overload register(options={})
|
196
|
-
* @yield [level, time, title, message, location]
|
197
|
-
* _level_ はSymbol、それ以外は全て文字列で渡される。
|
196
|
+
* @yield [event, level, time, title, message, location]
|
197
|
+
* _event_ と _level_ はSymbol、それ以外は全て文字列で渡される。
|
198
|
+
* _event_ と _level_ 以外
|
198
199
|
* の4つについては _options_ で +false+ を指定することでブロックに
|
199
200
|
* 渡さないようにすることができ、その場合は空文字列が実際には渡される。
|
200
201
|
* @param options [::Hash] The name and value
|
201
202
|
* pairs. Omitted names are initialized as the default value.
|
202
|
-
* @option options :
|
203
|
+
* @option options :max_level (:notice)
|
203
204
|
* ログのレベルを +:none+ , +:emergency+ , +:alert+ ,
|
204
205
|
* +:critical+ , +:error+ , +:warning+ , +:notice+ , +:info+ ,
|
205
206
|
* +:debug+ , +:dump+ のいずれかで指定する。それより重要度が
|
@@ -234,6 +235,9 @@ rb_grn_logger_s_register (int argc, VALUE *argv, VALUE klass)
|
|
234
235
|
rb_scan_args(argc, argv, "02&", &rb_logger, &rb_options, &rb_callback);
|
235
236
|
|
236
237
|
if (rb_block_given_p()) {
|
238
|
+
if (!NIL_P(rb_logger)) {
|
239
|
+
rb_options = rb_logger;
|
240
|
+
}
|
237
241
|
rb_logger = rb_funcall(cGrnCallbackLogger, id_new, 1, rb_callback);
|
238
242
|
}
|
239
243
|
|
data/ext/groonga/rb-grn-object.c
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
/* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2
2
|
/*
|
3
3
|
Copyright (C) 2009-2014 Kouhei Sutou <kou@clear-code.com>
|
4
|
+
Copyright (C) 2014 Masafumi Yokoyama <myokoym@gmail.com>
|
4
5
|
|
5
6
|
This library is free software; you can redistribute it and/or
|
6
7
|
modify it under the terms of the GNU Lesser General Public
|
@@ -901,8 +902,8 @@ rb_grn_object_inspect_content_flags_with_label (VALUE inspected,
|
|
901
902
|
case GRN_COLUMN_VAR_SIZE:
|
902
903
|
if (flags & GRN_OBJ_COMPRESS_ZLIB)
|
903
904
|
rb_ary_push(inspected_flags, rb_str_new2("COMPRESS_ZLIB"));
|
904
|
-
if (flags &
|
905
|
-
rb_ary_push(inspected_flags, rb_str_new2("
|
905
|
+
if (flags & GRN_OBJ_COMPRESS_LZ4)
|
906
|
+
rb_ary_push(inspected_flags, rb_str_new2("COMPRESS_LZ4"));
|
906
907
|
break;
|
907
908
|
case GRN_COLUMN_INDEX:
|
908
909
|
if (flags & GRN_OBJ_WITH_SECTION)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
/* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2
2
|
/* vim: set sts=4 sw=4 ts=8 noet: */
|
3
3
|
/*
|
4
|
-
Copyright (C) 2009 Kouhei Sutou <kou@clear-code.com>
|
4
|
+
Copyright (C) 2009-2014 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
|
@@ -141,6 +141,11 @@ VALUE rb_cGrnPatriciaTrie;
|
|
141
141
|
* デフォルトでは何も設定されていないので、テーブルに
|
142
142
|
* {Groonga::IndexColumn} を定義する場合は
|
143
143
|
* @"TokenBigram"@ などを指定する必要がある。
|
144
|
+
*
|
145
|
+
* @option options [::Array<String, Groonga::Procedure>, nil]
|
146
|
+
* :token_filters (nil) The token filters to be used in the
|
147
|
+
* table.
|
148
|
+
*
|
144
149
|
* @option options :sub_records
|
145
150
|
* +true+ を指定すると {#group} でグループ化したときに、
|
146
151
|
* {Groonga::Record#n_sub_records} でグループに含まれるレコー
|
@@ -168,7 +173,9 @@ rb_grn_patricia_trie_s_create (int argc, VALUE *argv, VALUE klass)
|
|
168
173
|
VALUE options, rb_context, rb_name, rb_path, rb_persistent;
|
169
174
|
VALUE rb_key_normalize, rb_key_with_sis, rb_key_type;
|
170
175
|
VALUE rb_value_type;
|
171
|
-
VALUE rb_default_tokenizer
|
176
|
+
VALUE rb_default_tokenizer;
|
177
|
+
VALUE rb_token_filters;
|
178
|
+
VALUE rb_sub_records;
|
172
179
|
VALUE rb_normalizer;
|
173
180
|
|
174
181
|
rb_scan_args(argc, argv, "01", &options);
|
@@ -183,6 +190,7 @@ rb_grn_patricia_trie_s_create (int argc, VALUE *argv, VALUE klass)
|
|
183
190
|
"key_type", &rb_key_type,
|
184
191
|
"value_type", &rb_value_type,
|
185
192
|
"default_tokenizer", &rb_default_tokenizer,
|
193
|
+
"token_filters", &rb_token_filters,
|
186
194
|
"sub_records", &rb_sub_records,
|
187
195
|
"normalizer", &rb_normalizer,
|
188
196
|
NULL);
|
@@ -230,6 +238,9 @@ rb_grn_patricia_trie_s_create (int argc, VALUE *argv, VALUE klass)
|
|
230
238
|
if (!NIL_P(rb_default_tokenizer))
|
231
239
|
rb_funcall(rb_table, rb_intern("default_tokenizer="), 1,
|
232
240
|
rb_default_tokenizer);
|
241
|
+
if (!NIL_P(rb_token_filters))
|
242
|
+
rb_funcall(rb_table, rb_intern("token_filters="), 1,
|
243
|
+
rb_token_filters);
|
233
244
|
if (!NIL_P(rb_normalizer))
|
234
245
|
rb_funcall(rb_table, rb_intern("normalizer="), 1,
|
235
246
|
rb_normalizer);
|
@@ -340,7 +351,7 @@ rb_grn_patricia_trie_search (int argc, VALUE *argv, VALUE self)
|
|
340
351
|
*
|
341
352
|
* @example
|
342
353
|
* words = Groonga::PatriciaTrie.create(:key_type => "ShortText",
|
343
|
-
* :
|
354
|
+
* :normalizer => "NormalizerAuto")
|
344
355
|
* words.add("リンク")
|
345
356
|
* adventure_of_link = words.add('リンクの冒険')
|
346
357
|
* words.add('冒険')
|
@@ -753,10 +764,11 @@ rb_grn_patricia_trie_open_rk_cursor (int argc, VALUE *argv, VALUE self)
|
|
753
764
|
|
754
765
|
static grn_table_cursor *
|
755
766
|
rb_grn_patricia_trie_open_grn_near_cursor (int argc, VALUE *argv, VALUE self,
|
756
|
-
|
767
|
+
grn_ctx **context, int flags)
|
757
768
|
{
|
758
769
|
grn_obj *table;
|
759
|
-
|
770
|
+
grn_id domain_id;
|
771
|
+
grn_obj *key, *domain;
|
760
772
|
grn_table_cursor *cursor;
|
761
773
|
unsigned min_size = 0;
|
762
774
|
int offset = 0, limit = -1;
|
@@ -765,10 +777,10 @@ rb_grn_patricia_trie_open_grn_near_cursor (int argc, VALUE *argv, VALUE self,
|
|
765
777
|
|
766
778
|
flags |= GRN_CURSOR_PREFIX;
|
767
779
|
|
768
|
-
|
769
|
-
|
770
|
-
|
771
|
-
|
780
|
+
rb_grn_table_key_support_deconstruct(SELF(self), &table, context,
|
781
|
+
&key, &domain_id, &domain,
|
782
|
+
NULL, NULL, NULL,
|
783
|
+
NULL);
|
772
784
|
|
773
785
|
rb_scan_args(argc, argv, "11", &rb_key, &options);
|
774
786
|
|
@@ -780,15 +792,7 @@ rb_grn_patricia_trie_open_grn_near_cursor (int argc, VALUE *argv, VALUE self,
|
|
780
792
|
"less_than", &rb_less_than,
|
781
793
|
NULL);
|
782
794
|
|
783
|
-
|
784
|
-
table->header.domain,
|
785
|
-
grn_ctx_at(*context, table->header.domain));
|
786
|
-
GRN_OBJ_INIT(&casted_key, GRN_BULK, 0, table->header.domain);
|
787
|
-
if (key_p->header.domain != table->header.domain) {
|
788
|
-
grn_obj_cast(*context, key_p, &casted_key, GRN_FALSE);
|
789
|
-
grn_obj_unlink(*context, key_p);
|
790
|
-
key_p = &casted_key;
|
791
|
-
}
|
795
|
+
RVAL2GRNBULK_WITH_TYPE(rb_key, *context, key, domain_id, domain);
|
792
796
|
|
793
797
|
if (!NIL_P(rb_min_size))
|
794
798
|
min_size = NUM2UINT(rb_min_size);
|
@@ -804,9 +808,8 @@ rb_grn_patricia_trie_open_grn_near_cursor (int argc, VALUE *argv, VALUE self,
|
|
804
808
|
|
805
809
|
cursor = grn_table_cursor_open(*context, table,
|
806
810
|
NULL, min_size,
|
807
|
-
GRN_BULK_HEAD(
|
811
|
+
GRN_BULK_HEAD(key), GRN_BULK_VSIZE(key),
|
808
812
|
offset, limit, flags);
|
809
|
-
GRN_OBJ_FIN(*context, &casted_key);
|
810
813
|
rb_grn_context_check(*context, self);
|
811
814
|
|
812
815
|
return cursor;
|