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
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
|
+
}
|