rroonga 6.1.3 → 7.0.2
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/doc/text/news.md +28 -0
 - data/ext/groonga/rb-grn-column.c +53 -32
 - data/ext/groonga/rb-grn-context.c +1 -1
 - data/ext/groonga/rb-grn-data-column.c +103 -0
 - data/ext/groonga/rb-grn-default-cache.c +104 -0
 - data/ext/groonga/rb-grn-index-column.c +93 -15
 - data/ext/groonga/rb-grn-inverted-index-cursor.c +269 -0
 - data/ext/groonga/rb-grn-object.c +1 -1
 - data/ext/groonga/rb-grn-plugin.c +1 -1
 - data/ext/groonga/rb-grn-table-cursor.c +1 -1
 - data/ext/groonga/rb-grn-table-key-support.c +6 -0
 - data/ext/groonga/rb-grn-table.c +0 -3
 - data/ext/groonga/rb-grn-utils.c +35 -7
 - data/ext/groonga/rb-grn.h +13 -4
 - data/ext/groonga/rb-groonga.c +2 -0
 - data/rroonga-build.rb +7 -7
 - data/test/test-data-column.rb +71 -2
 - data/test/test-default-cache.rb +43 -0
 - data/test/test-double-array-trie.rb +7 -0
 - data/test/test-fix-size-column.rb +12 -0
 - data/test/test-hash.rb +7 -0
 - data/test/test-index-column.rb +12 -0
 - data/test/test-index-cursor.rb +93 -28
 - data/test/test-patricia-trie.rb +7 -0
 - data/test/test-variable-size-column.rb +19 -0
 - metadata +63 -59
 
