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.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -0
  3. data/Rakefile +1 -10
  4. data/ext/groonga/extconf.rb +3 -1
  5. data/ext/groonga/rb-grn-array.c +1 -1
  6. data/ext/groonga/rb-grn-column.c +33 -67
  7. data/ext/groonga/rb-grn-context.c +5 -5
  8. data/ext/groonga/rb-grn-database.c +2 -2
  9. data/ext/groonga/rb-grn-double-array-trie.c +4 -2
  10. data/ext/groonga/rb-grn-encoding-support.c +7 -1
  11. data/ext/groonga/rb-grn-equal-operator.c +85 -0
  12. data/ext/groonga/rb-grn-exception.c +17 -0
  13. data/ext/groonga/rb-grn-expression.c +85 -43
  14. data/ext/groonga/rb-grn-greater-equal-operator.c +88 -0
  15. data/ext/groonga/rb-grn-greater-operator.c +85 -0
  16. data/ext/groonga/rb-grn-hash.c +1 -1
  17. data/ext/groonga/rb-grn-index-column.c +150 -11
  18. data/ext/groonga/rb-grn-less-equal-operator.c +88 -0
  19. data/ext/groonga/rb-grn-less-operator.c +85 -0
  20. data/ext/groonga/rb-grn-logger.c +5 -5
  21. data/ext/groonga/rb-grn-match-operator.c +86 -0
  22. data/ext/groonga/rb-grn-normalizer.c +8 -1
  23. data/ext/groonga/rb-grn-not-equal-operator.c +85 -0
  24. data/ext/groonga/rb-grn-object.c +170 -36
  25. data/ext/groonga/rb-grn-operator.c +395 -172
  26. data/ext/groonga/rb-grn-patricia-trie.c +10 -8
  27. data/ext/groonga/rb-grn-plugin.c +51 -3
  28. data/ext/groonga/rb-grn-prefix-operator.c +86 -0
  29. data/ext/groonga/rb-grn-procedure-type.c +4 -0
  30. data/ext/groonga/rb-grn-query-logger.c +4 -4
  31. data/ext/groonga/rb-grn-regexp-operator.c +85 -0
  32. data/ext/groonga/rb-grn-snippet.c +1 -1
  33. data/ext/groonga/rb-grn-table-key-support.c +9 -5
  34. data/ext/groonga/rb-grn-table.c +52 -66
  35. data/ext/groonga/rb-grn-type.c +1 -1
  36. data/ext/groonga/rb-grn-utils.c +22 -3
  37. data/ext/groonga/rb-grn.h +31 -4
  38. data/ext/groonga/rb-groonga.c +9 -9
  39. data/lib/groonga/context.rb +31 -0
  40. data/lib/groonga/expression-builder.rb +14 -1
  41. data/lib/groonga/record.rb +10 -8
  42. data/lib/groonga/schema.rb +3 -1
  43. data/rroonga-build.rb +2 -2
  44. data/rroonga.gemspec +3 -3
  45. data/test/groonga-test-utils.rb +4 -0
  46. data/test/test-column.rb +28 -26
  47. data/test/test-exception.rb +1 -0
  48. data/test/test-expression-builder.rb +83 -1
  49. data/test/test-expression.rb +80 -48
  50. data/test/test-index-column.rb +102 -29
  51. data/test/test-normalizer.rb +35 -29
  52. data/test/test-operator.rb +214 -0
  53. data/test/test-plugin.rb +24 -6
  54. data/test/test-procedure.rb +29 -0
  55. data/test/test-schema-type.rb +14 -0
  56. data/test/test-table-select-mecab.rb +1 -4
  57. data/test/test-table.rb +7 -0
  58. data/test/test-token-regexp.rb +30 -0
  59. data/test/test-type.rb +24 -0
  60. metadata +61 -49
  61. data/doc/text/news.textile +0 -1217
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e080d48d06e47c3504eef74495e62193e30b3ff8
4
- data.tar.gz: bd3b0cd6fe3b2a26e550d9c7b8dfc16e786710c3
3
+ metadata.gz: f9abb0782118ae8bf3bc7ae7fd91b2947d23568f
4
+ data.tar.gz: d4cd06feff63ea165f725fcc667de0d6e35d7ed3
5
5
  SHA512:
