rroonga 12.0.0 → 12.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 79bff23494809c1f6cf740acf2151f06889ad139828c4c4baad981d3bf998127
4
- data.tar.gz: 04476d31b9221f714880ebb3e36532cbcdca343d715d4202ececac2d3bff7ec8
3
+ metadata.gz: 908cb7325ae81681705d729d998fc1a8340110f4917c2cbe3f909e89e49b022e
4
+ data.tar.gz: d3dd3039d9dfc63b4d13aaa9bbd7db3db7f9024ca5894755b1aeb0e7f1217571
5
5
  SHA512:
6
- metadata.gz: ca0f800a11f9cb6135d5117d0cbed6d349d590178b8d2f0aafe7766f0a89148defadd77055392e1c556550850faf254299487367a9a1b1bb119d971f285f9058
7
- data.tar.gz: a831fc078b87ba358730984240556cc2063bc185e3e00f3a2cb2789ba6d51aa4c543ea167a6f8da7cca086c0daddffa24eb455e18866adf61055cadcfa8927d9
6
+ metadata.gz: 8ab6d48f53a1f0672f814c423b40df8fe4d5963eee26345bcd308440fe4456ea65b9af4d7ca0614771194931a18388a3a2f6fef0ccafb846759fbc750dfd3f6e
7
+ data.tar.gz: ba3747fa4338baf72277de7acaf5a35354bb032224d992af00c3c7e6ce0e58c3aeed355cb3d4e811335a3f99d8cbadc114c629f1915e7397fdd638e86e39176b
data/doc/text/news.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # NEWS
2
2
 
3
+ ## 12.0.8: 2022-09-28 {#version-12-0-8}
4
+
5
+ ### Improvements
6
+
7
+ * Add support for creating a {Groonga::PatriciaTrie} without database.
8
+
9
+ ## 12.0.2: 2022-04-04 {#version-12-0-2}
10
+
11
+ ### Improvements
12
+
13
+ * Added support for `:weight_float32` for vector column. This
14
+ requires Groonga 12.0.2 or later.
15
+
16
+ * Removed needless `Groonga::IndexColumn#with_weight?`.
17
+
18
+ * Added support for `:missing_mode` and `:invalid_mode` for scalar
19
+ column and vector column. This requires Groonga 12.0.2 or later.
20
+
3
21
  ## 12.0.0: 2022-02-09 {#version-12-0-0}
4
22
 
5
23
  ### Improvements
@@ -1,7 +1,7 @@
1
1
  /* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
2
  /* vim: set sts=4 sw=4 ts=8 noet: */
3
3
  /*
4
- Copyright (C) 2009-2021 Sutou Kouhei <kou@clear-code.com>
4
+ Copyright (C) 2009-2022 Sutou Kouhei <kou@clear-code.com>
5
5
  Copyright (C) 2016 Masafumi Yokoyama <yokoyama@clear-code.com>
6
6
 
7
7
  This library is free software; you can redistribute it and/or
@@ -714,7 +714,7 @@ rb_grn_column_data_p (VALUE self)
714
714
 
715
715
  /*
716
716
  * @overload with_weight?
717
- * @return [Boolean] @true@ if the column is vector and created with
717
+ * @return [Boolean] @true@ if the column is created with
718
718
  * @:with_weight => true@ flag, @false@ otherwise.
719
719
  * @since 4.0.1
720
720
  */
@@ -733,6 +733,26 @@ rb_grn_column_with_weight_p(VALUE self)
733
733
  return CBOOL2RVAL(flags & GRN_OBJ_WITH_WEIGHT);
734
734
  }
735
735
 