| 
         @@ -0,0 +1,269 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            /* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
         
     | 
| 
      
 2 
     | 
    
         
            +
            /*
         
     | 
| 
      
 3 
     | 
    
         
            +
              Copyright (C) 2017  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 
     | 
    
         
            +
            #define SELF(object) ((RbGrnInvertedIndexCursor *)DATA_PTR(object))
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            typedef struct _RbGrnInvertedIndexCursor RbGrnInvertedIndexCursor;
         
     | 
| 
      
 24 
     | 
    
         
            +
            struct _RbGrnInvertedIndexCursor
         
     | 
| 
      
 25 
     | 
    
         
            +
            {
         
     | 
| 
      
 26 
     | 
    
         
            +
                VALUE self;
         
     | 
| 
      
 27 
     | 
    
         
            +
                grn_ctx *context;
         
     | 
| 
      
 28 
     | 
    
         
            +
                grn_ii_cursor *cursor;
         
     | 
| 
      
 29 
     | 
    
         
            +
                grn_id term_id;
         
     | 
| 
      
 30 
     | 
    
         
            +
                int flags;
         
     | 
| 
      
 31 
     | 
    
         
            +
            };
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            static VALUE rb_cGrnInvertedIndexCursor;
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            static void
         
     | 
| 
      
 36 
     | 
    
         
            +
            rb_grn_inverted_index_cursor_free(void *data)
         
     | 
| 
      
 37 
     | 
    
         
            +
            {
         
     | 
| 
      
 38 
     | 
    
         
            +
                RbGrnInvertedIndexCursor *rb_grn_cursor = data;
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                if (rb_grn_cursor->context && rb_grn_cursor->cursor) {
         
     | 
| 
      
 41 
     | 
    
         
            +
                    grn_ii_cursor_close(rb_grn_cursor->context,
         
     | 
| 
      
 42 
     | 
    
         
            +
                                        rb_grn_cursor->cursor);
         
     | 
| 
      
 43 
     | 
    
         
            +
                }
         
     | 
| 
      
 44 
     | 
    
         
            +
                xfree(rb_grn_cursor);
         
     | 
| 
      
 45 
     | 
    
         
            +
            }
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            static const rb_data_type_t rb_grn_inverted_index_cursor_type = {
         
     | 
| 
      
 48 
     | 
    
         
            +
                "Groonga::InvertedIndexCursor",
         
     | 
| 
      
 49 
     | 
    
         
            +
                {
         
     | 
| 
      
 50 
     | 
    
         
            +
                    NULL,
         
     | 
| 
      
 51 
     | 
    
         
            +
                    rb_grn_inverted_index_cursor_free,
         
     | 
| 
      
 52 
     | 
    
         
            +
                    NULL,
         
     | 
| 
      
 53 
     | 
    
         
            +
                },
         
     | 
| 
      
 54 
     | 
    
         
            +
                0,
         
     | 
| 
      
 55 
     | 
    
         
            +
                0,
         
     | 
| 
      
 56 
     | 
    
         
            +
                RUBY_TYPED_FREE_IMMEDIATELY,
         
     | 
| 
      
 57 
     | 
    
         
            +
            };
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
            VALUE
         
     | 
| 
      
 60 
     | 
    
         
            +
            rb_grn_inverted_index_cursor_to_ruby_object (grn_ctx *context,
         
     | 
| 
      
 61 
     | 
    
         
            +
                                                         grn_ii_cursor *cursor,
         
     | 
| 
      
 62 
     | 
    
         
            +
                                                         grn_id term_id,
         
     | 
| 
      
 63 
     | 
    
         
            +
                                                         int flags,
         
     | 
| 
      
 64 
     | 
    
         
            +
                                                         VALUE rb_table,
         
     | 
| 
      
 65 
     | 
    
         
            +
                                                         VALUE rb_lexicon)
         
     | 
| 
      
 66 
     | 
    
         
            +
            {
         
     | 
| 
      
 67 
     | 
    
         
            +
                VALUE rb_cursor;
         
     | 
| 
      
 68 
     | 
    
         
            +
                RbGrnInvertedIndexCursor *rb_grn_cursor;
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                rb_cursor = TypedData_Make_Struct(rb_cGrnInvertedIndexCursor,
         
     | 
| 
      
 71 
     | 
    
         
            +
                                                  RbGrnInvertedIndexCursor,
         
     | 
| 
      
 72 
     | 
    
         
            +
                                                  &rb_grn_inverted_index_cursor_type,
         
     | 
| 
      
 73 
     | 
    
         
            +
                                                  rb_grn_cursor);
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                rb_grn_cursor->self = rb_cursor;
         
     | 
| 
      
 76 
     | 
    
         
            +
                rb_grn_cursor->context = context;
         
     | 
| 
      
 77 
     | 
    
         
            +
                rb_grn_cursor->cursor = cursor;
         
     | 
| 
      
 78 
     | 
    
         
            +
                rb_grn_cursor->term_id = term_id;
         
     | 
| 
      
 79 
     | 
    
         
            +
                rb_grn_cursor->flags = flags;
         
     | 
| 
      
 80 
     | 
    
         
            +
                rb_iv_set(rb_cursor, "@table", rb_table);
         
     | 
| 
      
 81 
     | 
    
         
            +
                rb_iv_set(rb_cursor, "@lexicon", rb_lexicon);
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                if (rb_grn_cursor->cursor &&
         
     | 
| 
      
 84 
     | 
    
         
            +
                    (rb_grn_cursor->flags & GRN_OBJ_WITH_POSITION)) {
         
     | 
| 
      
 85 
     | 
    
         
            +
                    grn_ii_cursor_next(context, cursor);
         
     | 
| 
      
 86 
     | 
    
         
            +
                }
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                return rb_cursor;
         
     | 
| 
      
 89 
     | 
    
         
            +
            }
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
            static VALUE
         
     | 
| 
      
 92 
     | 
    
         
            +
            next_value (VALUE rb_posting,
         
     | 
| 
      
 93 
     | 
    
         
            +
                        RbGrnInvertedIndexCursor *rb_grn_cursor,
         
     | 
| 
      
 94 
     | 
    
         
            +
                        VALUE rb_table,
         
     | 
| 
      
 95 
     | 
    
         
            +
                        VALUE rb_lexicon)
         
     | 
| 
      
 96 
     | 
    
         
            +
            {
         
     | 
| 
      
 97 
     | 
    
         
            +
                grn_ctx *context = rb_grn_cursor->context;
         
     | 
| 
      
 98 
     | 
    
         
            +
                grn_ii_cursor *cursor = rb_grn_cursor->cursor;
         
     | 
| 
      
 99 
     | 
    
         
            +
                grn_posting *posting = NULL;
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                if (rb_grn_cursor->flags & GRN_OBJ_WITH_POSITION) {
         
     | 
| 
      
 102 
     | 
    
         
            +
                    posting = grn_ii_cursor_next_pos(context, cursor);
         
     | 
| 
      
 103 
     | 
    
         
            +
                    while (!posting && grn_ii_cursor_next(context, cursor)) {
         
     | 
| 
      
 104 
     | 
    
         
            +
                        posting = grn_ii_cursor_next_pos(context, cursor);
         
     | 
| 
      
 105 
     | 
    
         
            +
                        break;
         
     | 
| 
      
 106 
     | 
    
         
            +
                    }
         
     | 
| 
      
 107 
     | 
    
         
            +
                } else {
         
     | 
| 
      
 108 
     | 
    
         
            +
                    posting = grn_ii_cursor_next(context, cursor);
         
     | 
| 
      
 109 
     | 
    
         
            +
                }
         
     | 
| 
      
 110 
     | 
    
         
            +
                if (!posting) {
         
     | 
| 
      
 111 
     | 
    
         
            +
                    return Qnil;
         
     | 
| 
      
 112 
     | 
    
         
            +
                }
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
                if (NIL_P(rb_posting)) {
         
     | 
| 
      
 115 
     | 
    
         
            +
                    return rb_grn_posting_new(posting,
         
     | 
| 
      
 116 
     | 
    
         
            +
                                              rb_grn_cursor->term_id,
         
     | 
| 
      
 117 
     | 
    
         
            +
                                              rb_table,
         
     | 
| 
      
 118 
     | 
    
         
            +
                                              rb_lexicon);
         
     | 
| 
      
 119 
     | 
    
         
            +
                } else {
         
     | 
| 
      
 120 
     | 
    
         
            +
                    rb_grn_posting_update(rb_posting,
         
     | 
| 
      
 121 
     | 
    
         
            +
                                          posting,
         
     | 
| 
      
 122 
     | 
    
         
            +
                                          rb_grn_cursor->term_id);
         
     | 
| 
      
 123 
     | 
    
         
            +
                    return rb_posting;
         
     | 
| 
      
 124 
     | 
    
         
            +
                }
         
     | 
| 
      
 125 
     | 
    
         
            +
            }
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
            static VALUE
         
     | 
| 
      
 128 
     | 
    
         
            +
            rb_grn_inverted_index_cursor_next (VALUE self)
         
     | 
| 
      
 129 
     | 
    
         
            +
            {
         
     | 
| 
      
 130 
     | 
    
         
            +
                RbGrnInvertedIndexCursor *rb_grn_cursor;
         
     | 
| 
      
 131 
     | 
    
         
            +
                VALUE rb_table;
         
     | 
| 
      
 132 
     | 
    
         
            +
                VALUE rb_lexicon;
         
     | 
| 
      
 133 
     | 
    
         
            +
                VALUE rb_posting;
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
                TypedData_Get_Struct(self,
         
     | 
| 
      
 136 
     | 
    
         
            +
                                     RbGrnInvertedIndexCursor,
         
     | 
| 
      
 137 
     | 
    
         
            +
                                     &rb_grn_inverted_index_cursor_type,
         
     | 
| 
      
 138 
     | 
    
         
            +
                                     rb_grn_cursor);
         
     | 
| 
      
 139 
     | 
    
         
            +
                if (!rb_grn_cursor->context) {
         
     | 
| 
      
 140 
     | 
    
         
            +
                    rb_raise(rb_eGrnClosed,
         
     | 
| 
      
 141 
     | 
    
         
            +
                             "can't access already closed Groonga object: %" PRIsVALUE,
         
     | 
| 
      
 142 
     | 
    
         
            +
                             self);
         
     | 
| 
      
 143 
     | 
    
         
            +
                }
         
     | 
| 
      
 144 
     | 
    
         
            +
             
     | 
| 
      
 145 
     | 
    
         
            +
                if (!rb_grn_cursor->cursor) {
         
     | 
| 
      
 146 
     | 
    
         
            +
                    return Qnil;
         
     | 
| 
      
 147 
     | 
    
         
            +
                }
         
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
      
 149 
     | 
    
         
            +
                rb_table = rb_iv_get(self, "@table");
         
     | 
| 
      
 150 
     | 
    
         
            +
                rb_lexicon = rb_iv_get(self, "@lexicon");
         
     | 
| 
      
 151 
     | 
    
         
            +
                rb_posting = next_value(Qnil, rb_grn_cursor, rb_table, rb_lexicon);
         
     | 
| 
      
 152 
     | 
    
         
            +
             
     | 
| 
      
 153 
     | 
    
         
            +
                return rb_posting;
         
     | 
| 
      
 154 
     | 
    
         
            +
             
     | 
| 
      
 155 
     | 
    
         
            +
            }
         
     | 
| 
      
 156 
     | 
    
         
            +
             
     | 
| 
      
 157 
     | 
    
         
            +
            static VALUE
         
     | 
| 
      
 158 
     | 
    
         
            +
            rb_grn_inverted_index_cursor_each (int argc, VALUE *argv, VALUE self)
         
     | 
| 
      
 159 
     | 
    
         
            +
            {
         
     | 
| 
      
 160 
     | 
    
         
            +
                RbGrnInvertedIndexCursor *rb_grn_cursor;
         
     | 
| 
      
 161 
     | 
    
         
            +
                grn_bool reuse_posting_object;
         
     | 
| 
      
 162 
     | 
    
         
            +
                VALUE rb_options;
         
     | 
| 
      
 163 
     | 
    
         
            +
                VALUE rb_reuse_posting_object;
         
     | 
| 
      
 164 
     | 
    
         
            +
                VALUE rb_table;
         
     | 
| 
      
 165 
     | 
    
         
            +
                VALUE rb_lexicon;
         
     | 
| 
      
 166 
     | 
    
         
            +
                VALUE rb_posting = Qnil;
         
     | 
| 
      
 167 
     | 
    
         
            +
             
     | 
| 
      
 168 
     | 
    
         
            +
                RETURN_ENUMERATOR(self, argc, argv);
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
      
 170 
     | 
    
         
            +
                rb_scan_args(argc, argv, "01", &rb_options);
         
     | 
| 
      
 171 
     | 
    
         
            +
             
     | 
| 
      
 172 
     | 
    
         
            +
                rb_grn_scan_options(rb_options,
         
     | 
| 
      
 173 
     | 
    
         
            +
                                    "reuse_posting_object", &rb_reuse_posting_object,
         
     | 
| 
      
 174 
     | 
    
         
            +
                                    NULL);
         
     | 
| 
      
 175 
     | 
    
         
            +
             
     | 
| 
      
 176 
     | 
    
         
            +
                TypedData_Get_Struct(self,
         
     | 
| 
      
 177 
     | 
    
         
            +
                                     RbGrnInvertedIndexCursor,
         
     | 
| 
      
 178 
     | 
    
         
            +
                                     &rb_grn_inverted_index_cursor_type,
         
     | 
| 
      
 179 
     | 
    
         
            +
                                     rb_grn_cursor);
         
     | 
| 
      
 180 
     | 
    
         
            +
                if (!rb_grn_cursor->context) {
         
     | 
| 
      
 181 
     | 
    
         
            +
                    rb_raise(rb_eGrnClosed,
         
     | 
| 
      
 182 
     | 
    
         
            +
                             "can't access already closed Groonga object: %" PRIsVALUE,
         
     | 
| 
      
 183 
     | 
    
         
            +
                             self);
         
     | 
| 
      
 184 
     | 
    
         
            +
                }
         
     | 
| 
      
 185 
     | 
    
         
            +
             
     | 
| 
      
 186 
     | 
    
         
            +
                if (!rb_grn_cursor->cursor) {
         
     | 
| 
      
 187 
     | 
    
         
            +
                    return Qnil;
         
     | 
| 
      
 188 
     | 
    
         
            +
                }
         
     | 
| 
      
 189 
     | 
    
         
            +
             
     | 
| 
      
 190 
     | 
    
         
            +
                rb_table = rb_iv_get(self, "@table");
         
     | 
| 
      
 191 
     | 
    
         
            +
                rb_lexicon = rb_iv_get(self, "@lexicon");
         
     | 
| 
      
 192 
     | 
    
         
            +
                reuse_posting_object = RVAL2CBOOL(rb_reuse_posting_object);
         
     | 
| 
      
 193 
     | 
    
         
            +
             
     | 
| 
      
 194 
     | 
    
         
            +
                if (reuse_posting_object) {
         
     | 
| 
      
 195 
     | 
    
         
            +
                    rb_posting = rb_grn_posting_new(NULL, GRN_ID_NIL, rb_table, rb_lexicon);
         
     | 
| 
      
 196 
     | 
    
         
            +
                }
         
     | 
| 
      
 197 
     | 
    
         
            +
                while (GRN_TRUE) {
         
     | 
| 
      
 198 
     | 
    
         
            +
                    if (!reuse_posting_object) {
         
     | 
| 
      
 199 
     | 
    
         
            +
                        rb_posting = Qnil;
         
     | 
| 
      
 200 
     | 
    
         
            +
                    }
         
     | 
| 
      
 201 
     | 
    
         
            +
                    rb_posting = next_value(rb_posting, rb_grn_cursor, rb_table, rb_lexicon);
         
     | 
| 
      
 202 
     | 
    
         
            +
                    if (NIL_P(rb_posting)) {
         
     | 
| 
      
 203 
     | 
    
         
            +
                        break;
         
     | 
| 
      
 204 
     | 
    
         
            +
                    }
         
     | 
| 
      
 205 
     | 
    
         
            +
                    rb_yield(rb_posting);
         
     | 
| 
      
 206 
     | 
    
         
            +
                }
         
     | 
| 
      
 207 
     | 
    
         
            +
             
     | 
| 
      
 208 
     | 
    
         
            +
                return Qnil;
         
     | 
| 
      
 209 
     | 
    
         
            +
            }
         
     | 
| 
      
 210 
     | 
    
         
            +
             
     | 
| 
      
 211 
     | 
    
         
            +
            static VALUE
         
     | 
| 
      
 212 
     | 
    
         
            +
            rb_grn_inverted_index_cursor_close (VALUE self)
         
     | 
| 
      
 213 
     | 
    
         
            +
            {
         
     | 
| 
      
 214 
     | 
    
         
            +
                RbGrnInvertedIndexCursor *rb_grn_cursor;
         
     | 
| 
      
 215 
     | 
    
         
            +
             
     | 
| 
      
 216 
     | 
    
         
            +
                TypedData_Get_Struct(self,
         
     | 
| 
      
 217 
     | 
    
         
            +
                                     RbGrnInvertedIndexCursor,
         
     | 
| 
      
 218 
     | 
    
         
            +
                                     &rb_grn_inverted_index_cursor_type,
         
     | 
| 
      
 219 
     | 
    
         
            +
                                     rb_grn_cursor);
         
     | 
| 
      
 220 
     | 
    
         
            +
                if (!rb_grn_cursor->context) {
         
     | 
| 
      
 221 
     | 
    
         
            +
                    rb_raise(rb_eGrnClosed,
         
     | 
| 
      
 222 
     | 
    
         
            +
                             "can't access already closed Groonga object: %" PRIsVALUE,
         
     | 
| 
      
 223 
     | 
    
         
            +
                             self);
         
     | 
| 
      
 224 
     | 
    
         
            +
                }
         
     | 
| 
      
 225 
     | 
    
         
            +
             
     | 
| 
      
 226 
     | 
    
         
            +
                if (rb_grn_cursor->cursor) {
         
     | 
| 
      
 227 
     | 
    
         
            +
                    grn_ii_cursor_close(rb_grn_cursor->context,
         
     | 
| 
      
 228 
     | 
    
         
            +
                                        rb_grn_cursor->cursor);
         
     | 
| 
      
 229 
     | 
    
         
            +
                }
         
     | 
| 
      
 230 
     | 
    
         
            +
                rb_grn_cursor->context = NULL;
         
     | 
| 
      
 231 
     | 
    
         
            +
                rb_grn_cursor->cursor = NULL;
         
     | 
| 
      
 232 
     | 
    
         
            +
             
     | 
| 
      
 233 
     | 
    
         
            +
                return Qnil;
         
     | 
| 
      
 234 
     | 
    
         
            +
             
     | 
| 
      
 235 
     | 
    
         
            +
            }
         
     | 
| 
      
 236 
     | 
    
         
            +
             
     | 
| 
      
 237 
     | 
    
         
            +
            static VALUE
         
     | 
| 
      
 238 
     | 
    
         
            +
            rb_grn_inverted_index_cursor_is_closed (VALUE self)
         
     | 
| 
      
 239 
     | 
    
         
            +
            {
         
     | 
| 
      
 240 
     | 
    
         
            +
                RbGrnInvertedIndexCursor *rb_grn_cursor;
         
     | 
| 
      
 241 
     | 
    
         
            +
             
     | 
| 
      
 242 
     | 
    
         
            +
                TypedData_Get_Struct(self,
         
     | 
| 
      
 243 
     | 
    
         
            +
                                     RbGrnInvertedIndexCursor,
         
     | 
| 
      
 244 
     | 
    
         
            +
                                     &rb_grn_inverted_index_cursor_type,
         
     | 
| 
      
 245 
     | 
    
         
            +
                                     rb_grn_cursor);
         
     | 
| 
      
 246 
     | 
    
         
            +
                if (rb_grn_cursor->context) {
         
     | 
| 
      
 247 
     | 
    
         
            +
                    return Qfalse;
         
     | 
| 
      
 248 
     | 
    
         
            +
                } else {
         
     | 
| 
      
 249 
     | 
    
         
            +
                    return Qtrue;
         
     | 
| 
      
 250 
     | 
    
         
            +
                }
         
     | 
| 
      
 251 
     | 
    
         
            +
             
     | 
| 
      
 252 
     | 
    
         
            +
            }
         
     | 
| 
      
 253 
     | 
    
         
            +
             
     | 
| 
      
 254 
     | 
    
         
            +
            void
         
     | 
| 
      
 255 
     | 
    
         
            +
            rb_grn_init_inverted_index_cursor (VALUE mGrn)
         
     | 
| 
      
 256 
     | 
    
         
            +
            {
         
     | 
| 
      
 257 
     | 
    
         
            +
                rb_cGrnInvertedIndexCursor =
         
     | 
| 
      
 258 
     | 
    
         
            +
                  rb_define_class_under(mGrn, "InvertedIndexCursor", rb_cData);
         
     | 
| 
      
 259 
     | 
    
         
            +
                rb_include_module(rb_cGrnInvertedIndexCursor, rb_mEnumerable);
         
     | 
| 
      
 260 
     | 
    
         
            +
             
     | 
| 
      
 261 
     | 
    
         
            +
                rb_define_method(rb_cGrnInvertedIndexCursor, "next",
         
     | 
| 
      
 262 
     | 
    
         
            +
                                 rb_grn_inverted_index_cursor_next, 0);
         
     | 
| 
      
 263 
     | 
    
         
            +
                rb_define_method(rb_cGrnInvertedIndexCursor, "each",
         
     | 
| 
      
 264 
     | 
    
         
            +
                                 rb_grn_inverted_index_cursor_each, -1);
         
     | 
| 
      
 265 
     | 
    
         
            +
                rb_define_method(rb_cGrnInvertedIndexCursor, "close",
         
     | 
| 
      
 266 
     | 
    
         
            +
                                 rb_grn_inverted_index_cursor_close, 0);
         
     | 
| 
      
 267 
     | 
    
         
            +
                rb_define_method(rb_cGrnInvertedIndexCursor, "closed?",
         
     | 
| 
      
 268 
     | 
    
         
            +
                                 rb_grn_inverted_index_cursor_is_closed, 0);
         
     | 
| 
      
 269 
     | 
    
         
            +
            }
         
     | 
    
        data/ext/groonga/rb-grn-object.c
    CHANGED
    
    | 
         @@ -1973,7 +1973,7 @@ rb_grn_object_dirty_p (VALUE self) 
     | 
|
| 
       1973 
1973 
     | 
    
         
             
            void
         
     | 
| 
       1974 
1974 
     | 
    
         
             
            rb_grn_init_object (VALUE mGrn)
         
     | 
| 
       1975 
1975 
     | 
    
         
             
            {
         
     | 
| 
       1976 
     | 
    
         
            -
                rb_cGrnObject = rb_define_class_under(mGrn, "Object",  
     | 
| 
      
 1976 
     | 
    
         
            +
                rb_cGrnObject = rb_define_class_under(mGrn, "Object", rb_cData);
         
     | 
| 
       1977 
1977 
     | 
    
         
             
                rb_define_alloc_func(rb_cGrnObject, rb_grn_object_alloc);
         
     | 
| 
       1978 
1978 
     | 
    
         | 
| 
       1979 
1979 
     | 
    
         
             
                rb_define_attr(rb_cGrnObject, "context", GRN_TRUE, GRN_FALSE);
         
     | 
    
        data/ext/groonga/rb-grn-plugin.c
    CHANGED
    
    | 
         @@ -245,7 +245,7 @@ rb_grn_plugin_s_names (int argc, VALUE *argv, VALUE klass) 
     | 
|
| 
       245 
245 
     | 
    
         
             
            void
         
     | 
| 
       246 
246 
     | 
    
         
             
            rb_grn_init_plugin (VALUE mGrn)
         
     | 
| 
       247 
247 
     | 
    
         
             
            {
         
     | 
| 
       248 
     | 
    
         
            -
                cGrnPlugin = rb_define_class_under(mGrn, "Plugin",  
     | 
| 
      
 248 
     | 
    
         
            +
                cGrnPlugin = rb_define_class_under(mGrn, "Plugin", rb_cData);
         
     | 
| 
       249 
249 
     | 
    
         
             
                rb_define_alloc_func(cGrnPlugin, rb_grn_plugin_alloc);
         
     | 
| 
       250 
250 
     | 
    
         | 
| 
       251 
251 
     | 
    
         
             
                rb_define_singleton_method(cGrnPlugin, "register",
         
     | 
| 
         @@ -277,7 +277,7 @@ rb_grn_table_cursor_each (VALUE self) 
     | 
|
| 
       277 
277 
     | 
    
         
             
            void
         
     | 
| 
       278 
278 
     | 
    
         
             
            rb_grn_init_table_cursor (VALUE mGrn)
         
     | 
| 
       279 
279 
     | 
    
         
             
            {
         
     | 
| 
       280 
     | 
    
         
            -
                rb_cGrnTableCursor = rb_define_class_under(mGrn, "TableCursor",  
     | 
| 
      
 280 
     | 
    
         
            +
                rb_cGrnTableCursor = rb_define_class_under(mGrn, "TableCursor", rb_cData);
         
     | 
| 
       281 
281 
     | 
    
         
             
                rb_define_alloc_func(rb_cGrnTableCursor, rb_grn_object_alloc);
         
     | 
| 
       282 
282 
     | 
    
         | 
| 
       283 
283 
     | 
    
         
             
                rb_include_module(rb_cGrnTableCursor, rb_mEnumerable);
         
     | 
| 
         @@ -356,7 +356,11 @@ rb_grn_table_key_support_get_key (VALUE self, VALUE rb_id) 
     | 
|
| 
       356 
356 
     | 
    
         
             
            /*
         
     | 
| 
       357 
357 
     | 
    
         
             
             * テーブルに主キーが _key_ のレコードがあるならtrueを返す。
         
     | 
| 
       358 
358 
     | 
    
         
             
             *
         
     | 
| 
      
 359 
     | 
    
         
            +
             * @overload key?(key)
         
     | 
| 
      
 360 
     | 
    
         
            +
             *    @since 7.0.0
         
     | 
| 
      
 361 
     | 
    
         
            +
             *
         
     | 
| 
       359 
362 
     | 
    
         
             
             * @overload has_key?(key)
         
     | 
| 
      
 363 
     | 
    
         
            +
             *    @deprecated Use {key?} instead.
         
     | 
| 
       360 
364 
     | 
    
         
             
             */
         
     | 
