rroonga 6.0.0 → 6.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 +38 -1
- data/ext/groonga/extconf.rb +14 -1
- data/ext/groonga/rb-grn-array.c +1 -1
- data/ext/groonga/rb-grn-double-array-trie.c +1 -1
- data/ext/groonga/rb-grn-exception.c +18 -1
- data/ext/groonga/rb-grn-expression.c +0 -8
- data/ext/groonga/rb-grn-hash.c +15 -3
- data/ext/groonga/rb-grn-logger.c +22 -22
- data/ext/groonga/rb-grn-object.c +28 -6
- data/ext/groonga/rb-grn-patricia-trie.c +1 -1
- data/ext/groonga/rb-grn-request-canceler.c +164 -0
- data/ext/groonga/rb-grn-request-timer-id.c +64 -0
- data/ext/groonga/rb-grn-request-timer.c +155 -0
- data/ext/groonga/rb-grn-type.c +43 -1
- data/ext/groonga/rb-grn.h +17 -5
- data/ext/groonga/rb-groonga.c +3 -0
- data/lib/groonga/expression-builder.rb +4 -13
- data/rroonga-build.rb +3 -3
- data/rroonga.gemspec +1 -2
- data/test/run-test.rb +2 -2
- data/test/test-expression-builder.rb +13 -1
- data/test/test-hash.rb +22 -3
- data/test/test-request-canceler.rb +46 -0
- data/test/test-request-timer.rb +40 -0
- data/test/test-table.rb +43 -7
- data/test/test-type.rb +104 -2
- metadata +59 -66
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 475b1c66414213ee96bd581c7de7a6689abf3863
         | 
| 4 | 
            +
              data.tar.gz: bec353bd58e2ab048f379cd73a33be130690242e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: b091a21fe716b530d6c6d3d044fe164efe746665a4a0ef106a24cd4c1ffcc0c78dc4029edc1e755cade63286aa890f49654840c3a2aee67ce742a9d58a843095
         | 
| 7 | 
            +
              data.tar.gz: 8876710a8d73dc06b1255800cd0b67203d74bdfe525c5b24c767126e79d4102aaa4d1acba4f0bf81012bb8bfb762466dbfa1488fc73fe7303fa62f0b9bbdeac9
         | 
    
        data/doc/text/news.md
    CHANGED
    
    | @@ -1,5 +1,42 @@ | |
| 1 1 | 
             
            # NEWS
         | 
| 2 2 |  | 
| 3 | 
            +
            ## 6.0.2 2016-05-18 {#version-6-0-2}
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            ### Improvements
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              * Supported Groonga 6.0.2. Groonga 6.0.1 or older aren't supported.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              * {Groonga::Table#select}: Supported nested array as conditions.
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              * Supported HTTP proxy with authentication on install.
         | 