736
+ /*
737
+ * @overload weight_float32?
738
+ * @return [Boolean] @true@ if the column uses 32 bit float for weight.
739
+ * @since 12.0.2
740
+ */
741
+ static VALUE
742
+ rb_grn_column_weight_float32_p(VALUE self)
743
+ {
744
+ grn_obj *column;
745
+ grn_ctx *context;
746
+ grn_column_flags flags;
747
+
748
+ rb_grn_column_deconstruct(SELF(self), &column, &context,
749
+ NULL, NULL,
750
+ NULL, NULL, NULL);
751
+
752
+ flags = grn_column_get_flags(context, column);
753
+ return CBOOL2RVAL(flags & GRN_OBJ_WEIGHT_FLOAT32);
754
+ }
755
+
736
756
  /*
737
757
  * Return indexes on `column`. If operator is specified, indexes that
738
758
  * can executes the operator are only returned. Otherwise, all indexes
@@ -867,6 +887,8 @@ rb_grn_init_column (VALUE mGrn)
867
887
 
868
888
  rb_define_method(rb_cGrnColumn, "with_weight?",
869
889
  rb_grn_column_with_weight_p, 0);
890
+ rb_define_method(rb_cGrnColumn, "weight_float32?",
891
+ rb_grn_column_weight_float32_p, 0);
870
892
 
871
893
  rb_define_method(rb_cGrnColumn, "find_indexes",
872
894
  rb_grn_column_find_indexes, -1);
@@ -1,7 +1,7 @@
1
1
  /* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
2
  /* vim: set sts=4 sw=4 ts=8 noet: */
