rroonga 12.0.0 → 12.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 +12 -0
- data/ext/groonga/rb-grn-column.c +24 -2
- data/ext/groonga/rb-grn-data-column.c +193 -1
- data/ext/groonga/rb-grn-expression-builder.c +16 -14
- data/ext/groonga/rb-grn-index-column.c +1 -24
- data/ext/groonga/rb-grn-inverted-index-cursor.c +12 -1
- data/ext/groonga/rb-grn-object.c +25 -1
- data/ext/groonga/rb-grn-request-timer-id.c +9 -1
- data/ext/groonga/rb-grn-table-key-support.c +7 -3
- data/ext/groonga/rb-grn-table.c +74 -1
- data/ext/groonga/rb-grn-variable-size-column.c +35 -28
- data/ext/groonga/rb-grn.h +1 -1
- data/lib/groonga/schema.rb +34 -3
- data/rroonga-build.rb +4 -4
- data/test/test-column.rb +37 -3
- data/test/test-data-column.rb +195 -1
- metadata +63 -63
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e1afd17d5a479b6e5c472729d3548f3551b15cec0db30bbf46f8a43266d96a1
|
4
|
+
data.tar.gz: 05b218925dfbf29f4deb9d34c5ab6408cbcecdf11de588d2c8d45efaf0e28417
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ce775711f0f90338164a3f5c3f5c7731b9f8d06e8563836f0adb7de325f471d43d9be5bb09a428f2598e801dca502564fbea3b9cb285bb38d8f7310cd22a7251
|
7
|
+
data.tar.gz: fe208b1bf0ee5e04fbccbe6220b2b0b44e80e9825c8b9aaab86017d7d87de8185a7a51eea026532b6d13fdcd310cab7e8484702514e5b256d6957f984107f2c2
|
data/doc/text/news.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
# NEWS
|
2
2
|
|
3
|
+
## 12.0.2: 2022-04-04 {#version-12-0-2}
|
4
|
+
|
5
|
+
### Improvements
|
6
|
+
|
7
|
+
* Added support for `:weight_float32` for vector column. This
|
8
|
+
requires Groonga 12.0.2 or later.
|
9
|
+
|
10
|
+
* Removed needless `Groonga::IndexColumn#with_weight?`.
|
11
|
+
|
12
|
+
* Added support for `:missing_mode` and `:invalid_mode` for scalar
|
13
|
+
column and vector column. This requires Groonga 12.0.2 or later.
|
14
|
+
|
3
15
|
## 12.0.0: 2022-02-09 {#version-12-0-0}
|
4
16
|
|
5
17
|
### Improvements
|
data/ext/groonga/rb-grn-column.c
CHANGED
@@ -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-
|
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
|
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-
|
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-
|
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
|
-
|
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
|
-
|
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(),
|
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
|
52
|
+
return rb_block_call(self, id_build, 0, NULL, build_block, self);
|
55
53
|
else
|
56
|
-
return
|
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
|
61
|
+
return rb_block_call(self, id_build, 0, NULL, build_block, self);
|
64
62
|
else
|
65
|
-
return
|
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-
|
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-
|
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",
|
data/ext/groonga/rb-grn-object.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-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,6 +1,6 @@
|
|
1
1
|
/* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2
2
|
/*
|
3
|
-
Copyright (C) 2016-
|
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-
|
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
|
-
|
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
|
}
|
data/ext/groonga/rb-grn-table.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-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
|
|
@@ -255,6 +255,36 @@ rb_grn_table_inspect (VALUE self)
|
|
255
255
|
* * `:lz4`: Compressed by LZ4.
|
256
256
|
* * `:zstd`: Compressed by Zstandard.
|
257
257
|
* * `:zstandard`: Compressed by Zstandard.
|
258
|
+
* @option options :weight_float32 [Boolean] (false)
|
259
|
+
* It specifies whether weight is stored as 32 bit float or not.
|
260
|
+
*
|
261
|
+
* You can't use this option for scalar column.
|
262
|
+
*
|
263
|
+
* @since 12.0.2
|
264
|
+
* @option options [:add, :ignore, :nil, nil] :missing_mode (nil)
|
265
|
+
* It specifies how to process missing value.
|
266
|
+
*
|
267
|
+
* * `:add`, `nil`: Correspond to `MISSING_ADD`
|
268
|
+
* * `:ignore`: Correspond to `MISSING_IGNORE`
|
269
|
+
* * `:nil`: Correspond to `MISSING_NIL`
|
270
|
+
*
|
271
|
+
* See
|
272
|
+
* https://groonga.org/docs/reference/commands/column_create.html#column-create-missing-mode
|
273
|
+
* for each `MISSING_*` values.
|
274
|
+
*
|
275
|
+
* @since 12.0.2
|
276
|
+
* @option options [:error, :warn, :ignore, nil] :invalid_mode (nil)
|
277
|
+
* It specifies how to process invalid value.
|
278
|
+
*
|
279
|
+
* * `:add`, `nil`: Correspond to `INVALID_ERROR`
|
280
|
+
* * `:warn`: Correspond to `INVALID_WARN`
|
281
|
+
* * `:ignore`: Correspond to `INVALID_IGNORE`
|
282
|
+
*
|
283
|
+
* See
|
284
|
+
* https://groonga.org/docs/reference/commands/column_create.html#column-create-invalid-mode
|
285
|
+
* for each `INVALID_*` values.
|
286
|
+
*
|
287
|
+
* @since 12.0.2
|
258
288
|
*
|
259
289
|
* @return [Groonga::FixSizeColumn, Groonga::VariableSizeColumn]
|
260
290
|
*/
|
@@ -269,6 +299,9 @@ rb_grn_table_define_column (int argc, VALUE *argv, VALUE self)
|
|
269
299
|
grn_column_flags flags = 0;
|
270
300
|
VALUE rb_name, rb_value_type;
|
271
301
|
VALUE options, rb_path, rb_persistent, rb_compress, rb_type, rb_with_weight;
|
302
|
+
VALUE rb_weight_float32;
|
303
|
+
VALUE rb_missing_mode;
|
304
|
+
VALUE rb_invalid_mode;
|
272
305
|
VALUE columns;
|
273
306
|
VALUE rb_column;
|
274
307
|
|
@@ -288,6 +321,9 @@ rb_grn_table_define_column (int argc, VALUE *argv, VALUE self)
|
|
288
321
|
"type", &rb_type,
|
289
322
|
"with_weight", &rb_with_weight,
|
290
323
|
"compress", &rb_compress,
|
324
|
+
"weight_float32", &rb_weight_float32,
|
325
|
+
"missing_mode", &rb_missing_mode,
|
326
|
+
"invalid_mode", &rb_invalid_mode,
|
291
327
|
NULL);
|
292
328
|
|
293
329
|
value_type = RVAL2GRNOBJECT(rb_value_type, &context);
|
@@ -347,6 +383,43 @@ rb_grn_table_define_column (int argc, VALUE *argv, VALUE self)
|
|
347
383
|
rb_grn_inspect(rb_compress));
|
348
384
|
}
|
349
385
|
|
386
|
+
if (RVAL2CBOOL(rb_weight_float32)) {
|
387
|
+
if (flags & GRN_OBJ_COLUMN_VECTOR) {
|
388
|
+
flags |= GRN_OBJ_WEIGHT_FLOAT32;
|
389
|
+
} else {
|
390
|
+
rb_raise(rb_eArgError,
|
391
|
+
"can't use 32 bit float weight for scalar column");
|
392
|
+
}
|
393
|
+
}
|
394
|
+
|
395
|
+
if (NIL_P(rb_missing_mode) ||
|
396
|
+
rb_grn_equal_option(rb_missing_mode, "add")) {
|
397
|
+
flags |= GRN_OBJ_MISSING_ADD;
|
398
|
+
} else if (rb_grn_equal_option(rb_missing_mode, "ignore")) {
|
399
|
+
flags |= GRN_OBJ_MISSING_IGNORE;
|
400
|
+
} else if (rb_grn_equal_option(rb_missing_mode, "nil")) {
|
401
|
+
flags |= GRN_OBJ_MISSING_NIL;
|
402
|
+
} else {
|
403
|
+
rb_raise(rb_eArgError,
|
404
|
+
"invalid missing mode: %s: "
|
405
|
+
"available types: [:add, :ignore, :nil, nil]",
|
406
|
+
rb_grn_inspect(rb_missing_mode));
|
407
|
+
}
|
408
|
+
|
409
|
+
if (NIL_P(rb_invalid_mode) ||
|
410
|
+
rb_grn_equal_option(rb_invalid_mode, "error")) {
|
411
|
+
flags |= GRN_OBJ_INVALID_ERROR;
|
412
|
+
} else if (rb_grn_equal_option(rb_invalid_mode, "warn")) {
|
413
|
+
flags |= GRN_OBJ_INVALID_WARN;
|
414
|
+
} else if (rb_grn_equal_option(rb_invalid_mode, "ignore")) {
|
415
|
+
flags |= GRN_OBJ_INVALID_IGNORE;
|
416
|
+
} else {
|
417
|
+
rb_raise(rb_eArgError,
|
418
|
+
"invalid invalid mode: %s: "
|
419
|
+
"available types: [:add, :warn, :ignore, nil]",
|
420
|
+
rb_grn_inspect(rb_invalid_mode));
|
421
|
+
}
|
422
|
+
|
350
423
|
column = grn_column_create(context, table, name, name_size,
|
351
424
|
path, flags, value_type);
|
352
425
|
if (context->rc) {
|
@@ -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-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
|
@@ -193,23 +193,24 @@ rb_grn_variable_size_column_array_reference (VALUE self, VALUE rb_id)
|
|
193
193
|
rb_value = rb_ary_new2(n);
|
194
194
|
for (i = 0; i < n; i++) {
|
195
195
|
VALUE rb_element_value;
|
196
|
-
|
196
|
+
float weight = 0.0;
|
197
197
|
grn_id domain;
|
198
198
|
VALUE rb_element;
|
199
199
|
|
200
200
|
if (value->header.type == GRN_UVECTOR) {
|
201
201
|
grn_id id;
|
202
|
-
id =
|
202
|
+
id = grn_uvector_get_element_record(context, value, i, &weight);
|
203
203
|
rb_element_value = rb_grn_record_new(rb_range, id, Qnil);
|
204
204
|
} else {
|
205
205
|
const char *element_value;
|
206
206
|
unsigned int element_value_length;
|
207
|
-
element_value_length =
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
207
|
+
element_value_length =
|
208
|
+
grn_vector_get_element_float(context,
|
209
|
+
value,
|
210
|
+
i,
|
211
|
+
&element_value,
|
212
|
+
&weight,
|
213
|
+
&domain);
|
213
214
|
rb_element_value = rb_str_new(element_value, element_value_length);
|
214
215
|
}
|
215
216
|
|
@@ -217,9 +218,15 @@ rb_grn_variable_size_column_array_reference (VALUE self, VALUE rb_id)
|
|
217
218
|
rb_hash_aset(rb_element,
|
218
219
|
RB_GRN_INTERN("value"),
|
219
220
|
rb_element_value);
|
220
|
-
|
221
|
-
|
222
|
-
|
221
|
+
if (flags & GRN_OBJ_WEIGHT_FLOAT32) {
|
222
|
+
rb_hash_aset(rb_element,
|
223
|
+
RB_GRN_INTERN("weight"),
|
224
|
+
rb_float_new(weight));
|
225
|
+
} else {
|
226
|
+
rb_hash_aset(rb_element,
|
227
|
+
RB_GRN_INTERN("weight"),
|
228
|
+
UINT2NUM((uint32_t)weight));
|
229
|
+
}
|
223
230
|
|
224
231
|
rb_ary_push(rb_value, rb_element);
|
225
232
|
}
|
@@ -240,22 +247,22 @@ hash_element_to_vector_element(VALUE key, VALUE value, VALUE user_data)
|
|
240
247
|
{
|
241
248
|
HashElementToVectorElementData *data =
|
242
249
|
(HashElementToVectorElementData *)user_data;
|
243
|
-
|
250
|
+
float weight;
|
244
251
|
|
245
|
-
weight =
|
252
|
+
weight = (float)NUM2DBL(value);
|
246
253
|
|
247
254
|
if (data->vector->header.type == GRN_UVECTOR) {
|
248
255
|
grn_id id = RVAL2GRNID(key, data->context, data->range, data->self);
|
249
|
-
|
256
|
+
grn_uvector_add_element_record(data->context, data->vector, id, weight);
|
250
257
|
} else {
|
251
258
|
GRN_BULK_REWIND(data->element_value);
|
252
259
|
RVAL2GRNBULK(key, data->context, data->element_value);
|
253
260
|
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
261
|
+
grn_vector_add_element_float(data->context, data->vector,
|
262
|
+
GRN_BULK_HEAD(data->element_value),
|
263
|
+
GRN_BULK_VSIZE(data->element_value),
|
264
|
+
weight,
|
265
|
+
data->element_value->header.domain);
|
259
266
|
}
|
260
267
|
|
261
268
|
return ST_CONTINUE;
|
@@ -405,7 +412,7 @@ rb_grn_variable_size_column_array_set (VALUE self, VALUE rb_id, VALUE rb_value)
|
|
405
412
|
int i, n;
|
406
413
|
n = RARRAY_LEN(rb_value);
|
407
414
|
for (i = 0; i < n; i++) {
|
408
|
-
|
415
|
+
float weight = 0;
|
409
416
|
VALUE rb_element_value, rb_weight;
|
410
417
|
|
411
418
|
rb_grn_scan_options(RARRAY_PTR(rb_value)[i],
|
@@ -414,23 +421,23 @@ rb_grn_variable_size_column_array_set (VALUE self, VALUE rb_id, VALUE rb_value)
|
|
414
421
|
NULL);
|
415
422
|
|
416
423
|
if (!NIL_P(rb_weight)) {
|
417
|
-
weight =
|
424
|
+
weight = (float)NUM2DBL(rb_weight);
|
418
425
|
}
|
419
426
|
|
420
427
|
if (value->header.type == GRN_UVECTOR) {
|
421
428
|
grn_id id = RVAL2GRNID(rb_element_value, context, range, self);
|
422
|
-
|
429
|
+
grn_uvector_add_element_record(context, value, id, weight);
|
423
430
|
} else {
|
424
431
|
GRN_BULK_REWIND(element_value);
|
425
432
|
if (!NIL_P(rb_element_value)) {
|
426
433
|
RVAL2GRNBULK(rb_element_value, context, element_value);
|
427
434
|
}
|
428
435
|
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
436
|
+
grn_vector_add_element_float(context, value,
|
437
|
+
GRN_BULK_HEAD(element_value),
|
438
|
+
GRN_BULK_VSIZE(element_value),
|
439
|
+
weight,
|
440
|
+
element_value->header.domain);
|
434
441
|
}
|
435
442
|
}
|
436
443
|
} else if (RVAL2CBOOL(rb_obj_is_kind_of(rb_value, rb_cHash))) {
|
data/ext/groonga/rb-grn.h
CHANGED
@@ -93,7 +93,7 @@ RB_GRN_BEGIN_DECLS
|
|
93
93
|
|
94
94
|
#define RB_GRN_MAJOR_VERSION 12
|
95
95
|
#define RB_GRN_MINOR_VERSION 0
|
96
|
-
#define RB_GRN_MICRO_VERSION
|
96
|
+
#define RB_GRN_MICRO_VERSION 2
|
97
97
|
|
98
98
|
#define RB_GRN_OBJECT(object) ((RbGrnObject *)(object))
|
99
99
|
#define RB_GRN_NAMED_OBJECT(object) ((RbGrnNamedObject *)(object))
|
data/lib/groonga/schema.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
# Copyright (C) 2009-2016 Kouhei Sutou <kou@clear-code.com>
|
1
|
+
# Copyright (C) 2009-2022 Sutou Kouhei <kou@clear-code.com>
|
4
2
|
# Copyright (C) 2014-2015 Masafumi Yokoyama <yokoyama@clear-code.com>
|
5
3
|
#
|
6
4
|
# This library is free software; you can redistribute it and/or
|
@@ -867,6 +865,36 @@ module Groonga
|
|
867
865
|
# * `:lz4`: Compzressed by LZ4.
|
868
866
|
# * `:zstd`: Compressed by Zstandard.
|
869
867
|
# * `:zstandard`: Compressed by Zstandard.
|
868
|
+
# @option options [Boolean] :weight_float32 (false)
|
869
|
+
# It specifies whether the column uses 32 bit float for weight or not.
|
870
|
+
#
|
871
|
+
# You can't use this option for scalar column.
|
872
|
+
#
|
873
|
+
# @since 12.0.2
|
874
|
+
# @option options [:add, :ignore, :nil, nil] :missing_mode (nil)
|
875
|
+
# It specifies how to process missing value.
|
876
|
+
#
|
877
|
+
# * `:add`, `nil`: Correspond to `MISSING_ADD`
|
878
|
+
# * `:ignore`: Correspond to `MISSING_IGNORE`
|
879
|
+
# * `:nil`: Correspond to `MISSING_NIL`
|
880
|
+
#
|
881
|
+
# See
|
882
|
+
# https://groonga.org/docs/reference/commands/column_create.html#column-create-missing-mode
|
883
|
+
# for each `MISSING_*` values.
|
884
|
+
#
|
885
|
+
# @since 12.0.2
|
886
|
+
# @option options [:error, :warn, :ignore, nil] :invalid_mode (nil)
|
887
|
+
# It specifies how to process invalid value.
|
888
|
+
#
|
889
|
+
# * `:add`, `nil`: Correspond to `INVALID_ERROR`
|
890
|
+
# * `:warn`: Correspond to `INVALID_WARN`
|
891
|
+
# * `:ignore`: Correspond to `INVALID_IGNORE`
|
892
|
+
#
|
893
|
+
# See
|
894
|
+
# https://groonga.org/docs/reference/commands/column_create.html#column-create-invalid-mode
|
895
|
+
# for each `INVALID_*` values.
|
896
|
+
#
|
897
|
+
# @since 12.0.2
|
870
898
|
def column(name, type, options={})
|
871
899
|
definition = self[name, ColumnDefinition]
|
872
900
|
if definition.nil?
|
@@ -1540,6 +1568,9 @@ module Groonga
|
|
1540
1568
|
:type => @options[:type],
|
1541
1569
|
:with_weight => @options[:with_weight],
|
1542
1570
|
:compress => @options[:compress],
|
1571
|
+
:weight_float32 => @options[:weight_float32],
|
1572
|
+
:missing_mode => @options[:missing_mode],
|
1573
|
+
:invalid_mode => @options[:invalid_mode],
|
1543
1574
|
}
|
1544
1575
|
end
|
1545
1576
|
|
data/rroonga-build.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2009-
|
1
|
+
# Copyright (C) 2009-2022 Sutou Kouhei <kou@clear-code.com>
|
2
2
|
# Copyright (C) 2015-2017 Masafumi Yokoyama <yokoyama@clear-code.com>
|
3
3
|
#
|
4
4
|
# This library is free software; you can redistribute it and/or
|
@@ -16,12 +16,12 @@
|
|
16
16
|
|
17
17
|
module RroongaBuild
|
18
18
|
module RequiredGroongaVersion
|
19
|
-
MAJOR =
|
19
|
+
MAJOR = 12
|
20
20
|
MINOR = 0
|
21
|
-
MICRO =
|
21
|
+
MICRO = 2
|
22
22
|
VERSION = [MAJOR, MINOR, MICRO]
|
23
23
|
STRING = VERSION.join(".")
|
24
|
-
RELEASED_DATE = Time.utc(
|
24
|
+
RELEASED_DATE = Time.utc(2022, 3, 29)
|
25
25
|
end
|
26
26
|
|
27
27
|
module_function
|
data/test/test-column.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2009-
|
1
|
+
# Copyright (C) 2009-2022 Sutou Kouhei <kou@clear-code.com>
|
2
2
|
# Copyright (C) 2016 Masafumi Yokoyama <yokoyama@clear-code.com>
|
3
3
|
#
|
4
4
|
# This library is free software; you can redistribute it and/or
|
@@ -431,12 +431,19 @@ class ColumnTest < Test::Unit::TestCase
|
|
431
431
|
def setup_schema
|
432
432
|
Groonga::Schema.define do |schema|
|
433
433
|
schema.create_table("Shops", :type => :hash) do |table|
|
434
|
-
table.short_text("tags",
|
434
|
+
table.short_text("tags",
|
435
|
+
type: :vector,
|
436
|
+
with_weight: true)
|
437
|
+
table.short_text("tags_float32",
|
438
|
+
type: :vector,
|
439
|
+
with_weight: true,
|
440
|
+
weight_float32: true)
|
435
441
|
end
|
436
442
|
|
437
443
|
schema.create_table("Tags",
|
438
444
|
:type => :patricia_trie) do |table|
|
439
|
-
table.index("Shops.tags",
|
445
|
+
table.index("Shops.tags",
|
446
|
+
with_weight: true)
|
440
447
|
end
|
441
448
|
end
|
442
449
|
|
@@ -453,6 +460,33 @@ class ColumnTest < Test::Unit::TestCase
|
|
453
460
|
select_by_tag("curry"))
|
454
461
|
end
|
455
462
|
|
463
|
+
def test_vector_weight_float32
|
464
|
+
@shops.add("Soul Food India",
|
465
|
+
:tags_float32 => [
|
466
|
+
{:value => "curry", :weight => 11.1},
|
467
|
+
{:value => "hot", :weight => 33.3},
|
468
|
+
])
|
469
|
+
actual = @shops.collect do |shop|
|
470
|
+
attributes = shop.attributes
|
471
|
+
attributes["tags_float32"].each do |tag|
|
472
|
+
tag[:weight] = tag[:weight].round(1)
|
473
|
+
end
|
474
|
+
attributes
|
475
|
+
end
|
476
|
+
assert_equal([
|
477
|
+
{
|
478
|
+
"_id" => 1,
|
479
|
+
"_key" => "Soul Food India",
|
480
|
+
"tags" => [],
|
481
|
+
"tags_float32" => [
|
482
|
+
{:value => "curry", :weight => 11.1},
|
483
|
+
{:value => "hot", :weight => 33.3},
|
484
|
+
]
|
485
|
+
},
|
486
|
+
],
|
487
|
+
actual)
|
488
|
+
end
|
489
|
+
|
456
490
|
def test_offline_index
|
457
491
|
@shops.add("Soul Food India",
|
458
492
|
:tags => [
|
data/test/test-data-column.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2016-
|
1
|
+
# Copyright (C) 2016-2022 Sutou Kouhei <kou@clear-code.com>
|
2
2
|
#
|
3
3
|
# This library is free software; you can redistribute it and/or
|
4
4
|
# modify it under the terms of the GNU Lesser General Public
|
@@ -119,4 +119,198 @@ class DataColumnTest < Test::Unit::TestCase
|
|
119
119
|
comments.collect {|comment| [comment.base, comment.plus1]})
|
120
120
|
end
|
121
121
|
end
|
122
|
+
|
123
|
+
sub_test_case "#missing_mode" do
|
124
|
+
def test_add
|
125
|
+
Groonga::Schema.define do |schema|
|
126
|
+
schema.create_table("Tags",
|
127
|
+
type: :hash,
|
128
|
+
key_type: :short_text) do |table|
|
129
|
+
end
|
130
|
+
schema.create_table("Memos") do |table|
|
131
|
+
table.reference("tags",
|
132
|
+
"Tags",
|
133
|
+
type: :vector,
|
134
|
+
missing_mode: :add)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
memos = Groonga["Memos"]
|
138
|
+
memos_tags = Groonga["Memos.tags"]
|
139
|
+
tags = Groonga["Tags"]
|
140
|
+
|
141
|
+
record = memos.add(tags: ["nonexistent"])
|
142
|
+
|
143
|
+
assert_equal({
|
144
|
+
missing_mode: :add,
|
145
|
+
missing_add: true,
|
146
|
+
missing_ignore: false,
|
147
|
+
missing_nil: false,
|
148
|
+
values: [tags["nonexistent"]],
|
149
|
+
},
|
150
|
+
{
|
151
|
+
missing_mode: memos_tags.missing_mode,
|
152
|
+
missing_add: memos_tags.missing_add?,
|
153
|
+
missing_ignore: memos_tags.missing_ignore?,
|
154
|
+
missing_nil: memos_tags.missing_nil?,
|
155
|
+
values: record.tags,
|
156
|
+
})
|
157
|
+
end
|
158
|
+
|
159
|
+
def test_ignore
|
160
|
+
Groonga::Schema.define do |schema|
|
161
|
+
schema.create_table("Tags",
|
162
|
+
type: :hash,
|
163
|
+
key_type: :short_text) do |table|
|
164
|
+
end
|
165
|
+
schema.create_table("Memos") do |table|
|
166
|
+
table.reference("tags",
|
167
|
+
"Tags",
|
168
|
+
type: :vector,
|
169
|
+
missing_mode: :ignore)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
memos = Groonga["Memos"]
|
173
|
+
memos_tags = Groonga["Memos.tags"]
|
174
|
+
|
175
|
+
record = memos.add(tags: ["nonexistent"])
|
176
|
+
|
177
|
+
assert_equal({
|
178
|
+
missing_mode: :ignore,
|
179
|
+
missing_add: false,
|
180
|
+
missing_ignore: true,
|
181
|
+
missing_nil: false,
|
182
|
+
values: [],
|
183
|
+
},
|
184
|
+
{
|
185
|
+
missing_mode: memos_tags.missing_mode,
|
186
|
+
missing_add: memos_tags.missing_add?,
|
187
|
+
missing_ignore: memos_tags.missing_ignore?,
|
188
|
+
missing_nil: memos_tags.missing_nil?,
|
189
|
+
values: record.tags,
|
190
|
+
})
|
191
|
+
end
|
192
|
+
|
193
|
+
def test_nil
|
194
|
+
Groonga::Schema.define do |schema|
|
195
|
+
schema.create_table("Tags",
|
196
|
+
type: :hash,
|
197
|
+
key_type: :short_text) do |table|
|
198
|
+
end
|
199
|
+
schema.create_table("Memos") do |table|
|
200
|
+
table.reference("tags",
|
201
|
+
"Tags",
|
202
|
+
type: :vector,
|
203
|
+
missing_mode: :nil,
|
204
|
+
invalid_mode: :ignore)
|
205
|
+
end
|
206
|
+
end
|
207
|
+
memos = Groonga["Memos"]
|
208
|
+
memos_tags = Groonga["Memos.tags"]
|
209
|
+
|
210
|
+
record = memos.add(tags: ["nonexistent"])
|
211
|
+
|
212
|
+
assert_equal({
|
213
|
+
missing_mode: :nil,
|
214
|
+
missing_add: false,
|
215
|
+
missing_ignore: false,
|
216
|
+
missing_nil: true,
|
217
|
+
values: [nil],
|
218
|
+
},
|
219
|
+
{
|
220
|
+
missing_mode: memos_tags.missing_mode,
|
221
|
+
missing_add: memos_tags.missing_add?,
|
222
|
+
missing_ignore: memos_tags.missing_ignore?,
|
223
|
+
missing_nil: memos_tags.missing_nil?,
|
224
|
+
values: record.tags,
|
225
|
+
})
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
sub_test_case "#invalid_mode" do
|
230
|
+
def test_error
|
231
|
+
Groonga::Schema.define do |schema|
|
232
|
+
schema.create_table("Memos") do |table|
|
233
|
+
table.uint32("count", invalid_mode: :error)
|
234
|
+
end
|
235
|
+
end
|
236
|
+
memos = Groonga["Memos"]
|
237
|
+
memos_count = Groonga["Memos.count"]
|
238
|
+
|
239
|
+
record = memos.add
|
240
|
+
assert_raise(Groonga::InvalidArgument) do
|
241
|
+
record.count = "invalid"
|
242
|
+
end
|
243
|
+
|
244
|
+
assert_equal({
|
245
|
+
invalid_mode: :error,
|
246
|
+
invalid_error: true,
|
247
|
+
invalid_warn: false,
|
248
|
+
invalid_ignore: false,
|
249
|
+
value: 0,
|
250
|
+
},
|
251
|
+
{
|
252
|
+
invalid_mode: memos_count.invalid_mode,
|
253
|
+
invalid_error: memos_count.invalid_error?,
|
254
|
+
invalid_warn: memos_count.invalid_warn?,
|
255
|
+
invalid_ignore: memos_count.invalid_ignore?,
|
256
|
+
value: record.count,
|
257
|
+
})
|
258
|
+
end
|
259
|
+
|
260
|
+
def test_warn
|
261
|
+
Groonga::Schema.define do |schema|
|
262
|
+
schema.create_table("Memos") do |table|
|
263
|
+
table.uint32("count", invalid_mode: :warn)
|
264
|
+
end
|
265
|
+
end
|
266
|
+
memos = Groonga["Memos"]
|
267
|
+
memos_count = Groonga["Memos.count"]
|
268
|
+
|
269
|
+
record = memos.add
|
270
|
+
record.count = "invalid"
|
271
|
+
|
272
|
+
assert_equal({
|
273
|
+
invalid_mode: :warn,
|
274
|
+
invalid_error: false,
|
275
|
+
invalid_warn: true,
|
276
|
+
invalid_ignore: false,
|
277
|
+
value: 0,
|
278
|
+
},
|
279
|
+
{
|
280
|
+
invalid_mode: memos_count.invalid_mode,
|
281
|
+
invalid_error: memos_count.invalid_error?,
|
282
|
+
invalid_warn: memos_count.invalid_warn?,
|
283
|
+
invalid_ignore: memos_count.invalid_ignore?,
|
284
|
+
value: record.count,
|
285
|
+
})
|
286
|
+
end
|
287
|
+
|
288
|
+
def test_ignore
|
289
|
+
Groonga::Schema.define do |schema|
|
290
|
+
schema.create_table("Memos") do |table|
|
291
|
+
table.uint32("count", invalid_mode: :ignore)
|
292
|
+
end
|
293
|
+
end
|
294
|
+
memos = Groonga["Memos"]
|
295
|
+
memos_count = Groonga["Memos.count"]
|
296
|
+
|
297
|
+
record = memos.add
|
298
|
+
record.count = "invalid"
|
299
|
+
|
300
|
+
assert_equal({
|
301
|
+
invalid_mode: :ignore,
|
302
|
+
invalid_error: false,
|
303
|
+
invalid_warn: false,
|
304
|
+
invalid_ignore: true,
|
305
|
+
value: 0,
|
306
|
+
},
|
307
|
+
{
|
308
|
+
invalid_mode: memos_count.invalid_mode,
|
309
|
+
invalid_error: memos_count.invalid_error?,
|
310
|
+
invalid_warn: memos_count.invalid_warn?,
|
311
|
+
invalid_ignore: memos_count.invalid_ignore?,
|
312
|
+
value: record.count,
|
313
|
+
})
|
314
|
+
end
|
315
|
+
end
|
122
316
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rroonga
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 12.0.
|
4
|
+
version: 12.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kouhei Sutou
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2022-
|
15
|
+
date: 2022-04-04 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: groonga-client
|
@@ -166,10 +166,10 @@ email:
|
|
166
166
|
- y.hayamizu@gmail.com
|
167
167
|
- dara@shidara.net
|
168
168
|
executables:
|
169
|
+
- grndump
|
169
170
|
- grntest-log-analyze
|
170
|
-
- groonga-index-dump
|
171
171
|
- groonga-database-inspect
|
172
|
-
-
|
172
|
+
- groonga-index-dump
|
173
173
|
extensions:
|
174
174
|
- ext/groonga/extconf.rb
|
175
175
|
extra_rdoc_files:
|
@@ -370,7 +370,7 @@ homepage: http://ranguba.org/#about-rroonga
|
|
370
370
|
licenses:
|
371
371
|
- LGPL-2.1
|
372
372
|
metadata:
|
373
|
-
msys2_mingw_dependencies: groonga>=
|
373
|
+
msys2_mingw_dependencies: groonga>=12.0.2
|
374
374
|
post_install_message:
|
375
375
|
rdoc_options: []
|
376
376
|
require_paths:
|
@@ -387,80 +387,80 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
387
387
|
- !ruby/object:Gem::Version
|
388
388
|
version: '0'
|
389
389
|
requirements: []
|
390
|
-
rubygems_version: 3.
|
390
|
+
rubygems_version: 3.4.0.dev
|
391
391
|
signing_key:
|
392
392
|
specification_version: 4
|
393
393
|
summary: Ruby bindings for Groonga that provide full text search and column store
|
394
394
|
features.
|
395
395
|
test_files:
|
396
|
-
- test/test-
|
397
|
-
- test/test
|
398
|
-
- test/test-
|
399
|
-
- test/test-schema-dumper.rb
|
400
|
-
- test/test-double-array-trie.rb
|
401
|
-
- test/test-expression-builder.rb
|
396
|
+
- test/groonga-test-utils.rb
|
397
|
+
- test/run-test.rb
|
398
|
+
- test/test-accessor.rb
|
402
399
|
- test/test-array.rb
|
403
|
-
- test/test-
|
404
|
-
- test/test-
|
400
|
+
- test/test-column-cache.rb
|
401
|
+
- test/test-column.rb
|
402
|
+
- test/test-command-select.rb
|
403
|
+
- test/test-config.rb
|
404
|
+
- test/test-context.rb
|
405
|
+
- test/test-convert.rb
|
406
|
+
- test/test-data-column.rb
|
405
407
|
- test/test-database-dumper.rb
|
408
|
+
- test/test-database-inspector.rb
|
409
|
+
- test/test-database.rb
|
410
|
+
- test/test-default-cache.rb
|
411
|
+
- test/test-double-array-trie.rb
|
412
|
+
- test/test-encoding.rb
|
413
|
+
- test/test-error-message.rb
|
414
|
+
- test/test-exception.rb
|
415
|
+
- test/test-expression-builder.rb
|
406
416
|
- test/test-expression.rb
|
417
|
+
- test/test-fix-size-column.rb
|
418
|
+
- test/test-flushable.rb
|
419
|
+
- test/test-geo-point.rb
|
420
|
+
- test/test-gqtp.rb
|
421
|
+
- test/test-hash.rb
|
422
|
+
- test/test-id.rb
|
423
|
+
- test/test-index-column.rb
|
424
|
+
- test/test-index-cursor.rb
|
425
|
+
- test/test-lock-timeout.rb
|
407
426
|
- test/test-logger.rb
|
408
|
-
- test/
|
409
|
-
- test/test-
|
410
|
-
- test/test-
|
427
|
+
- test/test-memory-pool.rb
|
428
|
+
- test/test-name.rb
|
429
|
+
- test/test-normalizer.rb
|
411
430
|
- test/test-operator.rb
|
412
|
-
- test/test-
|
413
|
-
- test/test-table-group.rb
|
414
|
-
- test/test-column.rb
|
431
|
+
- test/test-package-label.rb
|
415
432
|
- test/test-pagination.rb
|
416
|
-
- test/test-error-message.rb
|
417
|
-
- test/test-fix-size-column.rb
|
418
|
-
- test/test-table-arrow.rb
|
419
|
-
- test/test-sub-records.rb
|
420
|
-
- test/test-table-select-normalize.rb
|
421
|
-
- test/test-config.rb
|
422
433
|
- test/test-patricia-trie.rb
|
423
|
-
- test/test-
|
424
|
-
- test/test-
|
434
|
+
- test/test-plugin.rb
|
435
|
+
- test/test-procedure.rb
|
436
|
+
- test/test-query-logger.rb
|
437
|
+
- test/test-ractor.rb
|
438
|
+
- test/test-record.rb
|
439
|
+
- test/test-remote.rb
|
440
|
+
- test/test-request-canceler.rb
|
441
|
+
- test/test-request-timer.rb
|
425
442
|
- test/test-schema-create-table.rb
|
443
|
+
- test/test-schema-dumper.rb
|
444
|
+
- test/test-schema-type.rb
|
426
445
|
- test/test-schema.rb
|
427
|
-
- test/test-
|
428
|
-
- test/test-
|
429
|
-
- test/test-
|
430
|
-
- test/test-
|
431
|
-
- test/test-
|
432
|
-
- test/test-
|
433
|
-
- test/test-
|
446
|
+
- test/test-snippet.rb
|
447
|
+
- test/test-sub-records.rb
|
448
|
+
- test/test-table-arrow.rb
|
449
|
+
- test/test-table-dumper.rb
|
450
|
+
- test/test-table-group.rb
|
451
|
+
- test/test-table-key-support.rb
|
452
|
+
- test/test-table-offset-and-limit.rb
|
453
|
+
- test/test-table-select-mecab.rb
|
454
|
+
- test/test-table-select-normalize.rb
|
434
455
|
- test/test-table-select-weight.rb
|
435
|
-
- test/test-database-inspector.rb
|
436
|
-
- test/test-encoding.rb
|
437
|
-
- test/test-hash.rb
|
438
|
-
- test/test-schema-type.rb
|
439
|
-
- test/test-type.rb
|
440
|
-
- test/test-context.rb
|
441
|
-
- test/test-flushable.rb
|
442
|
-
- test/test-normalizer.rb
|
443
456
|
- test/test-table-select.rb
|
444
|
-
- test/test-index-cursor.rb
|
445
|
-
- test/test-remote.rb
|
446
|
-
- test/test-snippet.rb
|
447
|
-
- test/test-exception.rb
|
448
|
-
- test/groonga-test-utils.rb
|
449
457
|
- test/test-table-traverse.rb
|
450
|
-
- test/test-
|
458
|
+
- test/test-table.rb
|
451
459
|
- test/test-thread.rb
|
452
|
-
- test/test-
|
453
|
-
- test/test-
|
454
|
-
- test/test-
|
455
|
-
- test/test-data-column.rb
|
456
|
-
- test/test-ractor.rb
|
457
|
-
- test/test-geo-point.rb
|
458
|
-
- test/test-request-timer.rb
|
459
|
-
- test/test-table-select-mecab.rb
|
460
|
-
- test/test-version.rb
|
461
|
-
- test/test-package-label.rb
|
460
|
+
- test/test-token-regexp.rb
|
461
|
+
- test/test-type.rb
|
462
|
+
- test/test-variable-size-column.rb
|
462
463
|
- test/test-variable.rb
|
463
|
-
- test/test-
|
464
|
-
- test/test-
|
465
|
-
- test/test-
|
466
|
-
- test/test-name.rb
|
464
|
+
- test/test-vector-column.rb
|
465
|
+
- test/test-version.rb
|
466
|
+
- test/test-windows-event-logger.rb
|