[Groonga-commit] ranguba/rroonga at b2ee6b3 [bind-grn_obj_reindex] Add Groonga::FixSizeColumn#reindex to bind grn_obj_reindex()

Back to archive index

Masafumi Yokoyama null+****@clear*****
Sun Jan 10 15:22:16 JST 2016


Masafumi Yokoyama	2016-01-10 15:22:16 +0900 (Sun, 10 Jan 2016)

  New Revision: b2ee6b32f2e502d3b3ad67dd7576e582d163f06b
  https://github.com/ranguba/rroonga/commit/b2ee6b32f2e502d3b3ad67dd7576e582d163f06b

  Message:
    Add Groonga::FixSizeColumn#reindex to bind grn_obj_reindex()
    
    GitHub: #110

  Modified files:
    ext/groonga/rb-grn-fix-size-column.c
    test/test-fix-size-column.rb

  Modified: ext/groonga/rb-grn-fix-size-column.c (+76 -0)
===================================================================
--- ext/groonga/rb-grn-fix-size-column.c    2016-01-06 19:34:07 +0900 (f6ff5fb)
+++ ext/groonga/rb-grn-fix-size-column.c    2016-01-10 15:22:16 +0900 (16ea266)
@@ -1,6 +1,7 @@
 /* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
 /*
   Copyright (C) 2009-2010  Kouhei Sutou <kou �� clear-code.com>
+  Copyright (C) 2016  Masafumi Yokoyama <yokoyama �� clear-code.com>
 
   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
@@ -141,6 +142,78 @@ rb_grn_fix_size_column_decrement (int argc, VALUE *argv, VALUE self)
     return rb_grn_fix_size_column_integer_set(argc, argv, self, GRN_OBJ_DECR);
 }
 
+/*
+ * Recreates all index columns for the column.
+ *
+ * This method is useful when you have any broken index columns for
+ * the column. You don't need to specify each index column. But this
+ * method spends more time rather than you specify only reindex
+ * needed index columns.
+ *
+ * @example How to recreate all index columns for the column
+ *   Groonga::Schema.define do |schema|
+ *     schema.create_table("Users") do |table|
+ *       table.integer32("age")
+ *       table.integer32("score")
+ *     end
+ *
+ *     schema.create_table("Numbers",
+ *                         :type => :patricia_trie,
+ *                         :key_type => :integer32) do |table|
+ *       table.index("Users.age")
+ *       table.index("Users.score")
+ *     end
+ *
+ *     schema.create_table("Ages",
+ *                         :type => :patricia_trie,
+ *                         :key_type => :integer32) do |table|
+ *       table.index("Users.age")
+ *     end
+ *
+ *     schema.create_table("Scores",
+ *                         :type => :patricia_trie,
+ *                         :key_type => :integer32) do |table|
+ *       table.index("Users.score")
+ *     end
+ *   end
+ *
+ *   Groonga["Users.age"].reindex
+ *   # They are called:
+ *   #   Groonga["Numbers.Users_age"].reindex
+ *   #   Groonga["Ages.Users_age"].reindex
+ *   #
+ *   # They aren't called:
+ *   #   Groonga["Numbers.Users_score"].reindex
+ *   #   Groonga["Scores.Users_score"].reindex
+ *
+ * @overload reindex
+ *   @return [void]
+ *
+ * @see Groonga::Database#reindex
+ * @see Groonga::Table#reindex
+ * @see Groonga::VariableSizeColumn#reindex
+ * @see Groonga::IndexColumn#reindex
+ *
+ * @since 5.1.1
+ */
+static VALUE
+rb_grn_fix_size_column_reindex (VALUE self)
+{
+    grn_rc rc;
+    grn_ctx *context;
+    grn_obj *column;
+
+    rb_grn_column_deconstruct(SELF(self), &column, &context,
+                              NULL, NULL,
+                              NULL, NULL, NULL);
+
+    rc = grn_obj_reindex(context, column);
+    rb_grn_context_check(context, self);
+    rb_grn_rc_check(rc, self);
+
+    return Qnil;
+}
+
 void
 rb_grn_init_fix_size_column (VALUE mGrn)
 {
@@ -156,4 +229,7 @@ rb_grn_init_fix_size_column (VALUE mGrn)
                      rb_grn_fix_size_column_increment, -1);
     rb_define_method(rb_cGrnFixSizeColumn, "decrement!",
                      rb_grn_fix_size_column_decrement, -1);
+
+    rb_define_method(rb_cGrnFixSizeColumn, "reindex",
+                     rb_grn_fix_size_column_reindex, 0);
 }

  Modified: test/test-fix-size-column.rb (+34 -0)
===================================================================
--- test/test-fix-size-column.rb    2016-01-06 19:34:07 +0900 (de34071)
+++ test/test-fix-size-column.rb    2016-01-10 15:22:16 +0900 (be7a6ce)
@@ -1,4 +1,5 @@
 # Copyright (C) 2009-2014  Kouhei Sutou <kou �� clear-code.com>
+# Copyright (C) 2016  Masafumi Yokoyama <yokoyama �� clear-code.com>
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -20,6 +21,39 @@ class FixSizeColumnTest < Test::Unit::TestCase
     setup_database
   end
 
+  def test_reindex
+    Groonga::Schema.define do |schema|
+      schema.create_table("Users", :type => :hash) do |table|
+        table.integer32("age")
+      end
+      schema.create_table("Ages",
+                          :type => :patricia_trie,
+                          :key_type => :integer32) do |table|
+        table.index("Users.age")
+      end
+    end
+
+    users = context["Users"]
+    users.add("Alice", :age => 16)
+    users.add("Bob", :age => 29)
+
+    ages = context["Ages"]
+    ages.delete(29)
+
+    assert_equal([
+                   16,
+                 ],
+                 ages.collect(&:_key).sort)
+
+    context["Users.age"].reindex
+
+    assert_equal([
+                   16,
+                   29,
+                 ],
+                 ages.collect(&:_key).sort)
+  end
+
   class OperationTest < self
     def setup
       super
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index