3
3
  /*
4
- Copyright (C) 2016-2021 Sutou Kouhei <kou@clear-code.com>
4
+ Copyright (C) 2016-2022 Sutou Kouhei <kou@clear-code.com>
5
5
 
6
6
  This library is free software; you can redistribute it and/or
7
7
  modify it under the terms of the GNU Lesser General Public
@@ -245,6 +245,180 @@ rb_grn_data_column_apply_expression (VALUE self)
245
245
  return self;
246
246
  }
247
247
 
248
+ /*
249
+ * @overload missing_mode
250
+ * @return [:add, :ignore, :nil] The missing mode of the column.
251
+ * @since 12.0.2
252
+ */
253
+ static VALUE
254
+ rb_grn_data_column_get_missing_mode(VALUE self)
255
+ {
256
+ grn_obj *column;
257
+ grn_ctx *context;
258
+ grn_column_flags flags;
259
+
260
+ rb_grn_column_deconstruct(SELF(self), &column, &context,
261
+ NULL, NULL,
262
+ NULL, NULL, NULL);
263
+
264
+ flags = grn_column_get_flags(context, column);
265
+ switch ((flags & GRN_OBJ_MISSING_MASK)) {
266
+ case GRN_OBJ_MISSING_IGNORE:
267
+ return rb_id2sym(rb_intern("ignore"));
268
+ case GRN_OBJ_MISSING_NIL:
269
+ return rb_id2sym(rb_intern("nil"));
270
+ default:
271
+ return rb_id2sym(rb_intern("add"));
272
+ }
273
+ }
274
+
275
+ /*
276
+ * @overload missing_add?
277
+ * @return [Boolean] @true@ if the column uses @:add@ missing mode.
278
+ * @since 12.0.2
279
+ */
280
+ static VALUE
281
+ rb_grn_data_column_missing_add_p(VALUE self)
282
+ {
283
+ grn_obj *column;
284
+ grn_ctx *context;
285
+ grn_column_flags flags;
286
+
287
+ rb_grn_column_deconstruct(SELF(self), &column, &context,
288
+ NULL, NULL,
289
+ NULL, NULL, NULL);
290
+
291
+ flags = grn_column_get_flags(context, column);
292
+ return CBOOL2RVAL((flags & GRN_OBJ_MISSING_MASK) == GRN_OBJ_MISSING_ADD);
293
+ }
294
+
295
+ /*
296
+ * @overload missing_ignore?
297
+ * @return [Boolean] @true@ if the column uses @:ignore@ missing mode.
298
+ * @since 12.0.2
299
+ */
300
+ static VALUE
301
+ rb_grn_data_column_missing_ignore_p(VALUE self)
302
+ {
303
+ grn_obj *column;
304
+ grn_ctx *context;
305
+ grn_column_flags flags;
306
+
307
+ rb_grn_column_deconstruct(SELF(self), &column, &context,
308
+ NULL, NULL,
309
+ NULL, NULL, NULL);
310
+
311
+ flags = grn_column_get_flags(context, column);
312
+ return CBOOL2RVAL((flags & GRN_OBJ_MISSING_MASK) == GRN_OBJ_MISSING_IGNORE);
313
+ }
314
+
315
+ /*
316
+ * @overload missing_nil?
317
+ * @return [Boolean] @true@ if the column uses @:nil@ missing mode.
318
+ * @since 12.0.2
319
+ */
320
+ static VALUE
321
+ rb_grn_data_column_missing_nil_p(VALUE self)
322
+ {
323
+ grn_obj *column;
324
+ grn_ctx *context;
325
+ grn_column_flags flags;
326
+
327
+ rb_grn_column_deconstruct(SELF(self), &column, &context,
328
+ NULL, NULL,
329
+ NULL, NULL, NULL);
330
+
331
+ flags = grn_column_get_flags(context, column);
332
+ return CBOOL2RVAL((flags & GRN_OBJ_MISSING_MASK) == GRN_OBJ_MISSING_NIL);
333
+ }
334
+
335
+ /*
336
+ * @overload invalid_mode
337
+ * @return [:error, :warn, :ignore] The invalid mode of the column.
338
+ * @since 12.0.2
339
+ */
340
+ static VALUE
341
+ rb_grn_data_column_get_invalid_mode(VALUE self)
342
+ {
343
+ grn_obj *column;
344
+ grn_ctx *context;
345
+ grn_column_flags flags;
346
+
347
+ rb_grn_column_deconstruct(SELF(self), &column, &context,
348
+ NULL, NULL,
349
+ NULL, NULL, NULL);
350
+
351
+ flags = grn_column_get_flags(context, column);
352
+ switch ((flags & GRN_OBJ_INVALID_MASK)) {
353
+ case GRN_OBJ_INVALID_WARN:
354
+ return rb_id2sym(rb_intern("warn"));
355
+ case GRN_OBJ_INVALID_IGNORE:
356
+ return rb_id2sym(rb_intern("ignore"));
357
+ default:
358
+ return rb_id2sym(rb_intern("error"));
359
+ }
360
+ }
361
+
362
+ /*
363
+ * @overload invalid_error?
364
+ * @return [Boolean] @true@ if the column uses @:error@ invalid mode.
365
+ * @since 12.0.2
366
+ */
367
+ static VALUE
368
+ rb_grn_data_column_invalid_error_p(VALUE self)
369
+ {
370
+ grn_obj *column;
371
+ grn_ctx *context;
372
+ grn_column_flags flags;
373
+
374
+ rb_grn_column_deconstruct(SELF(self), &column, &context,
375
+ NULL, NULL,
376
+ NULL, NULL, NULL);
377
+
378
+ flags = grn_column_get_flags(context, column);
379
+ return CBOOL2RVAL((flags & GRN_OBJ_INVALID_MASK) == GRN_OBJ_INVALID_ERROR);
380
+ }
381
+
382
+ /*
383
+ * @overload invalid_warn?
384
+ * @return [Boolean] @true@ if the column uses @:warn@ invalid mode.
385
+ * @since 12.0.2
386
+ */
387
+ static VALUE
388
+ rb_grn_data_column_invalid_warn_p(VALUE self)
389
+ {
390
+ grn_obj *column;
391
+ grn_ctx *context;
392
+ grn_column_flags flags;
393
+
394
+ rb_grn_column_deconstruct(SELF(self), &column, &context,
395
+ NULL, NULL,
396
+ NULL, NULL, NULL);
397
+
398
+ flags = grn_column_get_flags(context, column);
399
+ return CBOOL2RVAL((flags & GRN_OBJ_INVALID_MASK) == GRN_OBJ_INVALID_WARN);
400
+ }
401
+
402
+ /*
403
+ * @overload invalid_ignore?
404
+ * @return [Boolean] @true@ if the column uses @:ignore@ invalid mode.
405
+ * @since 12.0.2
406
+ */
407
+ static VALUE
408
+ rb_grn_data_column_invalid_ignore_p(VALUE self)
409
+ {
410
+ grn_obj *column;
411
+ grn_ctx *context;
412
+ grn_column_flags flags;
413
+
414
+ rb_grn_column_deconstruct(SELF(self), &column, &context,
415
+ NULL, NULL,
416
+ NULL, NULL, NULL);
417
+
418
+ flags = grn_column_get_flags(context, column);
419
+ return CBOOL2RVAL((flags & GRN_OBJ_INVALID_MASK) == GRN_OBJ_INVALID_IGNORE);
420
+ }
421
+
248
422
  void