| 
       361 
365 
     | 
    
         
             
            static VALUE
         
     | 
| 
       362 
366 
     | 
    
         
             
            rb_grn_table_key_support_has_key (VALUE self, VALUE rb_key)
         
     | 
| 
         @@ -1123,6 +1127,8 @@ rb_grn_init_table_key_support (VALUE mGrn) 
     | 
|
| 
       1123 
1127 
     | 
    
         
             
                                 rb_grn_table_key_support_get_id, -1);
         
     | 
| 
       1124 
1128 
     | 
    
         
             
                rb_define_method(rb_mGrnTableKeySupport, "key",
         
     | 
| 
       1125 
1129 
     | 
    
         
             
                                 rb_grn_table_key_support_get_key, 1);
         
     | 
| 
      
 1130 
     | 
    
         
            +
                rb_define_method(rb_mGrnTableKeySupport, "key?",
         
     | 
| 
      
 1131 
     | 
    
         
            +
                                 rb_grn_table_key_support_has_key, 1);
         
     | 
| 
       1126 
1132 
     | 
    
         
             
                rb_define_method(rb_mGrnTableKeySupport, "has_key?",
         
     | 
| 
       1127 
1133 
     | 
    
         
             
                                 rb_grn_table_key_support_has_key, 1);
         
     | 
