rroonga 9.0.3 → 9.0.7
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 +30 -0
- data/ext/groonga/rb-grn-context.c +27 -0
- data/ext/groonga/rb-grn-flushable.c +7 -0
- data/ext/groonga/rb-grn-index-column.c +28 -0
- data/ext/groonga/rb-grn-index-cursor.c +19 -0
- data/ext/groonga/rb-grn-logger.c +17 -3
- data/ext/groonga/rb-grn-object.c +236 -22
- data/ext/groonga/rb-grn-table.c +68 -42
- data/ext/groonga/rb-grn.h +1 -1
- data/lib/groonga/dumper.rb +3 -0
- data/lib/groonga/record.rb +2 -2
- data/test/groonga-test-utils.rb +28 -5
- data/test/run-test.rb +0 -2
- data/test/test-accessor.rb +63 -7
- data/test/test-context.rb +25 -0
- data/test/test-exception.rb +5 -0
- data/test/test-flushable.rb +51 -6
- data/test/test-index-column.rb +67 -6
- data/test/test-index-cursor.rb +26 -0
- data/test/test-logger.rb +56 -11
- data/test/test-plugin.rb +1 -0
- data/test/test-query-logger.rb +4 -3
- data/test/test-record.rb +2 -1
- data/test/test-remote.rb +40 -10
- data/test/test-schema-dumper.rb +13 -0
- data/test/test-table.rb +21 -1
- data/test/test-variable.rb +23 -7
- metadata +59 -59
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b746af2f9292a37577708353f345c6d07f4555be55e75656fe442beadde5ed6b
|
4
|
+
data.tar.gz: 035b93cdea5b21cb27eba8e9d7780287e8efb7684560c0cda8769ed23de7b27d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 984a7bbf57965efeaa6167d8258be509a1bce1d3e688fc7b80b83bacdd9393e75a2d43a852f557c44a18007de92171e86218b0db0a5a19acc47d3b956f1f691c
|
7
|
+
data.tar.gz: 9f2071147b1c8bf0b921f00c52e7fbea18193100e71f9b47610e252425db346680dfed472a73ec5614e1a34c693c94bb73e1d117523a20ea31e664ecc2d6e21a
|
data/doc/text/news.md
CHANGED
@@ -1,5 +1,35 @@
|
|
1
1
|
# NEWS
|
2
2
|
|
3
|
+
## 9.0.7: 2019-08-29 {#version-9-0-7}
|
4
|
+
|
5
|
+
### Improvements
|
6
|
+
|
7
|
+
* {Groonga::Object#lexicon?} Added.
|
8
|
+
|
9
|
+
* {Groonga::IndexColumn} Added support "INDEX_LARGE".
|
10
|
+
|
11
|
+
* {Groonga::IndexCursor.min_enable?/min_enable=} Added.
|
12
|
+
|
13
|
+
* {Groonga::Context#match_escalation?/match_escalation=} Added.
|
14
|
+
|
15
|
+
* {Groona::Object#id_accessor?} Added.
|
16
|
+
|
17
|
+
* {Groonga::Logger.flags} Added support for thread id option.
|
18
|
+
|
19
|
+
* {Groonga::Object#bulk?} Added.
|
20
|
+
|
21
|
+
* {Groonga::Object#value_accessor?} Added.
|
22
|
+
|
23
|
+
* {Groonga::Table} Delegate support_score? from Groonga::Record to Groonga::Table.
|
24
|
+
|
25
|
+
* {Groonga::Flashable} Added support dependent option.
|
26
|
+
|
27
|
+
* {Groonga::Object#score_accessor?} Added.
|
28
|
+
|
29
|
+
* {Groonga::Object#nsubrecs_accessor? } Added.
|
30
|
+
|
31
|
+
* Translate a part of explanation of Groonga::Table into English.
|
32
|
+
|
3
33
|
## 9.0.3: 2019-05-10 {#version-9-0-3}
|
4
34
|
|
5
35
|
### Improvements
|
@@ -2,6 +2,7 @@
|
|
2
2
|
/*
|
3
3
|
Copyright (C) 2010-2018 Kouhei Sutou <kou@clear-code.com>
|
4
4
|
Copyright (C) 2016 Masafumi Yokoyama <yokoyama@clear-code.com>
|
5
|
+
Copyright (C) 2019 Horimoto Yasuhiro <horimoto@clear-code.com>
|
5
6
|
|
6
7
|
This library is free software; you can redistribute it and/or
|
7
8
|
modify it under the terms of the GNU Lesser General Public
|
@@ -604,6 +605,27 @@ rb_grn_context_get_ruby_encoding (VALUE self)
|
|
604
605
|
return rb_grn_encoding_to_ruby_encoding_object(encoding);
|
605
606
|
}
|
606
607
|
|
608
|
+
/*
|
609
|
+
* @overload force_match_escalation?
|
610
|
+
* @return [Bool]
|
611
|
+
*/
|
612
|
+
static VALUE
|
613
|
+
rb_grn_context_force_match_escalation_p (VALUE self)
|
614
|
+
{
|
615
|
+
return CBOOL2RVAL(grn_ctx_get_force_match_escalation(SELF(self)));
|
616
|
+
}
|
617
|
+
|
618
|
+
/*
|
619
|
+
* @overload force_match_escalation=(force_match_escalation)
|
620
|
+
*/
|
621
|
+
static VALUE
|
622
|
+
rb_grn_context_set_force_match_escalation (VALUE self, VALUE force_match_escalation)
|
623
|
+
{
|
624
|
+
grn_ctx_set_force_match_escalation(SELF(self),
|
625
|
+
RVAL2CBOOL(force_match_escalation));
|
626
|
+
return force_match_escalation;
|
627
|
+
}
|
628
|
+
|
607
629
|
/*
|
608
630
|
* このコンテキストを使って検索したときに検索の挙動をエスカレー
|
609
631
|
* ションする閾値を返します。
|
@@ -1039,6 +1061,11 @@ rb_grn_init_context (VALUE mGrn)
|
|
1039
1061
|
rb_define_method(cGrnContext, "encoding=", rb_grn_context_set_encoding, 1);
|
1040
1062
|
rb_define_method(cGrnContext, "ruby_encoding",
|
1041
1063
|
rb_grn_context_get_ruby_encoding, 0);
|
1064
|
+
|
1065
|
+
rb_define_method(cGrnContext, "force_match_escalation?",
|
1066
|
+
rb_grn_context_force_match_escalation_p, 0);
|
1067
|
+
rb_define_method(cGrnContext, "force_match_escalation=",
|
1068
|
+
rb_grn_context_set_force_match_escalation, 1);
|
1042
1069
|
rb_define_method(cGrnContext, "match_escalation_threshold",
|
1043
1070
|
rb_grn_context_get_match_escalation_threshold, 0);
|
1044
1071
|
rb_define_method(cGrnContext, "match_escalation_threshold=",
|
@@ -43,15 +43,20 @@ rb_grn_flushable_flush (int argc, VALUE *argv, VALUE self)
|
|
43
43
|
grn_ctx *context = NULL;
|
44
44
|
grn_obj *object = NULL;
|
45
45
|
VALUE rb_recursive_p;
|
46
|
+
VALUE rb_dependent_p;
|
46
47
|
VALUE rb_options;
|
47
48
|
|
48
49
|
rb_scan_args(argc, argv, "01", &rb_options);
|
49
50
|
rb_grn_scan_options(rb_options,
|
50
51
|
"recursive", &rb_recursive_p,
|
52
|
+
"dependent", &rb_dependent_p,
|
51
53
|
NULL);
|
52
54
|
if (NIL_P(rb_recursive_p)) {
|
53
55
|
rb_recursive_p = Qtrue;
|
54
56
|
}
|
57
|
+
if (NIL_P(rb_dependent_p)) {
|
58
|
+
rb_dependent_p = Qfalse;
|
59
|
+
}
|
55
60
|
|
56
61
|
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
57
62
|
NULL, NULL, NULL, NULL);
|
@@ -63,6 +68,8 @@ rb_grn_flushable_flush (int argc, VALUE *argv, VALUE self)
|
|
63
68
|
|
64
69
|
if (RVAL2CBOOL(rb_recursive_p)) {
|
65
70
|
grn_obj_flush_recursive(context, object);
|
71
|
+
} else if (RVAL2CBOOL(rb_dependent_p)) {
|
72
|
+
grn_obj_flush_recursive_dependent(context, object);
|
66
73
|
} else {
|
67
74
|
grn_obj_flush(context, object);
|
68
75
|
}
|
@@ -1,5 +1,6 @@
|
|
1
1
|
/* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2
2
|
/*
|
3
|
+
Copyright (C) 2019 Horimoto Yasuhiro <horimoto@clear-code.com>
|
3
4
|
Copyright (C) 2009-2017 Kouhei Sutou <kou@clear-code.com>
|
4
5
|
Copyright (C) 2016 Masafumi Yokoyama <yokoyama@clear-code.com>
|
5
6
|
|
@@ -972,6 +973,31 @@ rb_grn_index_column_medium_p (VALUE self)
|
|
972
973
|
return CBOOL2RVAL(flags & GRN_OBJ_INDEX_MEDIUM);
|
973
974
|
}
|
974
975
|
|
976
|
+
/*
|
977
|
+
* Checks whether the index column is large or not.
|
978
|
+
*
|
979
|
+
* @overload large?
|
980
|
+
* @return [Boolean] `true` if the index column size is large,
|
981
|
+
* `false` otherwise.
|
982
|
+
*
|
983
|
+
* @since 9.0.4
|
984
|
+
*/
|
985
|
+
static VALUE
|
986
|
+
rb_grn_index_column_large_p (VALUE self)
|
987
|
+
{
|
988
|
+
grn_obj *column;
|
989
|
+
grn_ctx *context;
|
990
|
+
grn_column_flags flags;
|
991
|
+
|
992
|
+
rb_grn_index_column_deconstruct(SELF(self), &column, &context,
|
993
|
+
NULL, NULL,
|
994
|
+
NULL, NULL, NULL, NULL, NULL,
|
995
|
+
NULL, NULL);
|
996
|
+
|
997
|
+
flags = grn_column_get_flags(context, column);
|
998
|
+
return CBOOL2RVAL(flags & GRN_OBJ_INDEX_LARGE);
|
999
|
+
}
|
1000
|
+
|
975
1001
|
static VALUE
|
976
1002
|
call_close (VALUE object)
|
977
1003
|
{
|
@@ -1442,6 +1468,8 @@ rb_grn_init_index_column (VALUE mGrn)
|
|
1442
1468
|
rb_grn_index_column_small_p, 0);
|
1443
1469
|
rb_define_method(rb_cGrnIndexColumn, "medium?",
|
1444
1470
|
rb_grn_index_column_medium_p, 0);
|
1471
|
+
rb_define_method(rb_cGrnIndexColumn, "large?",
|
1472
|
+
rb_grn_index_column_large_p, 0);
|
1445
1473
|
|
1446
1474
|
rb_define_method(rb_cGrnIndexColumn, "open_cursor",
|
1447
1475
|
rb_grn_index_column_open_cursor, -1);
|
@@ -2,6 +2,7 @@
|
|
2
2
|
/*
|
3
3
|
Copyright (C) 2011 Haruka Yoshihara <yoshihara@clear-code.com>
|
4
4
|
Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>
|
5
|
+
Copyright (C) 2019 Horimoto Yasuhiro <horimoto@clear-code.com>
|
5
6
|
|
6
7
|
This library is free software; you can redistribute it and/or
|
7
8
|
modify it under the terms of the GNU Lesser General Public
|
@@ -56,6 +57,19 @@ rb_grn_index_cursor_deconstruct (RbGrnIndexCursor *rb_grn_index_cursor,
|
|
56
57
|
range_id, range);
|
57
58
|
}
|
58
59
|
|
60
|
+
static VALUE
|
61
|
+
rb_grn_index_cursor_s_set_min_p (VALUE klass)
|
62
|
+
{
|
63
|
+
return CBOOL2RVAL(grn_ii_cursor_set_min_enable_get());
|
64
|
+
}
|
65
|
+
|
66
|
+
static VALUE
|
67
|
+
rb_grn_index_cursor_s_set_min_set (VALUE klass, VALUE enable)
|
68
|
+
{
|
69
|
+
grn_ii_cursor_set_min_enable_set(RVAL2CBOOL(enable));
|
70
|
+
return enable;
|
71
|
+
}
|
72
|
+
|
59
73
|
static VALUE
|
60
74
|
next_value (VALUE rb_posting,
|
61
75
|
grn_ctx *context, grn_obj *cursor, VALUE rb_table, VALUE rb_lexicon)
|
@@ -158,6 +172,11 @@ rb_grn_init_index_cursor (VALUE mGrn)
|
|
158
172
|
rb_define_alloc_func(rb_cGrnIndexCursor, rb_grn_object_alloc);
|
159
173
|
rb_include_module(rb_cGrnIndexCursor, rb_mEnumerable);
|
160
174
|
|
175
|
+
rb_define_singleton_method(rb_cGrnIndexCursor, "set_min?",
|
176
|
+
rb_grn_index_cursor_s_set_min_p, 0);
|
177
|
+
rb_define_singleton_method(rb_cGrnIndexCursor, "set_min=",
|
178
|
+
rb_grn_index_cursor_s_set_min_set, 1);
|
179
|
+
|
161
180
|
rb_define_method(rb_cGrnIndexCursor, "next", rb_grn_index_cursor_next, 0);
|
162
181
|
rb_define_method(rb_cGrnIndexCursor, "each", rb_grn_index_cursor_each, -1);
|
163
182
|
}
|
data/ext/groonga/rb-grn-logger.c
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
/*
|
3
3
|
Copyright (C) 2009-2015 Kouhei Sutou <kou@clear-code.com>
|
4
4
|
Copyright (C) 2016-2017 Masafumi Yokoyama <yokoyama@clear-code.com>
|
5
|
+
Copyright (C) 2019 Horimoto Yasuhiro <horimoto@clear-code.com>
|
5
6
|
|
6
7
|
This library is free software; you can redistribute it and/or
|
7
8
|
modify it under the terms of the GNU Lesser General Public
|
@@ -315,15 +316,23 @@ rb_grn_logger_fin (grn_ctx *ctx, void *user_data)
|
|
315
316
|
* ログの発生元のプロセスIDとgroongaのソースコードのファイ
|
316
317
|
* ル名、行番号、関数名をブロックに渡したいなら +true+ を指
|
317
318
|
* 定する。デフォルトでは渡す。
|
319
|
+
* @option options [Bool] :thread_id (true)
|
320
|
+
* Specifies whether `location` includes thread ID or not.
|
318
321
|
*/
|
319
322
|
static VALUE
|
320
323
|
rb_grn_logger_s_register (int argc, VALUE *argv, VALUE klass)
|
321
324
|
{
|
322
325
|
VALUE rb_context = Qnil;
|
323
326
|
grn_ctx *context;
|
324
|
-
VALUE rb_logger
|
325
|
-
VALUE
|
326
|
-
VALUE
|
327
|
+
VALUE rb_logger;
|
328
|
+
VALUE rb_callback;
|
329
|
+
VALUE rb_options;
|
330
|
+
VALUE rb_max_level;
|
331
|
+
VALUE rb_time;
|
332
|
+
VALUE rb_title;
|
333
|
+
VALUE rb_message;
|
334
|
+
VALUE rb_location;
|
335
|
+
VALUE rb_thread_id;
|
327
336
|
VALUE rb_flags;
|
328
337
|
grn_log_level max_level = GRN_LOG_DEFAULT_LEVEL;
|
329
338
|
int flags = 0;
|
@@ -343,6 +352,7 @@ rb_grn_logger_s_register (int argc, VALUE *argv, VALUE klass)
|
|
343
352
|
"title", &rb_title,
|
344
353
|
"message", &rb_message,
|
345
354
|
"location", &rb_location,
|
355
|
+
"thread_id", &rb_thread_id,
|
346
356
|
"flags", &rb_flags,
|
347
357
|
NULL);
|
348
358
|
if (!NIL_P(rb_max_level)) {
|
@@ -361,6 +371,9 @@ rb_grn_logger_s_register (int argc, VALUE *argv, VALUE klass)
|
|
361
371
|
if (NIL_P(rb_location) || CBOOL2RVAL(rb_location)) {
|
362
372
|
flags |= GRN_LOG_LOCATION;
|
363
373
|
}
|
374
|
+
if (NIL_P(rb_thread_id) || CBOOL2RVAL(rb_thread_id)) {
|
375
|
+
flags |= GRN_LOG_THREAD_ID;
|
376
|
+
}
|
364
377
|
if (!NIL_P(rb_flags)) {
|
365
378
|
flags = rb_funcall(rb_mGrnLoggerFlags, id_parse, 2,
|
366
379
|
INT2NUM(flags), rb_flags);
|
@@ -693,6 +706,7 @@ rb_grn_init_logger (VALUE mGrn)
|
|
693
706
|
DEFINE_FLAG(MESSAGE);
|
694
707
|
DEFINE_FLAG(LOCATION);
|
695
708
|
DEFINE_FLAG(PID);
|
709
|
+
DEFINE_FLAG(THREAD_ID);
|
696
710
|
#undef DEFINE_FLAG
|
697
711
|
|
698
712
|
rb_cGrnCallbackLogger =
|
data/ext/groonga/rb-grn-object.c
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
/*
|
3
3
|
Copyright (C) 2009-2018 Kouhei Sutou <kou@clear-code.com>
|
4
4
|
Copyright (C) 2014-2016 Masafumi Yokoyama <yokoyama@clear-code.com>
|
5
|
+
Copyright (C) 2019 Horimoto Yasuhiro <horimoto@clear-code.com>
|
5
6
|
|
6
7
|
This library is free software; you can redistribute it and/or
|
7
8
|
modify it under the terms of the GNU Lesser General Public
|
@@ -939,6 +940,8 @@ rb_grn_object_inspect_content_flags_with_label (VALUE inspected,
|
|
939
940
|
rb_ary_push(inspected_flags, rb_str_new_cstr("SMALL"));
|
940
941
|
if (column_flags & GRN_OBJ_INDEX_MEDIUM)
|
941
942
|
rb_ary_push(inspected_flags, rb_str_new_cstr("MEDIUM"));
|
943
|
+
if (column_flags & GRN_OBJ_INDEX_LARGE)
|
944
|
+
rb_ary_push(inspected_flags, rb_str_new_cstr("LARGE"));
|
942
945
|
break;
|
943
946
|
default:
|
944
947
|
break;
|
@@ -1355,7 +1358,7 @@ rb_grn_object_array_reference (VALUE self, VALUE rb_id)
|
|
1355
1358
|
return rb_value;
|
1356
1359
|
}
|
1357
1360
|
|
1358
|
-
static
|
1361
|
+
static bool
|
1359
1362
|
rb_uvector_value_p (RbGrnObject *rb_grn_object, VALUE rb_value)
|
1360
1363
|
{
|
1361
1364
|
VALUE first_element;
|
@@ -1363,7 +1366,7 @@ rb_uvector_value_p (RbGrnObject *rb_grn_object, VALUE rb_value)
|
|
1363
1366
|
switch (rb_grn_object->range->header.type) {
|
1364
1367
|
case GRN_TYPE:
|
1365
1368
|
if (!(rb_grn_object->range->header.flags & GRN_OBJ_KEY_VAR_SIZE)) {
|
1366
|
-
return
|
1369
|
+
return true;
|
1367
1370
|
}
|
1368
1371
|
break;
|
1369
1372
|
case GRN_TABLE_HASH_KEY:
|
@@ -1379,7 +1382,7 @@ rb_uvector_value_p (RbGrnObject *rb_grn_object, VALUE rb_value)
|
|
1379
1382
|
break;
|
1380
1383
|
}
|
1381
1384
|
|
1382
|
-
return
|
1385
|
+
return false;
|
1383
1386
|
}
|
1384
1387
|
|
1385
1388
|
typedef struct {
|
@@ -1527,7 +1530,7 @@ rb_grn_object_remove (int argc, VALUE *argv, VALUE self)
|
|
1527
1530
|
grn_ctx *context;
|
1528
1531
|
VALUE rb_options;
|
1529
1532
|
VALUE rb_dependent_p;
|
1530
|
-
|
1533
|
+
bool dependent_p = false;
|
1531
1534
|
|
1532
1535
|
rb_grn_object = SELF(self);
|
1533
1536
|
if (!rb_grn_object->object)
|
@@ -1560,7 +1563,7 @@ rb_grn_object_builtin_p (VALUE self)
|
|
1560
1563
|
{
|
1561
1564
|
grn_ctx *context;
|
1562
1565
|
grn_obj *object;
|
1563
|
-
|
1566
|
+
bool builtin = false;
|
1564
1567
|
|
1565
1568
|
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
1566
1569
|
NULL, NULL, NULL, NULL);
|
@@ -1585,7 +1588,7 @@ rb_grn_object_table_p (VALUE self)
|
|
1585
1588
|
{
|
1586
1589
|
grn_ctx *context;
|
1587
1590
|
grn_obj *object;
|
1588
|
-
|
1591
|
+
bool table_p = false;
|
1589
1592
|
|
1590
1593
|
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
1591
1594
|
NULL, NULL, NULL, NULL);
|
@@ -1610,7 +1613,7 @@ rb_grn_object_column_p (VALUE self)
|
|
1610
1613
|
{
|
1611
1614
|
grn_ctx *context;
|
1612
1615
|
grn_obj *object;
|
1613
|
-
|
1616
|
+
bool column_p = false;
|
1614
1617
|
|
1615
1618
|
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
1616
1619
|
NULL, NULL, NULL, NULL);
|
@@ -1636,7 +1639,7 @@ rb_grn_object_reference_column_p (VALUE self)
|
|
1636
1639
|
{
|
1637
1640
|
grn_ctx *context;
|
1638
1641
|
grn_obj *object;
|
1639
|
-
|
1642
|
+
bool reference_column_p = false;
|
1640
1643
|
|
1641
1644
|
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
1642
1645
|
NULL, NULL, NULL, NULL);
|
@@ -1662,7 +1665,7 @@ rb_grn_object_index_column_p (VALUE self)
|
|
1662
1665
|
{
|
1663
1666
|
grn_ctx *context;
|
1664
1667
|
grn_obj *object;
|
1665
|
-
|
1668
|
+
bool index_column_p = false;
|
1666
1669
|
|
1667
1670
|
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
1668
1671
|
NULL, NULL, NULL, NULL);
|
@@ -1687,7 +1690,7 @@ rb_grn_object_procedure_p (VALUE self)
|
|
1687
1690
|
{
|
1688
1691
|
grn_ctx *context;
|
1689
1692
|
grn_obj *object;
|
1690
|
-
|
1693
|
+
bool procedure_p = false;
|
1691
1694
|
|
1692
1695
|
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
1693
1696
|
NULL, NULL, NULL, NULL);
|
@@ -1713,7 +1716,7 @@ rb_grn_object_function_procedure_p (VALUE self)
|
|
1713
1716
|
{
|
1714
1717
|
grn_ctx *context;
|
1715
1718
|
grn_obj *object;
|
1716
|
-
|
1719
|
+
bool function_procedure_p = false;
|
1717
1720
|
|
1718
1721
|
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
1719
1722
|
NULL, NULL, NULL, NULL);
|
@@ -1739,7 +1742,7 @@ rb_grn_object_selector_procedure_p (VALUE self)
|
|
1739
1742
|
{
|
1740
1743
|
grn_ctx *context;
|
1741
1744
|
grn_obj *object;
|
1742
|
-
|
1745
|
+
bool selector_procedure_p = false;
|
1743
1746
|
|
1744
1747
|
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
1745
1748
|
NULL, NULL, NULL, NULL);
|
@@ -1765,7 +1768,7 @@ rb_grn_object_selector_only_procedure_p (VALUE self)
|
|
1765
1768
|
{
|
1766
1769
|
grn_ctx *context;
|
1767
1770
|
grn_obj *object;
|
1768
|
-
|
1771
|
+
bool selector_only_procedure_p = false;
|
1769
1772
|
|
1770
1773
|
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
1771
1774
|
NULL, NULL, NULL, NULL);
|
@@ -1791,7 +1794,7 @@ rb_grn_object_scorer_procedure_p (VALUE self)
|
|
1791
1794
|
{
|
1792
1795
|
grn_ctx *context;
|
1793
1796
|
grn_obj *object;
|
1794
|
-
|
1797
|
+
bool scorer_procedure_p = false;
|
1795
1798
|
|
1796
1799
|
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
1797
1800
|
NULL, NULL, NULL, NULL);
|
@@ -1817,7 +1820,7 @@ rb_grn_object_window_function_procedure_p (VALUE self)
|
|
1817
1820
|
{
|
1818
1821
|
grn_ctx *context;
|
1819
1822
|
grn_obj *object;
|
1820
|
-
|
1823
|
+
bool window_function_procedure_p = false;
|
1821
1824
|
|
1822
1825
|
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
1823
1826
|
NULL, NULL, NULL, NULL);
|
@@ -1844,7 +1847,7 @@ rb_grn_object_accessor_p (VALUE self)
|
|
1844
1847
|
{
|
1845
1848
|
grn_ctx *context;
|
1846
1849
|
grn_obj *object;
|
1847
|
-
|
1850
|
+
bool accessor_p = false;
|
1848
1851
|
|
1849
1852
|
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
1850
1853
|
NULL, NULL, NULL, NULL);
|
@@ -1857,7 +1860,7 @@ rb_grn_object_accessor_p (VALUE self)
|
|
1857
1860
|
}
|
1858
1861
|
|
1859
1862
|
/*
|
1860
|
-
* Checks whether the object is
|
1863
|
+
* Checks whether the object is an accessor for `_key` or not.
|
1861
1864
|
*
|
1862
1865
|
* @example `true` case: `column("_key")` is an accessor and it's an accessor for `_key`
|
1863
1866
|
* Groonga::Schema.create_table("Users", :key_type => :short_text)
|
@@ -1880,7 +1883,7 @@ rb_grn_object_key_accessor_p (VALUE self)
|
|
1880
1883
|
{
|
1881
1884
|
grn_ctx *context;
|
1882
1885
|
grn_obj *object;
|
1883
|
-
|
1886
|
+
bool key_accessor_p = false;
|
1884
1887
|
|
1885
1888
|
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
1886
1889
|
NULL, NULL, NULL, NULL);
|
@@ -1892,6 +1895,153 @@ rb_grn_object_key_accessor_p (VALUE self)
|
|
1892
1895
|
return CBOOL2RVAL(key_accessor_p);
|
1893
1896
|
}
|
1894
1897
|
|
1898
|
+
/*
|
1899
|
+
* Checks whether the object is an accessor for `_id` or not.
|
1900
|
+
*
|
1901
|
+
* @example `true` case: `column("_id")` is an accessor and it's an accessor for `_id`
|
1902
|
+
* Groonga::Schema.create_table("Users", :key_type => :short_text)
|
1903
|
+
* users = Groonga["Users"]
|
1904
|
+
* users.column("_id").id_accessor? # => true
|
1905
|
+
*
|
1906
|
+
* @example `false` case: `column("_key")` is an accessor but it's not an accessor for `_id`
|
1907
|
+
* Groonga::Schema.create_table("Users", :key_type => :short_text)
|
1908
|
+
* users = Groonga["Users"]
|
1909
|
+
* users.column("_key").id_accessor? # => false
|
1910
|
+
*
|
1911
|
+
* @overload id_accessor?
|
1912
|
+
* @return [Boolean] `true` if the object is an accessor for `_id`,
|
1913
|
+
* `false` otherwise.
|
1914
|
+
*
|
1915
|
+
* @since 9.0.4
|
1916
|
+
*/
|
1917
|
+
static VALUE
|
1918
|
+
rb_grn_object_id_accessor_p (VALUE self)
|
1919
|
+
{
|
1920
|
+
grn_ctx *context;
|
1921
|
+
grn_obj *object;
|
1922
|
+
bool id_accessor_p = false;
|
1923
|
+
|
1924
|
+
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
1925
|
+
NULL, NULL, NULL, NULL);
|
1926
|
+
|
1927
|
+
if (context && object) {
|
1928
|
+
id_accessor_p = grn_obj_is_id_accessor(context, object);
|
1929
|
+
}
|
1930
|
+
|
1931
|
+
return CBOOL2RVAL(id_accessor_p);
|
1932
|
+
}
|
1933
|
+
|
1934
|
+
/*
|
1935
|
+
* Checks whether the object is an accessor for `_value` or not.
|
1936
|
+
*
|
1937
|
+
* @example `true` case: `column("_value")` is an accessor and it's an accessor for `_value`
|
1938
|
+
* Groonga::Schema.create_table("Users",
|
1939
|
+
* :key_type => :short_text,
|
1940
|
+
* :value_type => "UInt32")
|
1941
|
+
* users = Groonga["Users"]
|
1942
|
+
* users.column("_value").value_accessor? # => true
|
1943
|
+
*
|
1944
|
+
* @example `false` case: `column("_key")` is an accessor but it's not an accessor for `_value`
|
1945
|
+
* Groonga::Schema.create_table("Users", :key_type => :short_text)
|
1946
|
+
* users = Groonga["Users"]
|
1947
|
+
* users.column("_key").value_accessor? # => false
|
1948
|
+
*
|
1949
|
+
* @overload value_accessor?
|
1950
|
+
* @return [Boolean] `true` if the object is an accessor for `_value`,
|
1951
|
+
* `false` otherwise.
|
1952
|
+
*
|
1953
|
+
* @since 9.0.4
|
1954
|
+
*/
|
1955
|
+
static VALUE
|
1956
|
+
rb_grn_object_value_accessor_p (VALUE self)
|
1957
|
+
{
|
1958
|
+
grn_ctx *context;
|
1959
|
+
grn_obj *object;
|
1960
|
+
bool value_accessor_p = false;
|
1961
|
+
|
1962
|
+
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
1963
|
+
NULL, NULL, NULL, NULL);
|
1964
|
+
|
1965
|
+
if (context && object) {
|
1966
|
+
value_accessor_p = grn_obj_is_value_accessor(context, object);
|
1967
|
+
}
|
1968
|
+
|
1969
|
+
return CBOOL2RVAL(value_accessor_p);
|
1970
|
+
}
|
1971
|
+
|
1972
|
+
/*
|
1973
|
+
* Checks whether the object is an accessor for `_socre` or not.
|
1974
|
+
*
|
1975
|
+
* @example `true` case: `column("_score")` is an accessor and it's an accessor for `_score`
|
1976
|
+
* Groonga::Schema.create_table("Users", :key_type => :short_text)
|
1977
|
+
* users = Groonga["Users"]
|
1978
|
+
* users.select.column("_score").socre_accessor? # => true
|
1979
|
+
*
|
1980
|
+
* @example `false` case: `column("_key")` is an accessor but it's not an accessor for `_score`
|
1981
|
+
* Groonga::Schema.create_table("Users", :key_type => :short_text)
|
1982
|
+
* users = Groonga["Users"]
|
1983
|
+
* users.column("_key").score_accessor? # => false
|
1984
|
+
*
|
1985
|
+
* @overload score_accessor?
|
1986
|
+
* @return [Boolean] `true` if the object is an accessor for `_score`,
|
1987
|
+
* `false` otherwise.
|
1988
|
+
*
|
1989
|
+
* @since 9.0.4
|
1990
|
+
*/
|
1991
|
+
static VALUE
|
1992
|
+
rb_grn_object_score_accessor_p (VALUE self)
|
1993
|
+
{
|
1994
|
+
grn_ctx *context;
|
1995
|
+
grn_obj *object;
|
1996
|
+
bool score_accessor_p = false;
|
1997
|
+
|
1998
|
+
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
1999
|
+
NULL, NULL, NULL, NULL);
|
2000
|
+
|
2001
|
+
if (context && object) {
|
2002
|
+
score_accessor_p = grn_obj_is_score_accessor(context, object);
|
2003
|
+
}
|
2004
|
+
|
2005
|
+
return CBOOL2RVAL(score_accessor_p);
|
2006
|
+
}
|
2007
|
+
|
2008
|
+
/*
|
2009
|
+
* Checks whether the object is an accessor for `_nsubrecs` or not.
|
2010
|
+
*
|
2011
|
+
* @example `true` case: `column("_nsubrecs")` is an accessor and it's an accessor for `_nsubrecs`
|
2012
|
+
* users = Groonga::Hash.create(:name => "Users",
|
2013
|
+
* :key_type => "ShortText")
|
2014
|
+
* grouped_users = users.group("_key")
|
2015
|
+
* grouped_users.column("_nsubrecs").n_sub_records_accessor? # => true
|
2016
|
+
*
|
2017
|
+
* @example `false` case: `column("_key")` is an accessor but it's not an accessor for `_nsubrecs`
|
2018
|
+
* Groonga::Schema.create_table("Users", :key_type => :short_text)
|
2019
|
+
* users = Groonga["Users"]
|
2020
|
+
* users.column("_key").n_sub_records_accessor? # => false
|
2021
|
+
*
|
2022
|
+
* @overload n_sub_records_accessor?
|
2023
|
+
* @return [Boolean] `true` if the object is an accessor for `_nsubrecs`,
|
2024
|
+
* `false` otherwise.
|
2025
|
+
*
|
2026
|
+
* @since 9.0.4
|
2027
|
+
*/
|
2028
|
+
VALUE
|
2029
|
+
rb_grn_object_n_sub_records_accessor_p (VALUE self)
|
2030
|
+
{
|
2031
|
+
grn_ctx *context;
|
2032
|
+
grn_obj *object;
|
2033
|
+
bool n_sub_records_accessor_p = false;
|
2034
|
+
|
2035
|
+
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
2036
|
+
NULL, NULL, NULL, NULL);
|
2037
|
+
|
2038
|
+
if (context && object) {
|
2039
|
+
n_sub_records_accessor_p = grn_obj_is_nsubrecs_accessor(context, object);
|
2040
|
+
}
|
2041
|
+
|
2042
|
+
return CBOOL2RVAL(n_sub_records_accessor_p);
|
2043
|
+
}
|
2044
|
+
|
1895
2045
|
/*
|
1896
2046
|
* Update the last modified time of the `object`. It's meaningful only
|
1897
2047
|
* for persistent database, table and column.
|
@@ -1962,11 +2112,15 @@ rb_grn_object_dirty_p (VALUE self)
|
|
1962
2112
|
{
|
1963
2113
|
grn_ctx *context;
|
1964
2114
|
grn_obj *object;
|
1965
|
-
|
2115
|
+
bool is_dirty = false;
|
1966
2116
|
|
1967
2117
|
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
1968
2118
|
NULL, NULL, NULL, NULL);
|
1969
|
-
|
2119
|
+
|
2120
|
+
if (context && object) {
|
2121
|
+
is_dirty = grn_obj_is_dirty(context, object);
|
2122
|
+
}
|
2123
|
+
|
1970
2124
|
return CBOOL2RVAL(is_dirty);
|
1971
2125
|
}
|
1972
2126
|
|
@@ -1981,14 +2135,62 @@ rb_grn_object_corrupt_p (VALUE self)
|
|
1981
2135
|
{
|
1982
2136
|
grn_ctx *context;
|
1983
2137
|
grn_obj *object;
|
1984
|
-
|
2138
|
+
bool is_corrupt = false;
|
1985
2139
|
|
1986
2140
|
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
1987
2141
|
NULL, NULL, NULL, NULL);
|
1988
|
-
|
2142
|
+
|
2143
|
+
if (context && object) {
|
2144
|
+
is_corrupt = grn_obj_is_corrupt(context, object);
|
2145
|
+
}
|
2146
|
+
|
1989
2147
|
return CBOOL2RVAL(is_corrupt);
|
1990
2148
|
}
|
1991
2149
|
|
2150
|
+
/*
|
2151
|
+
* @overload lexicon?
|
2152
|
+
* @return [Boolean] `true` if the object is lexicon, `false` otherwise.
|
2153
|
+
*
|
2154
|
+
* @since 9.0.4
|
2155
|
+
*/
|
2156
|
+
static VALUE
|
2157
|
+
rb_grn_object_lexicon_p (VALUE self)
|
2158
|
+
{
|
2159
|
+
grn_ctx *context;
|
2160
|
+
grn_obj *object;
|
2161
|
+
bool is_lexicon = false;
|
2162
|
+
|
2163
|
+
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
2164
|
+
NULL, NULL, NULL, NULL);
|
2165
|
+
|
2166
|
+
if (context && object) {
|
2167
|
+
is_lexicon = grn_obj_is_lexicon(context, object);
|
2168
|
+
}
|
2169
|
+
|
2170
|
+
return CBOOL2RVAL(is_lexicon);
|
2171
|
+
}
|
2172
|
+
|
2173
|
+
/*
|
2174
|
+
* @overload bulk?
|
2175
|
+
* @return [Boolean] `true` if the object is bulk, `false` otherwise.
|
2176
|
+
*
|
2177
|
+
* @since 9.0.4
|
2178
|
+
*/
|
2179
|
+
static VALUE
|
2180
|
+
rb_grn_object_bulk_p (VALUE self)
|
2181
|
+
{
|
2182
|
+
grn_ctx *context;
|
2183
|
+
grn_obj *object;
|
2184
|
+
bool is_bulk = false;
|
2185
|
+
|
2186
|
+
rb_grn_object_deconstruct(SELF(self), &object, &context,
|
2187
|
+
NULL, NULL, NULL, NULL);
|
2188
|
+
if (context && object) {
|
2189
|
+
is_bulk = grn_obj_is_bulk(context, object);
|
2190
|
+
}
|
2191
|
+
return CBOOL2RVAL(is_bulk);
|
2192
|
+
}
|
2193
|
+
|
1992
2194
|
/*
|
1993
2195
|
* @overload disk_usage
|
1994
2196
|
* @return [Integer] The number of bytes used by this object in disk.
|
@@ -2064,6 +2266,14 @@ rb_grn_init_object (VALUE mGrn)
|
|
2064
2266
|
rb_grn_object_accessor_p, 0);
|
2065
2267
|
rb_define_method(rb_cGrnObject, "key_accessor?",
|
2066
2268
|
rb_grn_object_key_accessor_p, 0);
|
2269
|
+
rb_define_method(rb_cGrnObject, "id_accessor?",
|
2270
|
+
rb_grn_object_id_accessor_p, 0);
|
2271
|
+
rb_define_method(rb_cGrnObject, "value_accessor?",
|
2272
|
+
rb_grn_object_value_accessor_p, 0);
|
2273
|
+
rb_define_method(rb_cGrnObject, "score_accessor?",
|
2274
|
+
rb_grn_object_score_accessor_p, 0);
|
2275
|
+
rb_define_method(rb_cGrnObject, "n_sub_records_accessor?",
|
2276
|
+
rb_grn_object_n_sub_records_accessor_p, 0);
|
2067
2277
|
|
2068
2278
|
rb_define_method(rb_cGrnObject, "touch", rb_grn_object_touch, -1);
|
2069
2279
|
rb_define_method(rb_cGrnObject, "last_modified",
|
@@ -2072,6 +2282,10 @@ rb_grn_init_object (VALUE mGrn)
|
|
2072
2282
|
rb_grn_object_dirty_p, 0);
|
2073
2283
|
rb_define_method(rb_cGrnObject, "corrupt?",
|
2074
2284
|
rb_grn_object_corrupt_p, 0);
|
2285
|
+
rb_define_method(rb_cGrnObject, "lexicon?",
|
2286
|
+
rb_grn_object_lexicon_p, 0);
|
2287
|
+
rb_define_method(rb_cGrnObject, "bulk?",
|
2288
|
+
rb_grn_object_bulk_p, 0);
|
2075
2289
|
|
2076
2290
|
rb_define_method(rb_cGrnObject, "disk_usage",
|
2077
2291
|
rb_grn_object_get_disk_usage, 0);
|