249
423
  rb_grn_init_data_column (VALUE mGrn)
250
424
  {
@@ -255,6 +429,24 @@ rb_grn_init_data_column (VALUE mGrn)
255
429
  rb_define_method(rb_cGrnDataColumn, "apply_expression",
256
430
  rb_grn_data_column_apply_expression, 0);
257
431
 
432
+ rb_define_method(rb_cGrnDataColumn, "missing_mode",
433
+ rb_grn_data_column_get_missing_mode, 0);
434
+ rb_define_method(rb_cGrnDataColumn, "missing_add?",
435
+ rb_grn_data_column_missing_add_p, 0);
436
+ rb_define_method(rb_cGrnDataColumn, "missing_ignore?",
437
+ rb_grn_data_column_missing_ignore_p, 0);
438
+ rb_define_method(rb_cGrnDataColumn, "missing_nil?",
439
+ rb_grn_data_column_missing_nil_p, 0);
440
+
441
+ rb_define_method(rb_cGrnDataColumn, "invalid_mode",
442
+ rb_grn_data_column_get_invalid_mode, 0);
443
+ rb_define_method(rb_cGrnDataColumn, "invalid_error?",
444
+ rb_grn_data_column_invalid_error_p, 0);
445
+ rb_define_method(rb_cGrnDataColumn, "invalid_warn?",
446
+ rb_grn_data_column_invalid_warn_p, 0);
447
+ rb_define_method(rb_cGrnDataColumn, "invalid_ignore?",
448
+ rb_grn_data_column_invalid_ignore_p, 0);
449
+
258
450
  rb_grn_init_fix_size_column(mGrn);
259
451
  rb_grn_init_variable_size_column(mGrn);
260
452
  }
@@ -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-2020 Sutou Kouhei <kou@clear-code.com>
3
+ Copyright (C) 2009-2022 Sutou Kouhei <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
@@ -21,53 +21,55 @@
21
21
  VALUE rb_cGrnRecordExpressionBuilder;
22
22
  VALUE rb_cGrnColumnExpressionBuilder;
23
23
 
24
+ static ID id_build;
25
+ static ID id_call;
26
+ static ID id_new;
27
+
24
28
  VALUE
25
29
  rb_grn_record_expression_builder_new (VALUE table, VALUE name)
26
30
  {
27
31
  return rb_funcall(rb_cGrnRecordExpressionBuilder,
28
- rb_intern("new"), 2, table, name);
32
+ id_new, 2, table, name);
29
33
  }
30
34
 
31
35
  VALUE
32
36
  rb_grn_column_expression_builder_new (VALUE column, VALUE name, VALUE query)
33
37
  {
34
38
  return rb_funcall(rb_cGrnColumnExpressionBuilder,
35
- rb_intern("new"), 3, column, name, query);
36
- }
37
-
38
- static VALUE
39
- build (VALUE self)
40
- {
41
- return rb_funcall(self, rb_intern("build"), 0);
39
+ id_new, 3, column, name, query);
42
40
  }
