rroonga 12.0.0 → 12.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|