6
- metadata.gz: b5c5eb1bf9999062382965a37ee20dd8dcdfffd9afd50516c8a1882165f41231602c6ed1c80efab9fbaa97272d8b2a17aa07db599d7c339621e6285cbf8e6327
7
- data.tar.gz: 77a6604d8fd4c3831a2ee42016c1e25a8273623812d9a8582830458163f08a6ec735fe5a64af064b7a67b3150bfa429d3b0212d1decc719612390fadffd1c318
6
+ metadata.gz: a537e4dab40a080c59a801492b55b0aa103734cd3103ae616dceecdde3fd9fdd8b7ef400c67962854dfe4cba8685ef4ea24431e0eade2b7df7eb8360d57ea840
7
+ data.tar.gz: 2cf053bf2f30202391d013839f394d344280ef5666abac6d75cb4564043977b965f55a8320bd29cda9cccdf19eec0f96c34edb35c870121322f080bf6aacefb5
data/.yardopts CHANGED
@@ -1,5 +1,6 @@
1
1
  --output-dir doc/reference/en
2
2
  --markup markdown
3
+ --markup-provider kramdown
3
4
  lib/**/*.rb
4
5
  ext/**/*.c
5
6
  -
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8; mode: ruby -*-
2
2
  #
3
- # Copyright (C) 2009-2012 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
@@ -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
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  #
3
- # Copyright (C) 2009-2014 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
@@ -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
@@ -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, rb_ary_new4(argc, argv));
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);
@@ -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-2014 Kouhei Sutou <kou@clear-code.com>
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
- * bc. !!!ruby
198
+ * @example Shows texts around "Groonga"
199
199
  * results = description_column.select do |column|
200
- * column =~ "groonga"
200
+ * column =~ "Groonga"
201
201
  * end
202
202
  * snippet = results.expression.snippet([["<em>", "</em>"]])
203
203
  * results.each do |record|
204
- * puts "#{record['name']}の説明文の中で「groonga」が含まれる部分"
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
- * <pre>
215
- * !!!text
216
- * rroongaの説明文の中で「groonga」が含まれる部分
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(rb_ary_new4(argc, argv)));
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
- * _column_ のロックを強制的に解除する。
508
- * @overload clear_lock(options={})
509
- * @param [::Hash] options 利用可能なオプションは以下の通り。
510
- * @option options :id
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 (int argc, VALUE *argv, VALUE self)
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
- * _column_ がロックされていれば +true+ を返す。
544
- * @overload locked?(options={})
545
- * @param [::Hash] options 利用可能なオプションは以下の通り。
546
- * @option options :id
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
- rb_grn_column_is_locked (int argc, VALUE *argv, VALUE self)
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
- * _operator_ を実行できる _column_ のインデックスを返す。
712
+ * Return indexes on `column` which can execute `operator`.
746
713
  * @since 1.0.9
747
- * @return [Array<index_column>] _operator_ を実行できる _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
- grn_obj **indexes = NULL;
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 = grn_column_index(context, column, operator,
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
- indexes = xmalloc(sizeof(grn_obj *) * n_indexes);
778
- n_indexes = grn_column_index(context, column, operator,
779
- indexes, n_indexes, NULL);
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, indexes[i], GRN_FALSE);
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, indexes[i]);
750
+ grn_obj_unlink(context, index_data[i].index);
785
751
  }
786
- xfree(indexes);
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, -1);
833
- rb_define_method(rb_cGrnColumn, "locked?", rb_grn_column_is_locked, -1);
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 groonga context");
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, "groonga context is NULL");
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 groonga context");
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 = rb_str_new2("#<");
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 rb_ary_new3(2, UINT2NUM(query_id), rb_result);
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, rb_ary_new4(argc, argv));
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, rb_ary_new4(argc, argv));
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, rb_ary_new4(argc, argv));
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(rb_ary_new4(argc, argv)));
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
+ }