43
41
 
44
42
  static VALUE
45
43
  build_block (RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg))
46
44
  {
47
- return rb_funcall(rb_block_proc(), rb_intern("call"), 1, yielded_arg);
45
+ return rb_funcall(rb_block_proc(), id_call, 1, yielded_arg);
48
46
  }
49
47
 
50
48
  VALUE
51
49
  rb_grn_record_expression_builder_build (VALUE self)
52
50
  {
53
51
  if (rb_block_given_p())
54
- return rb_iterate(build, self, build_block, self);
52
+ return rb_block_call(self, id_build, 0, NULL, build_block, self);
55
53
  else
56
- return build(self);
54
+ return rb_funcall(self, id_build, 0);
57
55
  }
58
56
 
59
57
  VALUE
60
58
  rb_grn_column_expression_builder_build (VALUE self)
61
59
  {
62
60
  if (rb_block_given_p())
63
- return rb_iterate(build, self, build_block, self);
61
+ return rb_block_call(self, id_build, 0, NULL, build_block, self);
64
62
  else
65
- return build(self);
63
+ return rb_funcall(self, id_build, 0);
66
64
  }
67
65
 
68
66
  void
69
67
  rb_grn_init_expression_builder (VALUE mGrn)
70
68
  {
69
+ id_build = rb_intern("build");
70
+ id_call = rb_intern("call");
71
+ id_new = rb_intern("new");
72
+
71
73
  rb_cGrnRecordExpressionBuilder =
72
74
  rb_const_get(mGrn, rb_intern("RecordExpressionBuilder"));
73
75
  rb_cGrnColumnExpressionBuilder =
@@ -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-2021 Sutou Kouhei <kou@clear-code.com>
3
+ Copyright (C) 2009-2022 Sutou Kouhei <kou@clear-code.com>
4
4
  Copyright (C) 2016 Masafumi Yokoyama <yokoyama@clear-code.com>
5
5
  Copyright (C) 2019 Horimoto Yasuhiro <horimoto@clear-code.com>
6
6
 
@@ -881,27 +881,6 @@ rb_grn_index_column_with_section_p (VALUE self)
881
881
  return CBOOL2RVAL(flags & GRN_OBJ_WITH_SECTION);
882
882
  }
883
883
 
