rroonga 5.0.0 → 5.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
+ }