rroonga 9.0.2 → 10.0.6
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/.yardopts +1 -0
- data/Rakefile +9 -142
- data/doc/text/news.md +73 -1
- data/doc/text/tutorial.md +1 -1
- data/ext/groonga/extconf.rb +9 -74
- data/ext/groonga/rb-grn-context.c +27 -0
- data/ext/groonga/rb-grn-expression-builder.c +3 -3
- 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-key-support.c +26 -7
- data/ext/groonga/rb-grn-table.c +119 -87
- data/ext/groonga/rb-grn-type.c +5 -1
- data/ext/groonga/rb-grn-utils.c +17 -1
- data/ext/groonga/rb-grn.h +7 -13
- data/ext/groonga/rb-groonga.c +2 -2
- data/lib/groonga.rb +3 -7
- data/lib/groonga/dumper.rb +3 -0
- data/lib/groonga/record.rb +2 -2
- data/rroonga.gemspec +4 -5
- data/test/groonga-test-utils.rb +34 -5
- data/test/run-test.rb +1 -3
- data/test/test-accessor.rb +63 -7
- data/test/test-column.rb +12 -1
- 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 +56 -10
- data/test/test-schema-dumper.rb +13 -0
- data/test/test-schema.rb +9 -1
- data/test/test-table-arrow.rb +1 -1
- data/test/test-table.rb +21 -1
- data/test/test-variable.rb +23 -7
- metadata +65 -106
@@ -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 Kouhei
|
3
|
+
Copyright (C) 2009-2020 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
|
@@ -42,9 +42,9 @@ build (VALUE self)
|
|
42
42
|
}
|
43
43
|
|
44
44
|
static VALUE
|
45
|
-
build_block (
|
45
|
+
build_block (RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg))
|
46
46
|
{
|
47
|
-
return rb_funcall(rb_block_proc(), rb_intern("call"), 1,
|
47
|
+
return rb_funcall(rb_block_proc(), rb_intern("call"), 1, yielded_arg);
|
48
48
|
}
|
49
49
|
|
50
50
|
VALUE
|
@@ -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);
|