| 12 | 
            +
                [GitHub#129] [Patch by ngram]
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              * {Groonga::Cancel}: Added a new error class.
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              * {Groonga::Table#select}: Supported passing Hash as function argument.
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              * {Groonga::Hash.create}: Added `:key_large` option to create hash
         | 
| 19 | 
            +
                table that supports 1TiB total key size.
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              * {Groonga::Type#text_family?}: Added a new predicate that returns
         | 
| 22 | 
            +
                `true` for `ShortText`, `Text` and `LongText` types.
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              * {Groonga::Type#number_family?}: Added a new predicate that returns
         | 
| 25 | 
            +
                `true` for `UInt8`, `Int8`, ..., `UInt64`, `Int64` and `Float`
         | 
| 26 | 
            +
                types.
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              * {Groonga::Type#builtin?}: Added a new predicate that returns
         | 
| 29 | 
            +
                `true` for builtin types such as `Int32`.
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              * {Groonga::Object#remove}: Added `:dependent` option to remove all
         | 
| 32 | 
            +
                tables and columns that depend on the object.
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              * {Groonga::RequestCanceler}: Added an interface that cancels one or
         | 
| 35 | 
            +
                more requests.
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              * {Groonga::RequestTimer}: Added an interface that provides request
         | 
| 38 | 
            +
                timeout feature.
         | 
| 39 | 
            +
             | 
| 3 40 | 
             
            ## 6.0.0: 2016-03-06 {#version-6-0-0}
         | 
| 4 41 |  | 
| 5 42 | 
             
            ### Improvements
         | 
| @@ -22,7 +59,7 @@ | |
| 22 59 | 
             
                as number object. The number object was always treated as ID not
         | 
| 23 60 | 
             
                key.
         | 
| 24 61 |  | 
| 25 | 
            -
                It's backward  | 
| 62 | 
            +
                It's backward incompatible change but we introduced the
         | 
| 26 63 | 
             
                change. Because we marked this behavior as a bug.
         | 
| 27 64 |  | 
| 28 65 | 
             
              * Supported `require "rroonga"` for `Bundler.require`.
         | 
    
        data/ext/groonga/extconf.rb
    CHANGED
    
    | @@ -21,6 +21,7 @@ require "mkmf" | |
| 21 21 | 
             
            require "fileutils"
         | 
| 22 22 | 
             
            require "shellwords"
         | 
| 23 23 | 
             
            require "open-uri"
         | 
| 24 | 
            +
            require "uri"
         | 
| 24 25 |  | 
| 25 26 | 
             
            require "pkg-config"
         | 
| 26 27 |  | 
| @@ -83,7 +84,19 @@ def download(url) | |
| 83 84 | 
             
              if File.exist?(base_name)
         | 
| 84 85 | 
             
                message(" skip (use downloaded file)\n")
         | 
| 85 86 | 
             
              else
         | 
| 86 | 
            -
                 | 
| 87 | 
            +
                options = {}
         | 
| 88 | 
            +
                proxy_env = ENV["http_proxy"]
         | 
| 89 | 
            +
                if proxy_env
         | 
| 90 | 
            +
                  proxy_url = URI.parse(proxy_env)
         | 
| 91 | 
            +
                  if proxy_url.user
         | 
| 92 | 
            +
                    options[:proxy_http_basic_authentication] = [
         | 
| 93 | 
            +
                      proxy_url,
         | 
| 94 | 
            +
                      proxy_url.user,
         | 
| 95 | 
            +
                      proxy_url.password,
         | 
| 96 | 
            +
                    ]
         | 
| 97 | 
            +
                  end
         | 
| 98 | 
            +
                end
         | 
| 99 | 
            +
                open(url, "rb", options) do |input|
         | 
| 87 100 | 
             
                  File.open(base_name, "wb") do |output|
         | 
| 88 101 | 
             
                    while (buffer = input.read(1024))
         | 
| 89 102 | 
             
                      output.print(buffer)
         | 
    
        data/ext/groonga/rb-grn-array.c
    CHANGED
    
    | @@ -90,7 +90,7 @@ rb_grn_array_s_create (int argc, VALUE *argv, VALUE klass) | |
| 90 90 | 
             
                grn_obj *value_type = NULL, *table;
         | 
| 91 91 | 
             
                const char *name = NULL, *path = NULL;
         | 
| 92 92 | 
             
                unsigned name_size = 0;
         | 
| 93 | 
            -
                 | 
| 93 | 
            +
                grn_table_flags flags = GRN_OBJ_TABLE_NO_KEY;
         | 
| 94 94 | 
             
                VALUE rb_table;
         | 
| 95 95 | 
             
                VALUE options, rb_context, rb_name, rb_path, rb_persistent;
         | 
| 96 96 | 
             
                VALUE rb_value_type, rb_sub_records;
         | 
| @@ -245,7 +245,7 @@ rb_grn_double_array_trie_s_create (int argc, VALUE *argv, VALUE klass) | |
| 245 245 | 
             
                grn_obj *key_type = NULL, *value_type = NULL, *table;
         | 
| 246 246 | 
             
                const char *name = NULL, *path = NULL;
         | 
| 247 247 | 
             
                unsigned name_size = 0;
         | 
| 248 | 
            -
                 | 
| 248 | 
            +
                grn_table_flags flags = GRN_OBJ_TABLE_DAT_KEY;
         | 
| 249 249 | 
             
                VALUE rb_table;
         | 
| 250 250 | 
             
                VALUE options, rb_context, rb_name, rb_path, rb_persistent;
         | 
| 251 251 | 
             
                VALUE rb_key_normalize, rb_key_with_sis, rb_key_type;
         | 
| @@ -100,6 +100,7 @@ static VALUE eGrnTokenFilterError; | |
| 100 100 | 
             
            static VALUE eGrnCommandError;
         | 
| 101 101 | 
             
            static VALUE eGrnPluginError;
         | 
| 102 102 | 
             
            static VALUE eGrnScorerError;
         | 
| 103 | 
            +
            static VALUE eGrnCancel;
         | 
| 103 104 |  | 
| 104 105 | 
             
            VALUE
         | 
| 105 106 | 
             
            rb_grn_rc_to_exception (grn_rc rc)
         | 
| @@ -341,6 +342,9 @@ rb_grn_rc_to_exception (grn_rc rc) | |
| 341 342 | 
             
                  case GRN_SCORER_ERROR:
         | 
| 342 343 | 
             
                    exception = eGrnScorerError;
         | 
| 343 344 | 
             
                    break;
         | 
| 345 | 
            +
                  case GRN_CANCEL:
         | 
| 346 | 
            +
                    exception = eGrnCancel;
         | 
| 347 | 
            +
                    break;
         | 
| 344 348 | 
             
                }
         | 
| 345 349 |  | 
| 346 350 | 
             
                if (NIL_P(exception))
         | 
| @@ -589,6 +593,9 @@ rb_grn_rc_to_message (grn_rc rc) | |
| 589 593 | 
             
                  case GRN_SCORER_ERROR:
         | 
| 590 594 | 
             
                    message = "scorer error";
         | 
| 591 595 | 
             
                    break;
         | 
| 596 | 
            +
                  case GRN_CANCEL:
         | 
| 597 | 
            +
                    message = "cancel";
         | 
| 598 | 
            +
                    break;
         | 
| 592 599 | 
             
                }
         | 
| 593 600 |  | 
| 594 601 | 
             
                if (!message)
         | 
| @@ -1276,6 +1283,16 @@ rb_grn_init_exception (VALUE mGrn) | |
| 1276 1283 | 
             
                 *
         | 
| 1277 1284 | 
             
                 * @since 5.0.1
         | 
| 1278 1285 | 
             
                 */
         | 
| 1279 | 
            -
                 | 
| 1286 | 
            +
                eGrnScorerError =
         | 
| 1280 1287 | 
             
                    rb_define_class_under(mGrn, "ScorerError", rb_eGrnError);
         | 
| 1288 | 
            +
             | 
| 1289 | 
            +
                /*
         | 
| 1290 | 
            +
                 * Document-class: Groonga::Cancel
         | 
| 1291 | 
            +
                 *
         | 
| 1292 | 
            +
                 * It is used when a processing is canceled.
         | 
| 1293 | 
            +
                 *
         | 
| 1294 | 
            +
                 * @since 6.0.2
         | 
| 1295 | 
            +
                 */
         | 
| 1296 | 
            +
                eGrnCancel =
         | 
| 1297 | 
            +
                    rb_define_class_under(mGrn, "Cancel", rb_eGrnError);
         | 
| 1281 1298 | 
             
            }
         | 
| @@ -203,8 +203,6 @@ rb_grn_expression_define_variable (int argc, VALUE *argv, VALUE self) | |
| 203 203 | 
             
                return rb_variable;
         | 
| 204 204 | 
             
            }
         | 
| 205 205 |  | 
| 206 | 
            -
            /* TODO: Enable when Groonga 6.0.1 is released. */
         | 
| 207 | 
            -
            /*
         | 
| 208 206 | 
             
            typedef struct
         | 
| 209 207 | 
             
            {
         | 
| 210 208 | 
             
                grn_ctx *context;
         | 
| @@ -238,7 +236,6 @@ rb_grn_hash_from_ruby_hash_body (VALUE rb_key, | |
| 238 236 |  | 
| 239 237 | 
             
                return ST_CONTINUE;
         | 
| 240 238 | 
             
            }
         | 
| 241 | 
            -
            */
         | 
| 242 239 |  | 
| 243 240 | 
             
            /*
         | 
| 244 241 | 
             
             * _object_ を追加し、 _n_arguments_ 個の引数を取る _operation_ を追加する。
         | 
| @@ -269,8 +266,6 @@ rb_grn_expression_append_object (int argc, VALUE *argv, VALUE self) | |
| 269 266 | 
             
                                              NULL, NULL,
         | 
| 270 267 | 
             
                                              NULL, NULL, NULL);
         | 
| 271 268 |  | 
| 272 | 
            -
                /* TODO: Enable when Groonga 6.0.1 is released. */
         | 
| 273 | 
            -
                /*
         | 
| 274 269 | 
             
                if (RB_TYPE_P(rb_object, RUBY_T_HASH)) {
         | 
| 275 270 | 
             
                    RbGrnHashFromRubyHashData data;
         | 
| 276 271 | 
             
                    data.context = context;
         | 
| @@ -288,13 +283,10 @@ rb_grn_expression_append_object (int argc, VALUE *argv, VALUE self) | |
| 288 283 | 
             
                    grn_expr_append_obj(context, expression, (grn_obj *)(data.hash),
         | 
| 289 284 | 
             
                                        operation, n_arguments);
         | 
| 290 285 | 
             
                } else {
         | 
| 291 | 
            -
                */
         | 
| 292 286 | 
             
                    object = RVAL2GRNOBJECT(rb_object, &context);
         | 
| 293 287 | 
             
                    grn_expr_append_obj(context, expression, object,
         | 
| 294 288 | 
             
                                        operation, n_arguments);
         | 
| 295 | 
            -
                /*
         | 
| 296 289 | 
             
                }
         | 
| 297 | 
            -
                */
         | 
| 298 290 | 
             
                rb_grn_context_check(context, self);
         | 
| 299 291 | 
             
                rb_ary_push(rb_iv_get(self, "@objects"), rb_object);
         | 
| 300 292 |  | 
    
        data/ext/groonga/rb-grn-hash.c
    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-2016  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
         | 
| @@ -103,6 +103,12 @@ VALUE rb_cGrnHash; | |
| 103 103 | 
             
             *
         | 
| 104 104 | 
             
             *       @deprecated Use @:normalizer => "NormalizerAuto"@ instead.
         | 
| 105 105 | 
             
             *
         | 
| 106 | 
            +
             *     @option options [Boolean] :key_large (false)
         | 
| 107 | 
            +
             *       It specifies whether total key size is large or not. The
         | 
| 108 | 
            +
             *       default total key size is 4GiB. Large total key size is 1TiB.
         | 
| 109 | 
            +
             *
         | 
| 110 | 
            +
             *       @since 6.0.1
         | 
| 111 | 
            +
             *
         | 
| 106 112 | 
             
             *     @option options :key_type
         | 
| 107 113 | 
             
             *       キーの種類を示すオブジェクトを指定する。キーの種類には型
         | 
| 108 114 | 
             
             *       名("Int32"や"ShortText"など)または {Groonga::Type} または
         | 
| @@ -158,10 +164,12 @@ rb_grn_hash_s_create (int argc, VALUE *argv, VALUE klass) | |
| 158 164 | 
             
                grn_obj *key_type = NULL, *value_type = NULL, *table;
         | 
| 159 165 | 
             
                const char *name = NULL, *path = NULL;
         | 
| 160 166 | 
             
                unsigned name_size = 0;
         | 
| 161 | 
            -
                 | 
| 167 | 
            +
                grn_table_flags flags = GRN_OBJ_TABLE_HASH_KEY;
         | 
| 162 168 | 
             
                VALUE rb_table;
         | 
| 163 169 | 
             
                VALUE options, rb_context, rb_name, rb_path, rb_persistent;
         | 
| 164 | 
            -
                VALUE rb_key_normalize | 
| 170 | 
            +
                VALUE rb_key_normalize;
         | 
| 171 | 
            +
                VALUE rb_key_large;
         | 
| 172 | 
            +
                VALUE rb_key_type, rb_value_type, rb_default_tokenizer;
         | 
| 165 173 | 
             
                VALUE rb_token_filters;
         | 
| 166 174 | 
             
                VALUE rb_sub_records;
         | 
| 167 175 | 
             
                VALUE rb_normalizer;
         | 
| @@ -174,6 +182,7 @@ rb_grn_hash_s_create (int argc, VALUE *argv, VALUE klass) | |
| 174 182 | 
             
                                    "path", &rb_path,
         | 
| 175 183 | 
             
                                    "persistent", &rb_persistent,
         | 
| 176 184 | 
             
                                    "key_normalize", &rb_key_normalize,
         | 
| 185 | 
            +
                                    "key_large", &rb_key_large,
         | 
| 177 186 | 
             
                                    "key_type", &rb_key_type,
         | 
| 178 187 | 
             
                                    "value_type", &rb_value_type,
         | 
| 179 188 | 
             
                                    "default_tokenizer", &rb_default_tokenizer,
         | 
| @@ -201,6 +210,9 @@ rb_grn_hash_s_create (int argc, VALUE *argv, VALUE klass) | |
| 201 210 | 
             
                if (RVAL2CBOOL(rb_key_normalize))
         | 
| 202 211 | 
             
                    flags |= GRN_OBJ_KEY_NORMALIZE;
         | 
| 203 212 |  | 
| 213 | 
            +
                if (RVAL2CBOOL(rb_key_large))
         | 
| 214 | 
            +
                    flags |= GRN_OBJ_KEY_LARGE;
         | 
| 215 | 
            +
             | 
| 204 216 | 
             
                if (NIL_P(rb_key_type)) {
         | 
| 205 217 | 
             
                    key_type = grn_ctx_at(context, GRN_DB_SHORT_TEXT);
         | 
| 206 218 | 
             
                } else {
         | 
    
        data/ext/groonga/rb-grn-logger.c
    CHANGED
    
    | @@ -28,9 +28,9 @@ | |
| 28 28 | 
             
            #define GRNLOGLEVEL2RVAL(level)    (rb_grn_log_level_to_ruby_object(level))
         | 
| 29 29 | 
             
            #define RVAL2GRNLOGLEVEL(rb_level) (rb_grn_log_level_from_ruby_object(rb_level))
         | 
| 30 30 |  | 
| 31 | 
            -
            VALUE  | 
| 32 | 
            -
            VALUE  | 
| 33 | 
            -
            VALUE  | 
| 31 | 
            +
            VALUE rb_cGrnLogger;
         | 
| 32 | 
            +
            VALUE rb_mGrnLoggerFlags;
         | 
| 33 | 
            +
            VALUE rb_cGrnCallbackLogger;
         | 
| 34 34 |  | 
| 35 35 | 
             
            static ID id_caller_locations;
         | 
| 36 36 | 
             
            static ID id_path;
         | 
| @@ -333,7 +333,7 @@ rb_grn_logger_s_register (int argc, VALUE *argv, VALUE klass) | |
| 333 333 | 
             
                    if (!NIL_P(rb_logger)) {
         | 
| 334 334 | 
             
                        rb_options = rb_logger;
         | 
| 335 335 | 
             
                    }
         | 
| 336 | 
            -
                    rb_logger = rb_funcall( | 
| 336 | 
            +
                    rb_logger = rb_funcall(rb_cGrnCallbackLogger, id_new, 1, rb_callback);
         | 
| 337 337 | 
             
                }
         | 
| 338 338 |  | 
| 339 339 | 
             
                rb_grn_scan_options(rb_options,
         | 
| @@ -361,7 +361,7 @@ rb_grn_logger_s_register (int argc, VALUE *argv, VALUE klass) | |
| 361 361 | 
             
                    flags |= GRN_LOG_LOCATION;
         | 
| 362 362 | 
             
                }
         | 
| 363 363 | 
             
                if (!NIL_P(rb_flags)) {
         | 
| 364 | 
            -
                    flags = rb_funcall( | 
| 364 | 
            +
                    flags = rb_funcall(rb_mGrnLoggerFlags, id_parse, 2,
         | 
| 365 365 | 
             
                                       INT2NUM(flags), rb_flags);
         | 
| 366 366 | 
             
                }
         | 
| 367 367 |  | 
| @@ -617,34 +617,34 @@ rb_grn_init_logger (VALUE mGrn) | |
| 617 617 |  | 
| 618 618 | 
             
                rb_grn_logger.user_data = (void *)Qnil;
         | 
| 619 619 |  | 
| 620 | 
            -
                 | 
| 620 | 
            +
                rb_cGrnLogger = rb_define_class_under(mGrn, "Logger", rb_cObject);
         | 
| 621 621 |  | 
| 622 | 
            -
                rb_cv_set( | 
| 623 | 
            -
                rb_define_singleton_method( | 
| 622 | 
            +
                rb_cv_set(rb_cGrnLogger, "@@current_logger", Qnil);
         | 
| 623 | 
            +
                rb_define_singleton_method(rb_cGrnLogger, "log",
         | 
| 624 624 | 
             
                                           rb_grn_logger_s_log, -1);
         | 
| 625 | 
            -
                rb_define_singleton_method( | 
| 625 | 
            +
                rb_define_singleton_method(rb_cGrnLogger, "register",
         | 
| 626 626 | 
             
                                           rb_grn_logger_s_register, -1);
         | 
| 627 | 
            -
                rb_define_singleton_method( | 
| 627 | 
            +
                rb_define_singleton_method(rb_cGrnLogger, "unregister",
         | 
| 628 628 | 
             
                                           rb_grn_logger_s_unregister, 0);
         | 
| 629 | 
            -
                rb_define_singleton_method( | 
| 629 | 
            +
                rb_define_singleton_method(rb_cGrnLogger, "reopen",
         | 
| 630 630 | 
             
                                           rb_grn_logger_s_reopen, 0);
         | 
| 631 | 
            -
                rb_define_singleton_method( | 
| 631 | 
            +
                rb_define_singleton_method(rb_cGrnLogger, "max_level",
         | 
| 632 632 | 
             
                                           rb_grn_logger_s_get_max_level, 0);
         | 
| 633 | 
            -
                rb_define_singleton_method( | 
| 633 | 
            +
                rb_define_singleton_method(rb_cGrnLogger, "max_level=",
         | 
| 634 634 | 
             
                                           rb_grn_logger_s_set_max_level, 1);
         | 
| 635 | 
            -
                rb_define_singleton_method( | 
| 635 | 
            +
                rb_define_singleton_method(rb_cGrnLogger, "path",
         | 
| 636 636 | 
             
                                           rb_grn_logger_s_get_path, 0);
         | 
| 637 | 
            -
                rb_define_singleton_method( | 
| 637 | 
            +
                rb_define_singleton_method(rb_cGrnLogger, "path=",
         | 
| 638 638 | 
             
                                           rb_grn_logger_s_set_path, 1);
         | 
| 639 | 
            -
                rb_define_singleton_method( | 
| 639 | 
            +
                rb_define_singleton_method(rb_cGrnLogger, "rotate_threshold_size",
         | 
| 640 640 | 
             
                                           rb_grn_logger_s_get_rotate_threshold_size, 0);
         | 
| 641 | 
            -
                rb_define_singleton_method( | 
| 641 | 
            +
                rb_define_singleton_method(rb_cGrnLogger, "rotate_threshold_size=",
         | 
| 642 642 | 
             
                                           rb_grn_logger_s_set_rotate_threshold_size, 1);
         | 
| 643 | 
            -
                rb_set_end_proc(rb_grn_logger_reset,  | 
| 643 | 
            +
                rb_set_end_proc(rb_grn_logger_reset, rb_cGrnLogger);
         | 
| 644 644 |  | 
| 645 | 
            -
                 | 
| 645 | 
            +
                rb_mGrnLoggerFlags = rb_define_module_under(rb_cGrnLogger, "Flags");
         | 
| 646 646 | 
             
            #define DEFINE_FLAG(NAME)                                       \
         | 
| 647 | 
            -
                rb_define_const( | 
| 647 | 
            +
                rb_define_const(rb_mGrnLoggerFlags,                         \
         | 
| 648 648 | 
             
                                #NAME, INT2NUM(GRN_LOG_ ## NAME))
         | 
| 649 649 | 
             
                DEFINE_FLAG(TIME);
         | 
| 650 650 | 
             
                DEFINE_FLAG(TITLE);
         | 
| @@ -652,6 +652,6 @@ rb_grn_init_logger (VALUE mGrn) | |
| 652 652 | 
             
                DEFINE_FLAG(LOCATION);
         | 
| 653 653 | 
             
            #undef DEFINE_FLAG
         | 
| 654 654 |  | 
| 655 | 
            -
                 | 
| 656 | 
            -
                    rb_define_class_under(mGrn, "CallbackLogger",  | 
| 655 | 
            +
                rb_cGrnCallbackLogger =
         | 
| 656 | 
            +
                    rb_define_class_under(mGrn, "CallbackLogger", rb_cGrnLogger);
         | 
| 657 657 | 
             
            }
         | 
    
        data/ext/groonga/rb-grn-object.c
    CHANGED
    
    | @@ -1461,23 +1461,45 @@ rb_grn_object_prepend_value (VALUE self, VALUE rb_id, VALUE rb_value) | |
| 1461 1461 | 
             
            }
         | 
| 1462 1462 |  | 
| 1463 1463 | 
             
            /*
         | 
| 1464 | 
            -
             *  | 
| 1465 | 
            -
             *  | 
| 1464 | 
            +
             * Free the `object`. If the `object` is persistent object, all files
         | 
| 1465 | 
            +
             * related with the object are removed.
         | 
| 1466 1466 | 
             
             *
         | 
| 1467 | 
            -
             * @overload remove
         | 
| 1467 | 
            +
             * @overload remove(options={})
         | 
| 1468 | 
            +
             *
         | 
| 1469 | 
            +
             *   @param [::Hash] options The optional parameters.
         | 
| 1470 | 
            +
             *
         | 
| 1471 | 
            +
             *   @option options [Boolean] :dependent (false)
         | 
| 1472 | 
            +
             *     If it's `true`, all tables and columns that depend on the
         | 
| 1473 | 
            +
             *     `object`.
         | 
| 1468 1474 | 
             
             */
         | 
| 1469 1475 | 
             
            static VALUE
         | 
| 1470 | 
            -
            rb_grn_object_remove (VALUE self)
         | 
| 1476 | 
            +
            rb_grn_object_remove (int argc, VALUE *argv, VALUE self)
         | 
| 1471 1477 | 
             
            {
         | 
| 1472 1478 | 
             
                RbGrnObject *rb_grn_object;
         | 
| 1473 1479 | 
             
                grn_ctx *context;
         | 
| 1480 | 
            +
                VALUE rb_options;
         | 
| 1481 | 
            +
                VALUE rb_dependent_p;
         | 
| 1482 | 
            +
                grn_bool dependent_p = GRN_FALSE;
         | 
| 1474 1483 |  | 
| 1475 1484 | 
             
                rb_grn_object = SELF(self);
         | 
| 1476 1485 | 
             
                if (!rb_grn_object->object)
         | 
| 1477 1486 | 
             
                    return Qnil;
         | 
| 1478 1487 |  | 
| 1488 | 
            +
                rb_scan_args(argc, argv, "01", &rb_options);
         | 
| 1489 | 
            +
                rb_grn_scan_options(rb_options,
         | 
| 1490 | 
            +
                                    "dependent", &rb_dependent_p,
         | 
| 1491 | 
            +
                                    NULL);
         | 
| 1492 | 
            +
             | 
| 1493 | 
            +
                if (!NIL_P(rb_dependent_p)) {
         | 
| 1494 | 
            +
                    dependent_p = RVAL2CBOOL(rb_dependent_p);
         | 
| 1495 | 
            +
                }
         | 
| 1496 | 
            +
             | 
| 1479 1497 | 
             
                context = rb_grn_object->context;
         | 
| 1480 | 
            -
                 | 
| 1498 | 
            +
                if (dependent_p) {
         | 
| 1499 | 
            +
                    grn_obj_remove_dependent(context, rb_grn_object->object);
         | 
| 1500 | 
            +
                } else {
         | 
| 1501 | 
            +
                    grn_obj_remove(context, rb_grn_object->object);
         | 
| 1502 | 
            +
                }
         | 
| 1481 1503 | 
             
                rb_grn_context_check(context, self);
         | 
| 1482 1504 |  | 
| 1483 1505 | 
             
                rb_iv_set(self, "@context", Qnil);
         | 
| @@ -1750,7 +1772,7 @@ rb_grn_init_object (VALUE mGrn) | |
| 1750 1772 | 
             
                rb_define_method(rb_cGrnObject, "append", rb_grn_object_append_value, 2);
         | 
| 1751 1773 | 
             
                rb_define_method(rb_cGrnObject, "prepend", rb_grn_object_prepend_value, 2);
         | 
| 1752 1774 |  | 
| 1753 | 
            -
                rb_define_method(rb_cGrnObject, "remove", rb_grn_object_remove,  | 
| 1775 | 
            +
                rb_define_method(rb_cGrnObject, "remove", rb_grn_object_remove, -1);
         | 
| 1754 1776 |  | 
| 1755 1777 | 
             
                rb_define_method(rb_cGrnObject, "builtin?", rb_grn_object_builtin_p, 0);
         | 
| 1756 1778 | 
             
                rb_define_method(rb_cGrnObject, "table?", rb_grn_object_table_p, 0);
         | 
| @@ -166,7 +166,7 @@ rb_grn_patricia_trie_s_create (int argc, VALUE *argv, VALUE klass) | |
| 166 166 | 
             
                grn_obj *key_type = NULL, *value_type = NULL, *table;
         | 
| 167 167 | 
             
                const char *name = NULL, *path = NULL;
         | 
| 168 168 | 
             
                unsigned name_size = 0;
         | 
| 169 | 
            -
                 | 
| 169 | 
            +
                grn_table_flags flags = GRN_OBJ_TABLE_PAT_KEY;
         | 
| 170 170 | 
             
                VALUE rb_table;
         | 
| 171 171 | 
             
                VALUE options, rb_context, rb_name, rb_path, rb_persistent;
         | 
| 172 172 | 
             
                VALUE rb_key_normalize, rb_key_with_sis, rb_key_type;
         | 
| @@ -0,0 +1,164 @@ | |
| 1 | 
            +
            /* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
         | 
| 2 | 
            +
            /*
         | 
| 3 | 
            +
              Copyright (C) 2016  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 | 
            +
            /*
         | 
| 22 | 
            +
             * Document-module: Groonga::RequestCanceler
         | 
| 23 | 
            +
             *
         | 
| 24 | 
            +
             * This module provides API for canceling requests.
         | 
| 25 | 
            +
             */
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            VALUE rb_mGrnRequestCanceler;
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            /*
         | 
| 30 | 
            +
             * Registers a request. The request can be canceled by
         | 
| 31 | 
            +
             * {Groonga::RequestCanceler.cancel}.
         | 
| 32 | 
            +
             *
         | 
| 33 | 
            +
             * @example Register a request
         | 
| 34 | 
            +
             *   request_id = "request-29"
         | 
| 35 | 
            +
             *   Groonga::RequestCanceler.register(request_id)
         | 
| 36 | 
            +
             *
         | 
| 37 | 
            +
             * @overload register(request_id)
         | 
| 38 | 
            +
             *   @param request_id [String] The ID of request to be registered.
         | 
| 39 | 
            +
             *   @return [void]
         | 
| 40 | 
            +
             *
         | 
| 41 | 
            +
             * @since 6.0.2
         | 
| 42 | 
            +
             */
         | 
| 43 | 
            +
            static VALUE
         | 
| 44 | 
            +
            rb_grn_request_canceler_s_register (int argc, VALUE *argv, VALUE module)
         | 
| 45 | 
            +
            {
         | 
| 46 | 
            +
                VALUE rb_request_id;
         | 
| 47 | 
            +
                VALUE rb_options;
         | 
| 48 | 
            +
                VALUE rb_context;
         | 
| 49 | 
            +
                const char *request_id;
         | 
| 50 | 
            +
                unsigned int request_id_size;
         | 
| 51 | 
            +
                grn_ctx *context;
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                rb_scan_args(argc, argv, "11", &rb_request_id, &rb_options);
         | 
| 54 | 
            +
                rb_grn_scan_options(rb_options,
         | 
| 55 | 
            +
                                    "context", &rb_context,
         | 
| 56 | 
            +
                                    NULL);
         | 
| 57 | 
            +
                context = rb_grn_context_ensure(&rb_context);
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                request_id = StringValuePtr(rb_request_id);
         | 
| 60 | 
            +
                request_id_size = RSTRING_LEN(rb_request_id);
         | 
| 61 | 
            +
                grn_request_canceler_register(context, request_id, request_id_size);
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                return Qnil;
         | 
| 64 | 
            +
            }
         | 
| 65 | 
            +
             | 
| 66 | 
            +
            /*
         | 
| 67 | 
            +
             * Unregisters the specified request.
         | 
| 68 | 
            +
             *
         | 
| 69 | 
            +
             * @example Unregister a request by ID
         | 
| 70 | 
            +
             *   request_id = "request-29"
         | 
| 71 | 
            +
             *   Groonga::RequestCanceler.unregister(request_id)
         | 
| 72 | 
            +
             *
         | 
| 73 | 
            +
             * @overload unregister(request_id)
         | 
| 74 | 
            +
             *   @param request_id [String] The ID of request to be unregistered.
         | 
| 75 | 
            +
             *   @return [void]
         | 
| 76 | 
            +
             *
         | 
| 77 | 
            +
             * @since 6.0.2
         | 
| 78 | 
            +
             */
         | 
| 79 | 
            +
            static VALUE
         | 
| 80 | 
            +
            rb_grn_request_canceler_s_unregister (int argc, VALUE *argv, VALUE module)
         | 
| 81 | 
            +
            {
         | 
| 82 | 
            +
                VALUE rb_request_id;
         | 
| 83 | 
            +
                VALUE rb_options;
         | 
| 84 | 
            +
                VALUE rb_context;
         | 
| 85 | 
            +
                const char *request_id;
         | 
| 86 | 
            +
                unsigned int request_id_size;
         | 
| 87 | 
            +
                grn_ctx *context;
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                rb_scan_args(argc, argv, "11", &rb_request_id, &rb_options);
         | 
| 90 | 
            +
                rb_grn_scan_options(rb_options,
         | 
| 91 | 
            +
                                    "context", &rb_context,
         | 
| 92 | 
            +
                                    NULL);
         | 
| 93 | 
            +
                context = rb_grn_context_ensure(&rb_context);
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                request_id = StringValuePtr(rb_request_id);
         | 
| 96 | 
            +
                request_id_size = RSTRING_LEN(rb_request_id);
         | 
| 97 | 
            +
                grn_request_canceler_unregister(context, request_id, request_id_size);
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                return Qnil;
         | 
| 100 | 
            +
            }
         | 
| 101 | 
            +
             | 
| 102 | 
            +
            /*
         | 
| 103 | 
            +
             * Cancels the specified request.
         | 
| 104 | 
            +
             *
         | 
| 105 | 
            +
             * @example Cancels a request by ID
         | 
| 106 | 
            +
             *   request_id = "request-29"
         | 
| 107 | 
            +
             *   Groonga::RequestCanceler.cancel(request_id)
         | 
| 108 | 
            +
             *
         | 
| 109 | 
            +
             * @overload cancel(request_id)
         | 
| 110 | 
            +
             *   @param request_id [String] The ID of request to be canceled.
         | 
| 111 | 
            +
             *   @return [Boolean] `true` if the request is canceled, `false` otherwise.
         | 
| 112 | 
            +
             *
         | 
| 113 | 
            +
             * @since 6.0.2
         | 
| 114 | 
            +
             */
         | 
| 115 | 
            +
            static VALUE
         | 
| 116 | 
            +
            rb_grn_request_canceler_s_cancel (VALUE module, VALUE rb_request_id)
         | 
| 117 | 
            +
            {
         | 
| 118 | 
            +
                const char *request_id;
         | 
| 119 | 
            +
                unsigned int request_id_size;
         | 
| 120 | 
            +
                grn_bool canceled;
         | 
| 121 | 
            +
             | 
| 122 | 
            +
                request_id = StringValuePtr(rb_request_id);
         | 
| 123 | 
            +
                request_id_size = RSTRING_LEN(rb_request_id);
         | 
| 124 | 
            +
                canceled = grn_request_canceler_cancel(request_id, request_id_size);
         | 
| 125 | 
            +
             | 
| 126 | 
            +
                return CBOOL2RVAL(canceled);
         | 
| 127 | 
            +
            }
         | 
| 128 | 
            +
             | 
| 129 | 
            +
            /*
         | 
| 130 | 
            +
             * Cancels all running requests.
         | 
| 131 | 
            +
             *
         | 
| 132 | 
            +
             * @example Cancels all requests
         | 
| 133 | 
            +
             *   Groonga::RequestCanceler.cancel_all
         | 
| 134 | 
            +
             *
         | 
| 135 | 
            +
             * @overload cancel_all
         | 
| 136 | 
            +
             *   @return [Boolean] `true` if one or more requests are canceled,
         | 
| 137 | 
            +
             *     `false` otherwise.
         | 
| 138 | 
            +
             *
         | 
| 139 | 
            +
             * @since 6.0.2
         | 
| 140 | 
            +
             */
         | 
| 141 | 
            +
            static VALUE
         | 
| 142 | 
            +
            rb_grn_request_canceler_s_cancel_all (VALUE module)
         | 
| 143 | 
            +
            {
         | 
| 144 | 
            +
                grn_bool canceled;
         | 
| 145 | 
            +
             | 
| 146 | 
            +
                canceled = grn_request_canceler_cancel_all();
         | 
| 147 | 
            +
             | 
| 148 | 
            +
                return CBOOL2RVAL(canceled);
         | 
| 149 | 
            +
            }
         | 
| 150 | 
            +
             | 
| 151 | 
            +
            void
         | 
| 152 | 
            +
            rb_grn_init_request_canceler (VALUE mGrn)
         | 
| 153 | 
            +
            {
         | 
| 154 | 
            +
                rb_mGrnRequestCanceler = rb_define_module_under(mGrn, "RequestCanceler");
         | 
| 155 | 
            +
             | 
| 156 | 
            +
                rb_define_singleton_method(rb_mGrnRequestCanceler, "register",
         | 
| 157 | 
            +
                                           rb_grn_request_canceler_s_register, -1);
         | 
| 158 | 
            +
                rb_define_singleton_method(rb_mGrnRequestCanceler, "unregister",
         | 
| 159 | 
            +
                                           rb_grn_request_canceler_s_unregister, -1);
         | 
| 160 | 
            +
                rb_define_singleton_method(rb_mGrnRequestCanceler, "cancel",
         | 
| 161 | 
            +
                                           rb_grn_request_canceler_s_cancel, 1);
         | 
| 162 | 
            +
                rb_define_singleton_method(rb_mGrnRequestCanceler, "cancel_all",
         | 
| 163 | 
            +
                                           rb_grn_request_canceler_s_cancel_all, 0);
         | 
| 164 | 
            +
            }
         |