884
- /*
885
- * _column_ がウェイト情報も格納する場合は +true+ を返します。
886
- *
887
- * @overload with_weight?
888
- */
889
- static VALUE
890
- rb_grn_index_column_with_weight_p (VALUE self)
891
- {
892
- grn_obj *column;
893
- grn_ctx *context;
894
- grn_column_flags flags;
895
-
896
- rb_grn_index_column_deconstruct(SELF(self), &column, &context,
897
- NULL, NULL,
898
- NULL, NULL, NULL, NULL, NULL,
899
- NULL, NULL);
900
-
901
- flags = grn_column_get_flags(context, column);
902
- return CBOOL2RVAL(flags & GRN_OBJ_WITH_WEIGHT);
903
- }
904
-
905
884
  /*
906
885
  * _column_ が位置情報も格納する場合は +true+ を返します。
907
886
  *
@@ -1460,8 +1439,6 @@ rb_grn_init_index_column (VALUE mGrn)
1460
1439
 
1461
1440
  rb_define_method(rb_cGrnIndexColumn, "with_section?",
1462
1441
  rb_grn_index_column_with_section_p, 0);
1463
- rb_define_method(rb_cGrnIndexColumn, "with_weight?",
1464
- rb_grn_index_column_with_weight_p, 0);
1465
1442
  rb_define_method(rb_cGrnIndexColumn, "with_position?",
1466
1443
  rb_grn_index_column_with_position_p, 0);
1467
1444
  rb_define_method(rb_cGrnIndexColumn, "small?",
@@ -1,6 +1,6 @@
1
1
  /* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
2
  /*
3
- Copyright (C) 2017-2021 Sutou Kouhei <kou@clear-code.com>
3
+ Copyright (C) 2017-2022 Sutou Kouhei <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
@@ -56,6 +56,15 @@ static const rb_data_type_t rb_grn_inverted_index_cursor_type = {
56
56
  RUBY_TYPED_FREE_IMMEDIATELY,
57
57
  };
58
58
 
59
+ static VALUE
60
+ rb_grn_inverted_index_cursor_alloc (VALUE klass)
61
+ {
62
+ return TypedData_Wrap_Struct(klass,
63
+ &rb_grn_inverted_index_cursor_type,
64
+ NULL);
65
+ }
66
+
67
+
59
68
  VALUE
60
69
  rb_grn_inverted_index_cursor_to_ruby_object (grn_ctx *context,
61
70
  grn_ii_cursor *cursor,
@@ -256,6 +265,8 @@ rb_grn_init_inverted_index_cursor (VALUE mGrn)
256
265
  {
257
266
  rb_cGrnInvertedIndexCursor =
258
267
  rb_define_class_under(mGrn, "InvertedIndexCursor", rb_cObject);
268
+ rb_define_alloc_func(rb_cGrnInvertedIndexCursor,
269
+ rb_grn_inverted_index_cursor_alloc);
259
270
  rb_include_module(rb_cGrnInvertedIndexCursor, rb_mEnumerable);
260
271
 
261
272
  rb_define_method(rb_cGrnInvertedIndexCursor, "next",
@@ -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-2021 Sutou Kouhei <kou@clear-code.com>
3
+ Copyright (C) 2009-2022 Sutou Kouhei <kou@clear-code.com>
4
4
  Copyright (C) 2014-2016 Masafumi Yokoyama <yokoyama@clear-code.com>
5
5
  Copyright (C) 2019 Horimoto Yasuhiro <horimoto@clear-code.com>
6
6
 
@@ -927,6 +927,30 @@ rb_grn_object_inspect_content_flags_with_label (VALUE inspected,
927
927
  rb_ary_push(inspected_flags, rb_str_new_cstr("COLUMN_SCALAR"));
928
928
  } else if (column_flags & GRN_OBJ_COLUMN_VECTOR) {
929
929
  rb_ary_push(inspected_flags, rb_str_new_cstr("COLUMN_VECTOR"));
930
+ if (column_flags & GRN_OBJ_WITH_WEIGHT)
931
+ rb_ary_push(inspected_flags, rb_str_new_cstr("WITH_WEIGHT"));
932
+ if (column_flags & GRN_OBJ_WEIGHT_FLOAT32)
933
+ rb_ary_push(inspected_flags, rb_str_new_cstr("WEIGHT_FLOAT32"));
934
+ }
935
+ switch (column_flags & GRN_OBJ_MISSING_MASK) {
936
+ case GRN_OBJ_MISSING_IGNORE:
937
+ rb_ary_push(inspected_flags, rb_str_new_cstr("MISSING_IGNORE"));
938
+ break;
939
+ case GRN_OBJ_MISSING_NIL:
940
+ rb_ary_push(inspected_flags, rb_str_new_cstr("MISSING_NIL"));
941
+ break;
942
+ default:
943
+ break;
944
+ }
945
+ switch (column_flags & GRN_OBJ_INVALID_MASK) {
946
+ case GRN_OBJ_INVALID_WARN:
947
+ rb_ary_push(inspected_flags, rb_str_new_cstr("INVALID_WARN"));
948
+ break;
949
+ case GRN_OBJ_INVALID_IGNORE:
950
+ rb_ary_push(inspected_flags, rb_str_new_cstr("INVALID_IGNORE"));
951
+ break;
952
+ default:
953
+ break;
930
954
  }
931
955
  break;
932
956
  default:
@@ -1,7 +1,7 @@
1
1
  /* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
2
  /* vim: set sts=4 sw=4 ts=8 noet: */