| 
       1128 
1134 
     | 
    
         | 
    
        data/ext/groonga/rb-grn-table.c
    CHANGED
    
    | 
         @@ -1377,9 +1377,6 @@ rb_grn_table_geo_sort (int argc, VALUE *argv, VALUE self) 
     | 
|
| 
       1377 
1377 
     | 
    
         
             
                    offset = NUM2INT(rb_offset);
         
     | 
| 
       1378 
1378 
     | 
    
         
             
                if (!NIL_P(rb_limit))
         
     | 
| 
       1379 
1379 
     | 
    
         
             
                    limit = NUM2INT(rb_limit);
         
     | 
| 
       1380 
     | 
    
         
            -
                /* TODO: Remove me when Groonga 5.1.0 is released. */
         
     | 
| 
       1381 
     | 
    
         
            -
                if (limit < 0)
         
     | 
| 
       1382 
     | 
    
         
            -
                    limit = grn_table_size(context, table) + limit + 1;
         
     | 
| 
       1383 
1380 
     | 
    
         | 
| 
       1384 
1381 
     | 
    
         
             
                result = grn_table_create(context, NULL, 0, NULL, GRN_TABLE_NO_KEY,
         
     | 
| 
       1385 
1382 
     | 
    
         
             
                                          NULL, table);
         
     | 
    
        data/ext/groonga/rb-grn-utils.c
    CHANGED
    
    | 
         @@ -1061,13 +1061,37 @@ rb_grn_value_to_ruby_object (grn_ctx *context, 
     | 
|
| 
       1061 
1061 
     | 
    
         | 
| 
       1062 
1062 
     | 
    
         
             
            grn_id
         
     | 
| 
       1063 
1063 
     | 
    
         
             
            rb_grn_id_from_ruby_object (VALUE object, grn_ctx *context, grn_obj *table,
         
     | 
| 
       1064 
     | 
    
         
            -
                                        VALUE  
     | 
| 
      
 1064 
     | 
    
         
            +
                                        VALUE rb_related_object)
         
     | 
| 
       1065 
1065 
     | 
    
         
             
            {
         
     | 
| 
       1066 
1066 
     | 
    
         
             
                VALUE rb_id;
         
     | 
| 
       1067 
1067 
     | 
    
         | 
| 
       1068 
1068 
     | 
    
         
             
                if (NIL_P(object))
         
     | 
| 
       1069 
1069 
     | 
    
         
             
                    return Qnil;
         
     | 
| 
       1070 
1070 
     | 
    
         | 
| 
      
 1071 
     | 
    
         
            +
                if (!RVAL2CBOOL(rb_obj_is_kind_of(object, rb_cGrnRecord)) &&
         
     | 
| 
      
 1072 
     | 
    
         
            +
                    !RVAL2CBOOL(rb_obj_is_kind_of(object, rb_cInteger))) {
         
     | 
| 
      
 1073 
     | 
    
         
            +
                    VALUE rb_record;
         
     | 
| 
      
 1074 
     | 
    
         
            +
                    if (table) {
         
     | 
| 
      
 1075 
     | 
    
         
            +
                        VALUE rb_table;
         
     | 
| 
      
 1076 
     | 
    
         
            +
                        rb_table = GRNOBJECT2RVAL(Qnil, context, table, GRN_FALSE);
         
     | 
| 
      
 1077 
     | 
    
         
            +
                        if (!NIL_P(rb_table) &&
         
     | 
| 
      
 1078 
     | 
    
         
            +
                            RVAL2CBOOL(rb_obj_is_kind_of(rb_table,
         
     | 
| 
      
 1079 
     | 
    
         
            +
                                                         rb_mGrnTableKeySupport))) {
         
     | 
| 
      
 1080 
     | 
    
         
            +
                            rb_record = rb_funcall(rb_table, rb_intern("[]"), 1, object);
         
     | 
| 
      
 1081 
     | 
    
         
            +
                            if (NIL_P(rb_record)) {
         
     | 
| 
      
 1082 
     | 
    
         
            +
                                rb_raise(rb_eArgError,
         
     | 
| 
      
 1083 
     | 
    
         
            +
                                         "nonexistent key: %" PRIsVALUE
         
     | 
| 
      
 1084 
     | 
    
         
            +
                                         ": %" PRIsVALUE
         
     | 
| 
      
 1085 
     | 
    
         
            +
                                         ": %" PRIsVALUE,
         
     | 
| 
      
 1086 
     | 
    
         
            +
                                         object,
         
     | 
| 
      
 1087 
     | 
    
         
            +
                                         rb_table,
         
     | 
| 
      
 1088 
     | 
    
         
            +
                                         rb_related_object);
         
     | 
| 
      
 1089 
     | 
    
         
            +
                            }
         
     | 
| 
      
 1090 
     | 
    
         
            +
                            object = rb_record;
         
     | 
| 
      
 1091 
     | 
    
         
            +
                        }
         
     | 
| 
      
 1092 
     | 
    
         
            +
                    }
         
     | 
| 
      
 1093 
     | 
    
         
            +
                }
         
     | 
| 
      
 1094 
     | 
    
         
            +
             
     | 
| 
       1071 
1095 
     | 
    
         
             
                if (RVAL2CBOOL(rb_obj_is_kind_of(object, rb_cGrnRecord))) {
         
     | 
| 
       1072 
1096 
     | 
    
         
             
                    VALUE rb_table;
         
     | 
| 
       1073 
1097 
     | 
    
         
             
                    rb_table = rb_funcall(object, rb_intern("table"), 0);
         
     | 
| 
         @@ -1077,9 +1101,12 @@ rb_grn_id_from_ruby_object (VALUE object, grn_ctx *context, grn_obj *table, 
     | 
|
| 
       1077 
1101 
     | 
    
         
             
                        rb_expected_table =
         
     | 
| 
       1078 
1102 
     | 
    
         
             
                            GRNOBJECT2RVAL(Qnil, context, table, GRN_FALSE);
         
     | 
| 
       1079 
1103 
     | 
    
         
             
                        rb_raise(rb_eGrnError,
         
     | 
| 
       1080 
     | 
    
         
            -
                                 "wrong table: expected  
     | 
| 
       1081 
     | 
    
         
            -
                                  
     | 
| 
       1082 
     | 
    
         
            -
                                  
     | 
| 
      
 1104 
     | 
    
         
            +
                                 "wrong table: expected %" PRIsVALUE
         
     | 
| 
      
 1105 
     | 
    
         
            +
                                 ": actual %" PRIsVALUE
         
     | 
| 
      
 1106 
     | 
    
         
            +
                                 ": %" PRIsVALUE,
         
     | 
| 
      
 1107 
     | 
    
         
            +
                                 rb_expected_table,
         
     | 
| 
      
 1108 
     | 
    
         
            +
                                 rb_table,
         
     | 
| 
      
 1109 
     | 
    
         
            +
                                 rb_related_object);
         
     | 
| 
       1083 
1110 
     | 
    
         
             
                    }
         
     | 
| 
       1084 
1111 
     | 
    
         
             
                    rb_id = rb_funcall(object, rb_intern("id"), 0);
         
     | 
| 
       1085 
1112 
     | 
    
         
             
                } else {
         
     | 
| 
         @@ -1088,9 +1115,10 @@ rb_grn_id_from_ruby_object (VALUE object, grn_ctx *context, grn_obj *table, 
     | 
|
| 
       1088 
1115 
     | 
    
         | 
| 
       1089 
1116 
     | 
    
         
             
                if (!RVAL2CBOOL(rb_obj_is_kind_of(rb_id, rb_cInteger)))
         
     | 
| 
       1090 
1117 
     | 
    
         
             
                    rb_raise(rb_eGrnError,
         
     | 
| 
       1091 
     | 
    
         
            -
                             "should be unsigned integer or Groogna::Record:  
     | 
| 
       1092 
     | 
    
         
            -
                              
     | 
| 
       1093 
     | 
    
         
            -
                              
     | 
| 
      
 1118 
     | 
    
         
            +
                             "should be unsigned integer or Groogna::Record: %" PRIsVALUE
         
     | 
| 
      
 1119 
     | 
    
         
            +
                             ": %" PRIsVALUE,
         
     | 
| 
      
 1120 
     | 
    
         
            +
                             object,
         
     | 
| 
      
 1121 
     | 
    
         
            +
                             rb_related_object);
         
     | 
| 
       1094 
1122 
     | 
    
         | 
| 
       1095 
1123 
     | 
    
         
             
                return NUM2UINT(rb_id);
         
     | 
| 
       1096 
1124 
     | 
    
         
             
            }
         
     | 
    
        data/ext/groonga/rb-grn.h
    CHANGED
    
    | 
         @@ -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- 
     | 
| 
      
 3 
     | 
    
         
            +
              Copyright (C) 2009-2017  Kouhei Sutou <kou@clear-code.com>
         
     | 
| 
       4 
4 
     | 
    
         
             
              Copyright (C) 2015-2017  Masafumi Yokoyama <yokoyama@clear-code.com>
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
              This library is free software; you can redistribute it and/or
         
     | 
| 
         @@ -97,9 +97,9 @@ RB_GRN_BEGIN_DECLS 
     | 
|
| 
       97 
97 
     | 
    
         
             
            #  define debug(...)
         
     | 
| 
       98 
98 
     | 
    
         
             
            #endif
         
     | 
| 
       99 
99 
     | 
    
         | 
| 
       100 
     | 
    
         
            -
            #define RB_GRN_MAJOR_VERSION  
     | 
| 
       101 
     | 
    
         
            -
            #define RB_GRN_MINOR_VERSION  
     | 
| 
       102 
     | 
    
         
            -
            #define RB_GRN_MICRO_VERSION  
     | 
| 
      
 100 
     | 
    
         
            +
            #define RB_GRN_MAJOR_VERSION 7
         
     | 
| 
      
 101 
     | 
    
         
            +
            #define RB_GRN_MINOR_VERSION 0
         
     | 
| 
      
 102 
     | 
    
         
            +
            #define RB_GRN_MICRO_VERSION 2
         
     | 
| 
       103 
103 
     | 
    
         | 
| 
       104 
104 
     | 
    
         
             
            #define RB_GRN_OBJECT(object) ((RbGrnObject *)(object))
         
     | 
| 
       105 
105 
     | 
    
         
             
            #define RB_GRN_NAMED_OBJECT(object) ((RbGrnNamedObject *)(object))
         
     | 
| 
         @@ -336,6 +336,7 @@ void           rb_grn_init_fix_size_column          (VALUE mGrn); 
     | 
|
| 
       336 
336 
     | 
    
         
             
            void           rb_grn_init_variable_size_column     (VALUE mGrn);
         
     | 
| 
       337 
337 
     | 
    
         
             
            void           rb_grn_init_index_column             (VALUE mGrn);
         
     | 
| 
       338 
338 
     | 
    
         
             
            void           rb_grn_init_index_cursor             (VALUE mGrn);
         
     | 
| 
      
 339 
     | 
    
         
            +
            void           rb_grn_init_inverted_index_cursor    (VALUE mGrn);
         
     | 
| 
       339 
340 
     | 
    
         
             
            void           rb_grn_init_posting                  (VALUE mGrn);
         
     | 
| 
       340 
341 
     | 
    
         
             
            void           rb_grn_init_accessor                 (VALUE mGrn);
         
     | 
| 
       341 
342 
     | 
    
         
             
            void           rb_grn_init_geo_point                (VALUE mGrn);
         
     | 
| 
         @@ -367,6 +368,7 @@ void           rb_grn_init_request_timer            (VALUE mGrn); 
     | 
|
| 
       367 
368 
     | 
    
         
             
            void           rb_grn_init_request_timer_id         (VALUE mGrn);
         
     | 
| 
       368 
369 
     | 
    
         
             
            void           rb_grn_init_id                       (VALUE mGrn);
         
     | 
| 
       369 
370 
     | 
    
         
             
            void           rb_grn_init_name                     (VALUE mGrn);
         
     | 
| 
      
 371 
     | 
    
         
            +
            void           rb_grn_init_default_cache            (VALUE mGrn);
         
     | 
| 
       370 
372 
     | 
    
         | 
| 
       371 
373 
     | 
    
         
             
            VALUE          rb_grn_rc_to_exception               (grn_rc rc);
         
     | 
| 
       372 
374 
     | 
    
         
             
            void           rb_grn_rc_check                      (grn_rc rc,
         
     | 
| 
         @@ -825,6 +827,13 @@ VALUE          rb_grn_index_cursor_to_ruby_object   (grn_ctx *context, 
     | 
|
| 
       825 
827 
     | 
    
         
             
                                                                 VALUE rb_table,
         
     | 
| 
       826 
828 
     | 
    
         
             
                                                                 VALUE rb_lexicon,
         
     | 
| 
       827 
829 
     | 
    
         
             
                                                                 grn_bool owner);
         
     | 
| 
      
 830 
     | 
    
         
            +
            VALUE          rb_grn_inverted_index_cursor_to_ruby_object
         
     | 
| 
      
 831 
     | 
    
         
            +
                                                                (grn_ctx *context,
         
     | 
| 
      
 832 
     | 
    
         
            +
                                                                 grn_ii_cursor *cursor,
         
     | 
| 
      
 833 
     | 
    
         
            +
                                                                 grn_id term_id,
         
     | 
| 
      
 834 
     | 
    
         
            +
                                                                 int flags,
         
     | 
| 
      
 835 
     | 
    
         
            +
                                                                 VALUE rb_table,
         
     | 
| 
      
 836 
     | 
    
         
            +
                                                                 VALUE rb_lexicon);
         
     | 
| 
       828 
837 
     | 
    
         | 
| 
       829 
838 
     | 
    
         
             
            grn_operator   rb_grn_operator_from_ruby_object     (VALUE object);
         
     | 
| 
       830 
839 
     | 
    
         
             
            grn_operator   rb_grn_set_operator_from_ruby_object (VALUE object);
         
     | 
    
        data/ext/groonga/rb-groonga.c
    CHANGED
    
    | 
         @@ -229,6 +229,7 @@ Init_groonga (void) 
     | 
|
| 
       229 
229 
     | 
    
         
             
                rb_grn_init_table(mGrn);
         
     | 
| 
       230 
230 
     | 
    
         
             
                rb_grn_init_table_cursor(mGrn);
         
     | 
| 
       231 
231 
     | 
    
         
             
                rb_grn_init_index_cursor(mGrn);
         
     | 
| 
      
 232 
     | 
    
         
            +
                rb_grn_init_inverted_index_cursor(mGrn);
         
     | 
| 
       232 
233 
     | 
    
         
             
                rb_grn_init_posting(mGrn);
         
     | 
| 
       233 
234 
     | 
    
         
             
                rb_grn_init_type(mGrn);
         
     | 
| 
       234 
235 
     | 
    
         
             
                rb_grn_init_procedure(mGrn);
         
     | 
| 
         @@ -255,4 +256,5 @@ Init_groonga (void) 
     | 
|
| 
       255 
256 
     | 
    
         
             
                rb_grn_init_request_timer_id(mGrn);
         
     | 
| 
       256 
257 
     | 
    
         
             
                rb_grn_init_id(mGrn);
         
     | 
| 
       257 
258 
     | 
    
         
             
                rb_grn_init_name(mGrn);
         
     | 
| 
      
 259 
     | 
    
         
            +
                rb_grn_init_default_cache(mGrn);
         
     | 
| 
       258 
260 
     | 
    
         
             
            }
         
     |