rroonga 5.0.0 → 5.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f9abb0782118ae8bf3bc7ae7fd91b2947d23568f
|
4
|
+
data.tar.gz: d4cd06feff63ea165f725fcc667de0d6e35d7ed3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a537e4dab40a080c59a801492b55b0aa103734cd3103ae616dceecdde3fd9fdd8b7ef400c67962854dfe4cba8685ef4ea24431e0eade2b7df7eb8360d57ea840
|
7
|
+
data.tar.gz: 2cf053bf2f30202391d013839f394d344280ef5666abac6d75cb4564043977b965f55a8320bd29cda9cccdf19eec0f96c34edb35c870121322f080bf6aacefb5
|
data/.yardopts
CHANGED
data/Rakefile
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8; mode: ruby -*-
|
2
2
|
#
|
3
|
-
# Copyright (C) 2009-
|
3
|
+
# Copyright (C) 2009-2015 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
|
@@ -114,15 +114,6 @@ Rake::ExtensionTask.new("groonga", spec) do |ext|
|
|
114
114
|
if windows?(_spec.platform.to_s)
|
115
115
|
binary_files = collect_binary_files(relative_binary_dir)
|
116
116
|
_spec.files += binary_files
|
117
|
-
stage_path = "#{ext.tmp_dir}/#{_spec.platform}/stage"
|
118
|
-
binary_files.each do |binary_file|
|
119
|
-
stage_binary_file = "#{stage_path}/#{binary_file}"
|
120
|
-
stage_binary_dir = File.dirname(stage_binary_file)
|
121
|
-
directory stage_binary_dir
|
122
|
-
file stage_binary_file => [stage_binary_dir, binary_file] do
|
123
|
-
cp binary_file, stage_binary_file
|
124
|
-
end
|
125
|
-
end
|
126
117
|
end
|
127
118
|
end
|
128
119
|
end
|
data/ext/groonga/extconf.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
#
|
3
|
-
# Copyright (C) 2009-
|
3
|
+
# Copyright (C) 2009-2015 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
|
@@ -282,6 +282,8 @@ have_header("ruby/st.h") unless have_macro("HAVE_RUBY_ST_H", "ruby.h")
|
|
282
282
|
have_func("rb_errinfo", "ruby.h")
|
283
283
|
have_func("rb_sym2str", "ruby.h")
|
284
284
|
have_func("rb_to_symbol", "ruby.h")
|
285
|
+
have_func("rb_ary_new_from_args", "ruby.h")
|
286
|
+
have_func("rb_ary_new_from_values", "ruby.h")
|
285
287
|
have_type("enum ruby_value_type", "ruby.h")
|
286
288
|
|
287
289
|
checking_for(checking_message("--enable-debug-log option")) do
|
data/ext/groonga/rb-grn-array.c
CHANGED
@@ -131,7 +131,7 @@ rb_grn_array_s_create (int argc, VALUE *argv, VALUE klass)
|
|
131
131
|
table = grn_table_create(context, name, name_size, path,
|
132
132
|
flags, NULL, value_type);
|
133
133
|
if (!table)
|
134
|
-
rb_grn_context_check(context,
|
134
|
+
rb_grn_context_check(context, rb_ary_new_from_values(argc, argv));
|
135
135
|
rb_table = GRNOBJECT2RVAL(klass, context, table, GRN_TRUE);
|
136
136
|
rb_grn_context_check(context, rb_table);
|
137
137
|
rb_iv_set(rb_table, "@context", rb_context);
|
data/ext/groonga/rb-grn-column.c
CHANGED
@@ -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-
|
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
|
@@ -195,13 +195,13 @@ rb_grn_column_get_local_name (VALUE self)
|
|
195
195
|
* {Groonga::Expression#snippet} を使うことにより、指定した条件
|
196
196
|
* 用のスニペットを簡単に生成できる。
|
197
197
|
*
|
198
|
-
*
|
198
|
+
* @example Shows texts around "Groonga"
|
199
199
|
* results = description_column.select do |column|
|
200
|
-
* column =~ "
|
200
|
+
* column =~ "Groonga"
|
201
201
|
* end
|
202
202
|
* snippet = results.expression.snippet([["<em>", "</em>"]])
|
203
203
|
* results.each do |record|
|
204
|
-
* puts "#{record['name']}の説明文の中で「
|
204
|
+
* puts "#{record['name']}の説明文の中で「Groonga」を含む部分"
|
205
205
|
* snippet.execute(record["description"]).each do |snippet|
|
206
206
|
* puts "---"
|
207
207
|
* puts "#{snippet}..."
|
@@ -209,15 +209,12 @@ rb_grn_column_get_local_name (VALUE self)
|
|
209
209
|
* end
|
210
210
|
* end
|
211
211
|
*
|
212
|
-
*
|
213
|
-
*
|
214
|
-
*
|
215
|
-
*
|
216
|
-
*
|
217
|
-
* ---
|
218
|
-
* rroongaは<em>groonga</em>のいわゆるDB-APIの層の...
|
219
|
-
* ---
|
220
|
-
* </pre>
|
212
|
+
* # Sample output:
|
213
|
+
* #
|
214
|
+
* # Rroongaの説明文の中で「Groonga」を含む部分
|
215
|
+
* # ---
|
216
|
+
* # Rroongaは<em>Groonga</em>のいわゆるDB-APIの層の...
|
217
|
+
* # ---
|
221
218
|
*
|
222
219
|
* @return [Groonga::Hash] 検索結果
|
223
220
|
* @overload select(options)
|
@@ -351,7 +348,7 @@ rb_grn_column_select (int argc, VALUE *argv, VALUE self)
|
|
351
348
|
"should be [query_string, option_hash], "
|
352
349
|
"[expression, option_hash] "
|
353
350
|
"or [option_hash]: %s",
|
354
|
-
rb_grn_inspect(
|
351
|
+
rb_grn_inspect(rb_ary_new_from_values(argc, argv)));
|
355
352
|
options = condition_or_options;
|
356
353
|
}
|
357
354
|
|
@@ -504,72 +501,42 @@ rb_grn_column_lock (int argc, VALUE *argv, VALUE self)
|
|
504
501
|
}
|
505
502
|
|
506
503
|
/*
|
507
|
-
*
|
508
|
-
*
|
509
|
-
*
|
510
|
-
* @
|
511
|
-
* _:id_で指定したレコードのロックを強制的に解除する。
|
512
|
-
* (注: groonga側が未実装のため、現在は無視される。実装さ
|
513
|
-
* れるのではないかと思っているが、実装されないかもしれな
|
514
|
-
* い。)
|
504
|
+
* Forces to clear lock of the `column`.
|
505
|
+
*
|
506
|
+
* @overload clear_lock
|
507
|
+
* @return [void]
|
515
508
|
*/
|
516
509
|
static VALUE
|
517
|
-
rb_grn_column_clear_lock (
|
510
|
+
rb_grn_column_clear_lock (VALUE self)
|
518
511
|
{
|
519
|
-
grn_id id = GRN_ID_NIL;
|
520
512
|
grn_ctx *context;
|
521
513
|
grn_obj *column;
|
522
|
-
VALUE options, rb_id;
|
523
|
-
|
524
|
-
rb_scan_args(argc, argv, "01", &options);
|
525
514
|
|
526
515
|
rb_grn_column_deconstruct(SELF(self), &column, &context,
|
527
516
|
NULL, NULL,
|
528
517
|
NULL, NULL, NULL);
|
529
518
|
|
530
|
-
rb_grn_scan_options(options,
|
531
|
-
"id", &rb_id,
|
532
|
-
NULL);
|
533
|
-
|
534
|
-
if (!NIL_P(rb_id))
|
535
|
-
id = NUM2UINT(rb_id);
|
536
|
-
|
537
519
|
grn_obj_clear_lock(context, column);
|
538
520
|
|
539
521
|
return Qnil;
|
540
522
|
}
|
541
523
|
|
542
524
|
/*
|
543
|
-
*
|
544
|
-
*
|
545
|
-
*
|
546
|
-
* @
|
547
|
-
* _:id_で指定したレコードがロックされていれば +true+ を返す。
|
548
|
-
* (注: groonga側が未実装のため、現在は無視される。実装さ
|
549
|
-
* れるのではないかと思っているが、実装されないかもしれな
|
550
|
-
* い。)
|
525
|
+
* Checks whether the `column` is locked or not.
|
526
|
+
*
|
527
|
+
* @overload locked?
|
528
|
+
* @return [Boolean] `true` if the `column` is locked, `false` otherwise.
|
551
529
|
*/
|
552
530
|
static VALUE
|
553
|
-
|
531
|
+
rb_grn_column_locked_p (VALUE self)
|
554
532
|
{
|
555
|
-
grn_id id = GRN_ID_NIL;
|
556
533
|
grn_ctx *context;
|
557
534
|
grn_obj *column;
|
558
|
-
VALUE options, rb_id;
|
559
|
-
|
560
|
-
rb_scan_args(argc, argv, "01", &options);
|
561
535
|
|
562
536
|
rb_grn_column_deconstruct(SELF(self), &column, &context,
|
563
537
|
NULL, NULL,
|
564
538
|
NULL, NULL, NULL);
|
565
539
|
|
566
|
-
rb_grn_scan_options(options,
|
567
|
-
"id", &rb_id,
|
568
|
-
NULL);
|
569
|
-
|
570
|
-
if (!NIL_P(rb_id))
|
571
|
-
id = NUM2UINT(rb_id);
|
572
|
-
|
573
540
|
return CBOOL2RVAL(grn_obj_is_locked(context, column));
|
574
541
|
}
|
575
542
|
|
@@ -742,9 +709,9 @@ rb_grn_column_with_weight_p(VALUE self)
|
|
742
709
|
}
|
743
710
|
|
744
711
|
/*
|
745
|
-
*
|
712
|
+
* Return indexes on `column` which can execute `operator`.
|
746
713
|
* @since 1.0.9
|
747
|
-
* @return [Array<index_column>]
|
714
|
+
* @return [Array<index_column>] Indexes on `column` which can execute `operator`.
|
748
715
|
* @overload indexes(operator=Groonga::Operator::MATCH)
|
749
716
|
* @param [Groonga::Operator::XXX] operator
|
750
717
|
*/
|
@@ -753,7 +720,7 @@ rb_grn_column_get_indexes (int argc, VALUE *argv, VALUE self)
|
|
753
720
|
{
|
754
721
|
grn_ctx *context;
|
755
722
|
grn_obj *column;
|
756
|
-
|
723
|
+
grn_index_datum *index_data = NULL;
|
757
724
|
int i, n_indexes;
|
758
725
|
grn_operator operator = GRN_OP_MATCH;
|
759
726
|
VALUE rb_operator, rb_indexes;
|
@@ -769,21 +736,20 @@ rb_grn_column_get_indexes (int argc, VALUE *argv, VALUE self)
|
|
769
736
|
}
|
770
737
|
|
771
738
|
rb_indexes = rb_ary_new();
|
772
|
-
n_indexes =
|
773
|
-
NULL, 0, NULL);
|
739
|
+
n_indexes = grn_column_find_index_data(context, column, operator, NULL, 0);
|
774
740
|
if (n_indexes == 0)
|
775
741
|
return rb_indexes;
|
776
742
|
|
777
|
-
|
778
|
-
n_indexes =
|
779
|
-
|
743
|
+
index_data = xmalloc(sizeof(grn_index_datum) * n_indexes);
|
744
|
+
n_indexes = grn_column_find_index_data(context, column, operator,
|
745
|
+
index_data, n_indexes);
|
780
746
|
for (i = 0; i < n_indexes; i++) {
|
781
747
|
VALUE rb_index;
|
782
|
-
rb_index = GRNOBJECT2RVAL(Qnil, context,
|
748
|
+
rb_index = GRNOBJECT2RVAL(Qnil, context, index_data[i].index, GRN_FALSE);
|
783
749
|
rb_ary_push(rb_indexes, rb_index);
|
784
|
-
grn_obj_unlink(context,
|
750
|
+
grn_obj_unlink(context, index_data[i].index);
|
785
751
|
}
|
786
|
-
xfree(
|
752
|
+
xfree(index_data);
|
787
753
|
return rb_indexes;
|
788
754
|
}
|
789
755
|
|
@@ -829,8 +795,8 @@ rb_grn_init_column (VALUE mGrn)
|
|
829
795
|
rb_define_method(rb_cGrnColumn, "select", rb_grn_column_select, -1);
|
830
796
|
rb_define_method(rb_cGrnColumn, "lock", rb_grn_column_lock, -1);
|
831
797
|
rb_define_method(rb_cGrnColumn, "unlock", rb_grn_column_unlock, -1);
|
832
|
-
rb_define_method(rb_cGrnColumn, "clear_lock", rb_grn_column_clear_lock,
|
833
|
-
rb_define_method(rb_cGrnColumn, "locked?",
|
798
|
+
rb_define_method(rb_cGrnColumn, "clear_lock", rb_grn_column_clear_lock, 0);
|
799
|
+
rb_define_method(rb_cGrnColumn, "locked?", rb_grn_column_locked_p, 0);
|
834
800
|
rb_define_method(rb_cGrnColumn, "reference?", rb_grn_column_reference_p, 0);
|
835
801
|
rb_define_method(rb_cGrnColumn, "truncate", rb_grn_column_truncate, 0);
|
836
802
|
/* deprecated: backward compatibility */
|
@@ -49,15 +49,15 @@ rb_grn_context_from_ruby_object (VALUE object)
|
|
49
49
|
RbGrnContext *rb_grn_context;
|
50
50
|
|
51
51
|
if (!RVAL2CBOOL(rb_obj_is_kind_of(object, cGrnContext))) {
|
52
|
-
rb_raise(rb_eTypeError, "not a
|
52
|
+
rb_raise(rb_eTypeError, "not a Groonga context");
|
53
53
|
}
|
54
54
|
|
55
55
|
Data_Get_Struct(object, RbGrnContext, rb_grn_context);
|
56
56
|
if (!rb_grn_context)
|
57
|
-
rb_raise(rb_eGrnError, "
|
57
|
+
rb_raise(rb_eGrnError, "Groonga context is NULL");
|
58
58
|
if (!rb_grn_context->context)
|
59
59
|
rb_raise(rb_eGrnClosed,
|
60
|
-
"can't access already closed
|
60
|
+
"can't access already closed Groonga context");
|
61
61
|
return rb_grn_context->context;
|
62
62
|
}
|
63
63
|
|
@@ -534,7 +534,7 @@ rb_grn_context_inspect (VALUE self)
|
|
534
534
|
|
535
535
|
context = SELF(self);
|
536
536
|
|
537
|
-
inspected =
|
537
|
+
inspected = rb_str_new_cstr("#<");
|
538
538
|
rb_str_concat(inspected, rb_inspect(rb_obj_class(self)));
|
539
539
|
rb_str_cat2(inspected, " ");
|
540
540
|
|
@@ -817,7 +817,7 @@ rb_grn_context_receive (VALUE self)
|
|
817
817
|
}
|
818
818
|
rb_grn_context_check(context, self);
|
819
819
|
|
820
|
-
return
|
820
|
+
return rb_ary_new_from_args(2, UINT2NUM(query_id), rb_result);
|
821
821
|
}
|
822
822
|
|
823
823
|
static const char *
|
@@ -200,13 +200,13 @@ rb_grn_database_s_create (int argc, VALUE *argv, VALUE klass)
|
|
200
200
|
grn_obj_unlink(context, old_database);
|
201
201
|
reset_floating_objects(rb_context);
|
202
202
|
database = grn_db_create(context, path, &create_args);
|
203
|
-
rb_grn_context_check(context,
|
203
|
+
rb_grn_context_check(context, rb_ary_new_from_values(argc, argv));
|
204
204
|
owner = (context->flags & GRN_CTX_PER_DB) ? GRN_FALSE : GRN_TRUE;
|
205
205
|
rb_database = GRNOBJECT2RVAL(klass, context, database, owner);
|
206
206
|
rb_iv_set(rb_database, "@context", rb_context);
|
207
207
|
if (!NIL_P(rb_context))
|
208
208
|
rb_iv_set(rb_context, "database", rb_database);
|
209
|
-
rb_grn_context_check(context,
|
209
|
+
rb_grn_context_check(context, rb_ary_new_from_values(argc, argv));
|
210
210
|
|
211
211
|
if (rb_block_given_p())
|
212
212
|
return rb_ensure(rb_yield, rb_database,
|
@@ -309,7 +309,7 @@ rb_grn_double_array_trie_s_create (int argc, VALUE *argv, VALUE klass)
|
|
309
309
|
table = grn_table_create(context, name, name_size, path,
|
310
310
|
flags, key_type, value_type);
|
311
311
|
if (!table)
|
312
|
-
rb_grn_context_check(context,
|
312
|
+
rb_grn_context_check(context, rb_ary_new_from_values(argc, argv));
|
313
313
|
rb_table = GRNOBJECT2RVAL(klass, context, table, GRN_TRUE);
|
314
314
|
|
315
315
|
if (!NIL_P(rb_default_tokenizer))
|
@@ -385,6 +385,8 @@ rb_grn_double_array_trie_search (int argc, VALUE *argv, VALUE self)
|
|
385
385
|
grn_bool search_options_is_set = GRN_FALSE;
|
386
386
|
VALUE rb_key, options, rb_result, rb_operator, rb_type;
|
387
387
|
|
388
|
+
memset(&search_options, 0, sizeof(grn_search_optarg));
|
389
|
+
|
388
390
|
rb_grn_double_array_trie_deconstruct(SELF(self), &table, &context,
|
389
391
|
&key, NULL, &domain_id, &domain,
|
390
392
|
NULL, NULL, NULL,
|
@@ -456,7 +458,7 @@ rb_grn_double_array_trie_open_grn_prefix_cursor (int argc, VALUE *argv,
|
|
456
458
|
if (!NIL_P(rb_key_bytes) && !NIL_P(rb_key_bits)) {
|
457
459
|
rb_raise(rb_eArgError,
|
458
460
|
"should not specify both :key_bytes and :key_bits once: %s",
|
459
|
-
rb_grn_inspect(
|
461
|
+
rb_grn_inspect(rb_ary_new_from_values(argc, argv)));
|
460
462
|
} else if (!NIL_P(rb_key_bytes)) {
|
461
463
|
prefix_size = NUM2UINT(rb_key_bytes);
|
462
464
|
} else if (!NIL_P(rb_key_bits)) {
|
@@ -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 Kouhei Sutou <kou@clear-code.com>
|
3
|
+
Copyright (C) 2009-2015 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
|
@@ -44,6 +44,12 @@ rb_grn_encoding_support_get_encoding (VALUE self)
|
|
44
44
|
|
45
45
|
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
46
46
|
NULL, NULL, NULL, NULL);
|
47
|
+
if (!object) {
|
48
|
+
rb_raise(rb_eGrnClosed,
|
49
|
+
"can't access already closed Groonga object: <%s>",
|
50
|
+
rb_grn_inspect(self));
|
51
|
+
}
|
52
|
+
|
47
53
|
encoding_value = grn_obj_get_info(context, object, GRN_INFO_ENCODING, NULL);
|
48
54
|
rb_grn_context_check(context, self);
|
49
55
|
|
@@ -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_cGrnEqualOperator;
|
22
|
+
|
23
|
+
/*
|
24
|
+
* Executes an equal operation.
|
25
|
+
*
|
26
|
+
* @example Executes equal operations with the default context
|
27
|
+
* Groonga::Operator::EQUAL.exec("hello", "hello") # => true
|
28
|
+
* Groonga::Operator::EQUAL.exec("hello", "Hello") # => false
|
29
|
+
*
|
30
|
+
* @example Executes equal operations with the specified context
|
31
|
+
* context = Groonga::Context.new
|
32
|
+
* Groonga::Operator::EQUAL.exec("hello", "hello",
|
33
|
+
* :context => context) # => true
|
34
|
+
* Groonga::Operator::EQUAL.exec("hello", "Hello",
|
35
|
+
* :context => context) # => false
|
36
|
+
*
|
37
|
+
* @overload exec(x, y, options={})
|
38
|
+
* @param x [::Object] The left hand side value.
|
39
|
+
* @param y [::Object] The right hand side value.
|
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 `x` equals to `y`, `false`
|
44
|
+
* otherwise.
|
45
|
+
*/
|
46
|
+
static VALUE
|
47
|
+
rb_grn_equal_operator_exec (int argc, VALUE *argv, VALUE self)
|
48
|
+
{
|
49
|
+
grn_bool equal;
|
50
|
+
VALUE rb_x;
|
51
|
+
VALUE rb_y;
|
52
|
+
VALUE rb_options;
|
53
|
+
VALUE rb_context;
|
54
|
+
grn_ctx *context;
|
55
|
+
grn_obj x;
|
56
|
+
grn_obj y;
|
57
|
+
|
58
|
+
rb_scan_args(argc, argv, "21", &rb_x, &rb_y, &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(&x);
|
66
|
+
GRN_VOID_INIT(&y);
|
67
|
+
RVAL2GRNBULK(rb_x, context, &x);
|
68
|
+
RVAL2GRNBULK(rb_y, context, &y);
|
69
|
+
equal = grn_operator_exec_equal(context, &x, &y);
|
70
|
+
GRN_OBJ_FIN(context, &x);
|
71
|
+
GRN_OBJ_FIN(context, &y);
|
72
|
+
|
73
|
+
return CBOOL2RVAL(equal);
|
74
|
+
}
|
75
|
+
|
76
|
+
void
|
77
|
+
rb_grn_init_equal_operator (VALUE mGrn)
|
78
|
+
{
|
79
|
+
rb_cGrnEqualOperator = rb_define_class_under(mGrn,
|
80
|
+
"EqualOperator",
|
81
|
+
rb_cGrnOperator);
|
82
|
+
|
83
|
+
rb_define_method(rb_cGrnEqualOperator, "exec",
|
84
|
+
rb_grn_equal_operator_exec, -1);
|
85
|
+
}
|