3
3
  /*
4
- Copyright (C) 2009-2021 Sutou Kouhei <kou@clear-code.com>
4
+ Copyright (C) 2009-2022 Sutou Kouhei <kou@clear-code.com>
5
5
 
6
6
  This library is free software; you can redistribute it and/or
7
7
  modify it under the terms of the GNU Lesser General Public
@@ -129,11 +129,45 @@ VALUE rb_cGrnPatriciaTrie;
129
129
  *
130
130
  * 省略した場合はShortText型をキーとして使用する。この場合、
131
131
  * 4096バイトまで使用可能である。
132
+ *
133
+ * @option options :key_size (nil) The key size in bytes or the
134
+ * max key size in bytes. If `key_variable_size: true` is also
135
+ * specified, the size is the max key size not the key size.
136
+ *
137
+ * This is used only when the `:context` isn't associated with a
138
+ * database. If `:context` is associated with a database, this
139
+ * value is ignored.
140
+ *
141
+ * @see :key_type
142
+ * @see :key_variable_size
143
+ * @since 12.0.8
144
+ *
145
+ * @option options :key_variable_size (false) Whether the key is
146
+ * variable size or not.
147
+ *
148
+ * This is used only when the `:context` isn't associated with a
149
+ * database. If `:context` is associated with a database, this
150
+ * value is ignored.
151
+ *
152
+ * @see :key_type
153
+ * @see :key_size
154
+ * @since 12.0.8
155
+ *
132
156
  * @option options :value_type
133
157
  * 値の型を指定する。省略すると値のための領域を確保しない。
134
158
  * 値を保存したい場合は必ず指定すること。
135
159
  *
136
160
  * 参考: {Groonga::Type.new}
161
+ *
162
+ * @option options :value_size (nil) The value size in bytes.
163
+ *
164
+ * This is used only when the `:context` isn't associated with a
165
+ * database. If `:context` is associated with a database, this
166
+ * value is ignored.
167
+ *
168
+ * @see :value_type
169
+ * @since 12.0.8
170
+ *
137
171
  * @option options :default_tokenizer
138
172
  * {Groonga::IndexColumn} で使用するトークナイザを指定する。
139
173
  * デフォルトでは何も設定されていないので、テーブルに
@@ -170,7 +204,10 @@ rb_grn_patricia_trie_s_create (int argc, VALUE *argv, VALUE klass)
170
204
  VALUE rb_table;
171
205
  VALUE options, rb_context, rb_name, rb_path, rb_persistent;
172
206
  VALUE rb_key_normalize, rb_key_with_sis, rb_key_type;
207
+ VALUE rb_key_size;
208
+ VALUE rb_key_variable_size;
173
209
  VALUE rb_value_type;
210
+ VALUE rb_value_size;
174
211
  VALUE rb_default_tokenizer;
175
212
  VALUE rb_token_filters;
176
213
  VALUE rb_sub_records;
@@ -186,7 +223,10 @@ rb_grn_patricia_trie_s_create (int argc, VALUE *argv, VALUE klass)
186
223
  "key_normalize", &rb_key_normalize,
187
224
  "key_with_sis", &rb_key_with_sis,
188
225
  "key_type", &rb_key_type,
226
+ "key_size", &rb_key_size,
227
+ "key_variable_size", &rb_key_variable_size,
189
228
  "value_type", &rb_value_type,
229
+ "value_size", &rb_value_size,
190
230
  "default_tokenizer", &rb_default_tokenizer,
191
231
  "token_filters", &rb_token_filters,
192
232
  "sub_records", &rb_sub_records,
@@ -227,10 +267,26 @@ rb_grn_patricia_trie_s_create (int argc, VALUE *argv, VALUE klass)
227
267
  if (RVAL2CBOOL(rb_sub_records))
228
268
  flags |= GRN_OBJ_WITH_SUBREC;
229
269
 
230
- table = grn_table_create(context, name, name_size, path,
231
- flags, key_type, value_type);
232
- if (!table)
233
- rb_grn_context_check(context, rb_ary_new_from_values(argc, argv));
270
+ if (grn_ctx_db(context)) {
271
+ table = grn_table_create(context, name, name_size, path,
272
+ flags, key_type, value_type);
273
+ if (!table)
274
+ rb_grn_context_check(context, rb_ary_new_from_values(argc, argv));
275
+ } else {
276
+ unsigned int key_size = NUM2UINT(rb_key_size);
277
+ unsigned int value_size =
278
+ RB_NIL_P(rb_value_size) ? 0 : NUM2UINT(rb_value_size);
279
+ if (RVAL2CBOOL(rb_key_variable_size)) {
280
+ flags |= GRN_OBJ_KEY_VAR_SIZE;
281
+ }
282
+ table = (grn_obj *)grn_pat_create(context,
283
+ path,
284
+ key_size,
285
+ value_size,
286
+ flags);
287
+ if (!table)
288
+ rb_grn_context_check(context, rb_ary_new_from_values(argc, argv));
289
+ }
234
290
  rb_table = GRNOBJECT2RVAL(klass, context, table, GRN_TRUE);
235
291
 
236
292
  if (!NIL_P(rb_default_tokenizer))
@@ -1,6 +1,6 @@
1
1
  /* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
2
  /*
3
- Copyright (C) 2016-2021 Sutou Kouhei <kou@clear-code.com>
3
+ Copyright (C) 2016-2022 Sutou Kouhei <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
@@ -38,6 +38,12 @@ static rb_data_type_t data_type = {
38
38
  0
39
39
  };
40
40
 
41
+ static VALUE
42
+ rb_grn_request_timer_id_alloc (VALUE klass)
43
+ {
44
+ return TypedData_Wrap_Struct(klass, &data_type, NULL);
45
+ }
46
+
41
47
  void *
42
48
  rb_grn_request_timer_id_from_ruby_object (VALUE rb_id)
43
49
  {
@@ -61,4 +67,6 @@ rb_grn_init_request_timer_id (VALUE mGrn)
61
67
  {
62
68
  rb_cGrnRequestTimerID =
63
69
  rb_define_class_under(mGrn, "RequestTimerID", rb_cObject);
70
+ rb_define_alloc_func(rb_cGrnRequestTimerID,
71
+ rb_grn_request_timer_id_alloc);
64
72
  }
@@ -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-2021 Sutou Kouhei <kou@clear-code.com>
3
+ Copyright (C) 2009-2022 Sutou Kouhei <kou@clear-code.com>
4
4
  Copyright (C) 2014-2016 Masafumi Yokoyama <yokoyama@clear-code.com>
5
5
 
6
6
  This library is free software; you can redistribute it and/or
@@ -344,7 +344,7 @@ rb_grn_table_key_support_get_key (VALUE self, VALUE rb_id)
344
344
  if (key_size == 0)
345
345
  return Qnil;
346
346
 
347
- if (GRN_BULK_VSIZE(key) < key_size) {
347
+ if (GRN_BULK_VSIZE(key) < (size_t)key_size) {
348
348
  grn_bulk_reserve(context, key, key_size);
349
349
  grn_table_get_key(context, table, id, GRN_BULK_HEAD(key), key_size);
350
350
  }
@@ -540,7 +540,11 @@ rb_grn_table_key_support_array_set (VALUE self, VALUE rb_key, VALUE rb_values)
540
540
  data.id = id;
541
541
  data.table = table;
542
542
  data.rb_grn_object.context = context;
543
- rb_iterate(rb_each, rb_values, set_value, (VALUE)&data);
543
+ {
544
+ ID id_each;
545
+ CONST_ID(id_each, "each");
546
+ rb_block_call(rb_values, id_each, 0, NULL, set_value, (VALUE)&data);
547
+ }
544
548
 
545
549
  return Qnil;
546
550
  }