rroonga 4.0.6 → 4.0.7
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/README.md +1 -1
- data/doc/text/news.textile +14 -2
- data/ext/groonga/extconf.rb +0 -3
- data/ext/groonga/rb-grn-expression.c +1 -6
- data/ext/groonga/rb-grn-index-column.c +96 -0
- data/ext/groonga/rb-grn-index-cursor.c +32 -8
- data/ext/groonga/rb-grn-posting.c +26 -6
- data/ext/groonga/rb-grn-utils.c +27 -0
- data/ext/groonga/rb-grn.h +4 -1
- data/rroonga-build.rb +3 -3
- data/test/test-column.rb +50 -12
- data/test/test-expression.rb +80 -25
- data/test/test-index-column.rb +41 -0
- data/test/test-index-cursor.rb +21 -1
- data/test/test-table-key-support.rb +59 -1
- metadata +45 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 21a2beefeeeffe25a4ebeecbad4934aa49a64dad
|
4
|
+
data.tar.gz: ff7dda3b86483ab0c6c72d46afb77e3bdb4c1205
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 22514a54cff330d7efdd782b01864c20eb9f6b04b70ff76ca7cbbf56369afcbc4129ad710fd66308bfbc58011960afc1b9085e737a96c814caff4127427094fb
|
7
|
+
data.tar.gz: de929ed9ed74bdc1fb168ecc7ff4fa69f929ad949f9a5d6f1275c9b66aef6b9932d83a0db54ffb4e633b5dde95b0ed90ccfbc0faff772b2650f9b5bc0b1714f2
|
data/README.md
CHANGED
data/doc/text/news.textile
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
h1. NEWS
|
2
2
|
|
3
|
+
h2(#4-0-7). 4.0.7: 2014-12-12
|
4
|
+
|
5
|
+
h3. Improvements
|
6
|
+
|
7
|
+
* Supported Groonga 4.0.8. Groonga 4.0.7 or older aren't supported.
|
8
|
+
* Added @:reuse_posting_object@ option to
|
9
|
+
{Groonga::IndexCursor#each}. The option improves performance by
|
10
|
+
reducing memory allocation. The option is disabled by default because
|
11
|
+
reusing the same object isn't Rubyish.
|
12
|
+
* Added {Groonga::IndexCursor#estimate_size}. [GitHub#38]
|
13
|
+
* Accepted string for integer, unsigned integer and float type key.
|
14
|
+
|
3
15
|
h2(#4-0-6). 4.0.6: 2014-11-06
|
4
16
|
|
5
17
|
h3. Improvements
|
@@ -11,8 +23,8 @@ h3. Improvements
|
|
11
23
|
** Supported @:lz4@ in {Groonga::VariableSizeColumn#compressed?} options.
|
12
24
|
** Added {Groonga::LZ4Error}.
|
13
25
|
** [grndump] Supported @COMPRESS_ZLIB@ and @COMPRESS_LZ4@ flags.
|
14
|
-
** Added {Groonga::
|
15
|
-
** Added {Groonga::
|
26
|
+
** Added {Groonga::Table::KeySupport#token_filters}.
|
27
|
+
** Added {Groonga::Table::KeySupport#token_filters=}.
|
16
28
|
** Supported @:token_filters@ in {Groonga::Hash.create} options.
|
17
29
|
** Supported @:token_filters@ in {Groonga::PatriciaTrie.create} options.
|
18
30
|
** Supported @:token_filters@ in {Groonga::DoubleArrayTrie.create} options.
|
data/ext/groonga/extconf.rb
CHANGED
@@ -283,9 +283,6 @@ have_func("rb_sym2str", "ruby.h")
|
|
283
283
|
have_func("rb_to_symbol", "ruby.h")
|
284
284
|
have_type("enum ruby_value_type", "ruby.h")
|
285
285
|
|
286
|
-
# TODO: Remove me after Groogna 4.0.8 is released.
|
287
|
-
have_func("grn_expr_dump_plan", "groonga.h")
|
288
|
-
|
289
286
|
checking_for(checking_message("--enable-debug-log option")) do
|
290
287
|
enable_debug_log = enable_config("debug-log", false)
|
291
288
|
if enable_debug_log
|
@@ -498,13 +498,11 @@ rb_grn_expression_compile (VALUE self)
|
|
498
498
|
* Dump execution plan of the `expression` in string.
|
499
499
|
*
|
500
500
|
* @overload dump_plan
|
501
|
-
* @since 4.0.
|
501
|
+
* @since 4.0.7
|
502
502
|
*/
|
503
503
|
static VALUE
|
504
504
|
rb_grn_expression_dump_plan (VALUE self)
|
505
505
|
{
|
506
|
-
/* TODO: Remove me after Groogna 4.0.8 is released. */
|
507
|
-
#ifdef HAVE_GRN_EXPR_DUMP_PLAN
|
508
506
|
grn_ctx *context = NULL;
|
509
507
|
grn_obj *expression;
|
510
508
|
grn_obj dumped_plan;
|
@@ -520,9 +518,6 @@ rb_grn_expression_dump_plan (VALUE self)
|
|
520
518
|
grn_obj_unlink(context, &dumped_plan);
|
521
519
|
|
522
520
|
return rb_dumped_plan;
|
523
|
-
#else
|
524
|
-
return rb_str_new2("");
|
525
|
-
#endif
|
526
521
|
}
|
527
522
|
|
528
523
|
/*
|
@@ -955,6 +955,99 @@ rb_grn_index_column_open_cursor (int argc, VALUE *argv, VALUE self)
|
|
955
955
|
return rb_cursor;
|
956
956
|
}
|
957
957
|
|
958
|
+
/*
|
959
|
+
* Estimates the number of documents found by the given token ID.
|
960
|
+
*
|
961
|
+
* @example Token ID style
|
962
|
+
* # Define schema
|
963
|
+
* Groonga::Schema.define do |schema|
|
964
|
+
* schema.create_table("Articles") do |table|
|
965
|
+
* table.text("content")
|
966
|
+
* end
|
967
|
+
*
|
968
|
+
* schema.create_table("Terms",
|
969
|
+
* :type => :hash,
|
970
|
+
* :key_type => "ShortText",
|
971
|
+
* :default_tokenizer => "TokenBigram",
|
972
|
+
* :normalizer => "NormalizerAuto") do |table|
|
973
|
+
* table.index("Articles.content",
|
974
|
+
* :name => "articles_content",
|
975
|
+
* :with_position => true,
|
976
|
+
* :with_section => true)
|
977
|
+
* end
|
978
|
+
* end
|
979
|
+
* articles = Groonga["Articles"]
|
980
|
+
* terms = Groonga["Terms"]
|
981
|
+
* index = Groonga["Terms.articles_content"]
|
982
|
+
*
|
983
|
+
* # Add data
|
984
|
+
* articles.add(:content => "Groonga is fast")
|
985
|
+
* articles.add(:content => "Rroonga is fast")
|
986
|
+
* articles.add(:content => "Mroonga is fast")
|
987
|
+
*
|
988
|
+
* # Estimate the number of documents found by token ID
|
989
|
+
* p @index.estimate_size(@terms["fast"].id) # => 7
|
990
|
+
* p @index.estimate_size(@terms["Groonga"].id) # => 1
|
991
|
+
*
|
992
|
+
* @example Token record style
|
993
|
+
* # Define schema
|
994
|
+
* Groonga::Schema.define do |schema|
|
995
|
+
* schema.create_table("Articles") do |table|
|
996
|
+
* table.text("content")
|
997
|
+
* end
|
998
|
+
*
|
999
|
+
* schema.create_table("Terms",
|
1000
|
+
* :type => :hash,
|
1001
|
+
* :key_type => "ShortText",
|
1002
|
+
* :default_tokenizer => "TokenBigram",
|
1003
|
+
* :normalizer => "NormalizerAuto") do |table|
|
1004
|
+
* table.index("Articles.content",
|
1005
|
+
* :name => "articles_content",
|
1006
|
+
* :with_position => true,
|
1007
|
+
* :with_section => true)
|
1008
|
+
* end
|
1009
|
+
* end
|
1010
|
+
* articles = Groonga["Articles"]
|
1011
|
+
* terms = Groonga["Terms"]
|
1012
|
+
* index = Groonga["Terms.articles_content"]
|
1013
|
+
*
|
1014
|
+
* # Add data
|
1015
|
+
* articles.add(:content => "Groonga is fast")
|
1016
|
+
* articles.add(:content => "Rroonga is fast")
|
1017
|
+
* articles.add(:content => "Mroonga is fast")
|
1018
|
+
*
|
1019
|
+
* # Estimate the number of documents found by token record
|
1020
|
+
* p @index.estimate_size(@terms["fast"]) # => 7
|
1021
|
+
* p @index.estimate_size(@terms["Groonga"]) # => 1
|
1022
|
+
*
|
1023
|
+
* @overload estimate_size(token_id)
|
1024
|
+
* @param [Integer, Record] token_id The token ID to be estimated.
|
1025
|
+
* @return [Integer] The estimated number of documents found by the
|
1026
|
+
* given token ID.
|
1027
|
+
*
|
1028
|
+
* @since 4.0.7
|
1029
|
+
*/
|
1030
|
+
static VALUE
|
1031
|
+
rb_grn_index_column_estimate_size (VALUE self, VALUE rb_token_id)
|
1032
|
+
{
|
1033
|
+
grn_ctx *context;
|
1034
|
+
grn_obj *column;
|
1035
|
+
grn_obj *domain_object;
|
1036
|
+
grn_id token_id;
|
1037
|
+
unsigned int size;
|
1038
|
+
|
1039
|
+
rb_grn_index_column_deconstruct(SELF(self), &column, &context,
|
1040
|
+
NULL, &domain_object,
|
1041
|
+
NULL, NULL, NULL,
|
1042
|
+
NULL, NULL,
|
1043
|
+
NULL, NULL);
|
1044
|
+
|
1045
|
+
token_id = RVAL2GRNID(rb_token_id, context, domain_object, self);
|
1046
|
+
size = grn_ii_estimate_size(context, (grn_ii *)column, token_id);
|
1047
|
+
|
1048
|
+
return UINT2NUM(size);
|
1049
|
+
}
|
1050
|
+
|
958
1051
|
void
|
959
1052
|
rb_grn_init_index_column (VALUE mGrn)
|
960
1053
|
{
|
@@ -990,4 +1083,7 @@ rb_grn_init_index_column (VALUE mGrn)
|
|
990
1083
|
|
991
1084
|
rb_define_method(rb_cGrnIndexColumn, "open_cursor",
|
992
1085
|
rb_grn_index_column_open_cursor, -1);
|
1086
|
+
|
1087
|
+
rb_define_method(rb_cGrnIndexColumn, "estimate_size",
|
1088
|
+
rb_grn_index_column_estimate_size, 1);
|
993
1089
|
}
|
@@ -57,7 +57,8 @@ rb_grn_index_cursor_deconstruct (RbGrnIndexCursor *rb_grn_index_cursor,
|
|
57
57
|
}
|
58
58
|
|
59
59
|
static VALUE
|
60
|
-
next_value (
|
60
|
+
next_value (VALUE rb_posting,
|
61
|
+
grn_ctx *context, grn_obj *cursor, VALUE rb_table, VALUE rb_lexicon)
|
61
62
|
{
|
62
63
|
grn_posting *posting;
|
63
64
|
grn_id term_id;
|
@@ -67,7 +68,12 @@ next_value (grn_ctx *context, grn_obj *cursor, VALUE rb_table, VALUE rb_lexicon)
|
|
67
68
|
return Qnil;
|
68
69
|
}
|
69
70
|
|
70
|
-
|
71
|
+
if (NIL_P(rb_posting)) {
|
72
|
+
return rb_grn_posting_new(posting, term_id, rb_table, rb_lexicon);
|
73
|
+
} else {
|
74
|
+
rb_grn_posting_update(rb_posting, posting, term_id);
|
75
|
+
return rb_posting;
|
76
|
+
}
|
71
77
|
}
|
72
78
|
|
73
79
|
static VALUE
|
@@ -84,7 +90,7 @@ rb_grn_index_cursor_next (VALUE self)
|
|
84
90
|
VALUE rb_lexicon;
|
85
91
|
rb_table = rb_iv_get(self, "@table");
|
86
92
|
rb_lexicon = rb_iv_get(self, "@lexicon");
|
87
|
-
rb_posting = next_value(context, cursor, rb_table, rb_lexicon);
|
93
|
+
rb_posting = next_value(Qnil, context, cursor, rb_table, rb_lexicon);
|
88
94
|
}
|
89
95
|
|
90
96
|
return rb_posting;
|
@@ -92,14 +98,24 @@ rb_grn_index_cursor_next (VALUE self)
|
|
92
98
|
}
|
93
99
|
|
94
100
|
static VALUE
|
95
|
-
rb_grn_index_cursor_each (VALUE self)
|
101
|
+
rb_grn_index_cursor_each (int argc, VALUE *argv, VALUE self)
|
96
102
|
{
|
97
103
|
grn_obj *cursor;
|
98
104
|
grn_ctx *context;
|
105
|
+
grn_bool reuse_posting_object;
|
106
|
+
VALUE rb_options;
|
107
|
+
VALUE rb_reuse_posting_object;
|
99
108
|
VALUE rb_table;
|
100
109
|
VALUE rb_lexicon;
|
110
|
+
VALUE rb_posting = Qnil;
|
111
|
+
|
112
|
+
RETURN_ENUMERATOR(self, argc, argv);
|
113
|
+
|
114
|
+
rb_scan_args(argc, argv, "01", &rb_options);
|
101
115
|
|
102
|
-
|
116
|
+
rb_grn_scan_options(rb_options,
|
117
|
+
"reuse_posting_object", &rb_reuse_posting_object,
|
118
|
+
NULL);
|
103
119
|
|
104
120
|
rb_grn_index_cursor_deconstruct(SELF(self), &cursor, &context,
|
105
121
|
NULL, NULL, NULL, NULL);
|
@@ -114,9 +130,17 @@ rb_grn_index_cursor_each (VALUE self)
|
|
114
130
|
|
115
131
|
rb_table = rb_iv_get(self, "@table");
|
116
132
|
rb_lexicon = rb_iv_get(self, "@lexicon");
|
133
|
+
reuse_posting_object = RVAL2CBOOL(rb_reuse_posting_object);
|
134
|
+
|
135
|
+
if (reuse_posting_object) {
|
136
|
+
rb_posting = rb_grn_posting_new(NULL, GRN_ID_NIL, rb_table, rb_lexicon);
|
137
|
+
}
|
117
138
|
while (GRN_TRUE) {
|
118
|
-
|
119
|
-
|
139
|
+
if (!reuse_posting_object) {
|
140
|
+
rb_posting = Qnil;
|
141
|
+
}
|
142
|
+
rb_posting = next_value(rb_posting,
|
143
|
+
context, cursor, rb_table, rb_lexicon);
|
120
144
|
if (NIL_P(rb_posting)) {
|
121
145
|
break;
|
122
146
|
}
|
@@ -135,5 +159,5 @@ rb_grn_init_index_cursor (VALUE mGrn)
|
|
135
159
|
rb_include_module(rb_cGrnIndexCursor, rb_mEnumerable);
|
136
160
|
|
137
161
|
rb_define_method(rb_cGrnIndexCursor, "next", rb_grn_index_cursor_next, 0);
|
138
|
-
rb_define_method(rb_cGrnIndexCursor, "each", rb_grn_index_cursor_each,
|
162
|
+
rb_define_method(rb_cGrnIndexCursor, "each", rb_grn_index_cursor_each, -1);
|
139
163
|
}
|
@@ -32,13 +32,15 @@ rb_grn_posting_new (grn_posting *posting, grn_id term_id,
|
|
32
32
|
#define SET_PARAMETER(key, value) \
|
33
33
|
rb_hash_aset(parameters, RB_GRN_INTERN(key), INT2NUM((value)))
|
34
34
|
|
35
|
-
|
36
|
-
|
35
|
+
if (posting) {
|
36
|
+
SET_PARAMETER("record_id", posting->rid);
|
37
|
+
SET_PARAMETER("section_id", posting->sid);
|
38
|
+
SET_PARAMETER("position", posting->pos);
|
39
|
+
SET_PARAMETER("term_frequency", posting->tf);
|
40
|
+
SET_PARAMETER("weight", posting->weight);
|
41
|
+
SET_PARAMETER("n_rest_postings", posting->rest);
|
42
|
+
}
|
37
43
|
SET_PARAMETER("term_id", term_id);
|
38
|
-
SET_PARAMETER("position", posting->pos);
|
39
|
-
SET_PARAMETER("term_frequency", posting->tf);
|
40
|
-
SET_PARAMETER("weight", posting->weight);
|
41
|
-
SET_PARAMETER("n_rest_postings", posting->rest);
|
42
44
|
|
43
45
|
#undef SET_PARAMETER
|
44
46
|
|
@@ -49,6 +51,24 @@ rb_grn_posting_new (grn_posting *posting, grn_id term_id,
|
|
49
51
|
parameters);
|
50
52
|
}
|
51
53
|
|
54
|
+
void
|
55
|
+
rb_grn_posting_update (VALUE self, grn_posting *posting, grn_id term_id)
|
56
|
+
{
|
57
|
+
#define SET_PARAMETER(key, value) \
|
58
|
+
rb_funcall(self, rb_intern(key "="), 1, INT2NUM(value));
|
59
|
+
|
60
|
+
SET_PARAMETER("record_id", posting->rid);
|
61
|
+
SET_PARAMETER("section_id", posting->sid);
|
62
|
+
SET_PARAMETER("position", posting->pos);
|
63
|
+
SET_PARAMETER("term_frequency", posting->tf);
|
64
|
+
SET_PARAMETER("weight", posting->weight);
|
65
|
+
SET_PARAMETER("n_rest_postings", posting->rest);
|
66
|
+
|
67
|
+
SET_PARAMETER("term_id", term_id);
|
68
|
+
|
69
|
+
#undef SET_PARAMETER
|
70
|
+
}
|
71
|
+
|
52
72
|
void
|
53
73
|
rb_grn_init_posting (VALUE mGrn)
|
54
74
|
{
|
data/ext/groonga/rb-grn-utils.c
CHANGED
@@ -481,46 +481,73 @@ rb_grn_bulk_from_ruby_object_with_type (VALUE object, grn_ctx *context,
|
|
481
481
|
|
482
482
|
switch (type_id) {
|
483
483
|
case GRN_DB_INT8:
|
484
|
+
if (string_p) {
|
485
|
+
object = rb_Integer(object);
|
486
|
+
}
|
484
487
|
value.int8_value = NUM2SHORT(object);
|
485
488
|
string = (const char *)&(value.int8_value);
|
486
489
|
size = sizeof(value.int8_value);
|
487
490
|
break;
|
488
491
|
case GRN_DB_UINT8:
|
492
|
+
if (string_p) {
|
493
|
+
object = rb_Integer(object);
|
494
|
+
}
|
489
495
|
value.uint8_value = NUM2USHORT(object);
|
490
496
|
string = (const char *)&(value.uint8_value);
|
491
497
|
size = sizeof(value.uint8_value);
|
492
498
|
break;
|
493
499
|
case GRN_DB_INT16:
|
500
|
+
if (string_p) {
|
501
|
+
object = rb_Integer(object);
|
502
|
+
}
|
494
503
|
value.int16_value = NUM2SHORT(object);
|
495
504
|
string = (const char *)&(value.int16_value);
|
496
505
|
size = sizeof(value.int16_value);
|
497
506
|
break;
|
498
507
|
case GRN_DB_UINT16:
|
508
|
+
if (string_p) {
|
509
|
+
object = rb_Integer(object);
|
510
|
+
}
|
499
511
|
value.uint16_value = NUM2USHORT(object);
|
500
512
|
string = (const char *)&(value.uint16_value);
|
501
513
|
size = sizeof(value.uint16_value);
|
502
514
|
break;
|
503
515
|
case GRN_DB_INT32:
|
516
|
+
if (string_p) {
|
517
|
+
object = rb_Integer(object);
|
518
|
+
}
|
504
519
|
value.int32_value = NUM2INT(object);
|
505
520
|
string = (const char *)&(value.int32_value);
|
506
521
|
size = sizeof(value.int32_value);
|
507
522
|
break;
|
508
523
|
case GRN_DB_UINT32:
|
524
|
+
if (string_p) {
|
525
|
+
object = rb_Integer(object);
|
526
|
+
}
|
509
527
|
value.uint32_value = NUM2UINT(object);
|
510
528
|
string = (const char *)&(value.uint32_value);
|
511
529
|
size = sizeof(value.uint32_value);
|
512
530
|
break;
|
513
531
|
case GRN_DB_INT64:
|
532
|
+
if (string_p) {
|
533
|
+
object = rb_Integer(object);
|
534
|
+
}
|
514
535
|
value.int64_value = NUM2LL(object);
|
515
536
|
string = (const char *)&(value.int64_value);
|
516
537
|
size = sizeof(value.int64_value);
|
517
538
|
break;
|
518
539
|
case GRN_DB_UINT64:
|
540
|
+
if (string_p) {
|
541
|
+
object = rb_Integer(object);
|
542
|
+
}
|
519
543
|
value.uint64_value = NUM2ULL(object);
|
520
544
|
string = (const char *)&(value.uint64_value);
|
521
545
|
size = sizeof(value.uint64_value);
|
522
546
|
break;
|
523
547
|
case GRN_DB_FLOAT:
|
548
|
+
if (string_p) {
|
549
|
+
object = rb_Float(object);
|
550
|
+
}
|
524
551
|
value.double_value = NUM2DBL(object);
|
525
552
|
string = (const char *)&(value.double_value);
|
526
553
|
size = sizeof(value.double_value);
|
data/ext/groonga/rb-grn.h
CHANGED
@@ -92,7 +92,7 @@ RB_GRN_BEGIN_DECLS
|
|
92
92
|
|
93
93
|
#define RB_GRN_MAJOR_VERSION 4
|
94
94
|
#define RB_GRN_MINOR_VERSION 0
|
95
|
-
#define RB_GRN_MICRO_VERSION
|
95
|
+
#define RB_GRN_MICRO_VERSION 7
|
96
96
|
|
97
97
|
#define RB_GRN_QUERY_DEFAULT_MAX_EXPRESSIONS 32
|
98
98
|
|
@@ -568,6 +568,9 @@ VALUE rb_grn_posting_new (grn_posting *posting,
|
|
568
568
|
grn_id term_id,
|
569
569
|
VALUE rb_table,
|
570
570
|
VALUE rb_lexicon);
|
571
|
+
void rb_grn_posting_update (VALUE rb_posting,
|
572
|
+
grn_posting *posting,
|
573
|
+
grn_id term_id);
|
571
574
|
|
572
575
|
VALUE rb_grn_tokyo_geo_point_new (int latitude,
|
573
576
|
int longitude);
|
data/rroonga-build.rb
CHANGED
@@ -19,15 +19,15 @@ module RroongaBuild
|
|
19
19
|
module RequiredGroongaVersion
|
20
20
|
MAJOR = 4
|
21
21
|
MINOR = 0
|
22
|
-
MICRO =
|
22
|
+
MICRO = 8
|
23
23
|
VERSION = [MAJOR, MINOR, MICRO]
|
24
|
-
RELEASED_DATE = Time.utc(2014,
|
24
|
+
RELEASED_DATE = Time.utc(2014, 11, 29)
|
25
25
|
end
|
26
26
|
|
27
27
|
module LatestGroongaVersion
|
28
28
|
MAJOR = 4
|
29
29
|
MINOR = 0
|
30
|
-
MICRO =
|
30
|
+
MICRO = 8
|
31
31
|
VERSION = [MAJOR, MINOR, MICRO]
|
32
32
|
end
|
33
33
|
|
data/test/test-column.rb
CHANGED
@@ -169,9 +169,18 @@ class ColumnTest < Test::Unit::TestCase
|
|
169
169
|
result.records.collect do |record|
|
170
170
|
record["body"]
|
171
171
|
end)
|
172
|
-
assert_equal(
|
173
|
-
|
174
|
-
|
172
|
+
assert_equal(<<-INSPECTED.chomp, result.expression.inspect)
|
173
|
+
#<Groonga::Expression #<expr
|
174
|
+
vars:{
|
175
|
+
$1:#<record:hash:Posts id:0(nonexistent)>
|
176
|
+
},
|
177
|
+
codes:{
|
178
|
+
0:<get_value(), modify:2, value:#<column:var_size Posts.body range:Text type:scalar compress:none>>,
|
179
|
+
1:<push(), modify:0, value:"drive">,
|
180
|
+
2:<match(), modify:0, value:(NULL)>
|
181
|
+
}
|
182
|
+
>>
|
183
|
+
INSPECTED
|
175
184
|
end
|
176
185
|
|
177
186
|
def test_select_query_from_ctx
|
@@ -200,9 +209,18 @@ class ColumnTest < Test::Unit::TestCase
|
|
200
209
|
result.records.collect do |record|
|
201
210
|
record["body"]
|
202
211
|
end)
|
203
|
-
assert_equal(
|
204
|
-
|
205
|
-
|
212
|
+
assert_equal(<<-INSPECTED.chomp, result.expression.inspect)
|
213
|
+
#<Groonga::Expression #<expr
|
214
|
+
vars:{
|
215
|
+
$1:#<record:hash:Posts id:0(nonexistent)>
|
216
|
+
},
|
217
|
+
codes:{
|
218
|
+
0:<get_value(), modify:2, value:#<column:var_size Posts.body range:Text type:scalar compress:none>>,
|
219
|
+
1:<push(), modify:0, value:"drive">,
|
220
|
+
2:<match(), modify:0, value:(NULL)>
|
221
|
+
}
|
222
|
+
>>
|
223
|
+
INSPECTED
|
206
224
|
end
|
207
225
|
|
208
226
|
def test_select_expression
|
@@ -218,9 +236,19 @@ class ColumnTest < Test::Unit::TestCase
|
|
218
236
|
result.records.collect do |record|
|
219
237
|
record["body"]
|
220
238
|
end)
|
221
|
-
assert_equal(
|
222
|
-
|
223
|
-
|
239
|
+
assert_equal(<<-INSPECTED.chomp, result.expression.inspect)
|
240
|
+
#<Groonga::Expression #<expr
|
241
|
+
vars:{
|
242
|
+
$1:#<record:hash:Posts id:0(nonexistent)>
|
243
|
+
},
|
244
|
+
codes:{
|
245
|
+
0:<push(), modify:0, value:#<record:hash:Posts id:0(nonexistent)>>,
|
246
|
+
1:<get_value(), modify:2, value:#<column:var_size Posts.body range:Text type:scalar compress:none>>,
|
247
|
+
2:<push(), modify:0, value:"drive">,
|
248
|
+
3:<match(), modify:0, value:(NULL)>
|
249
|
+
}
|
250
|
+
>>
|
251
|
+
INSPECTED
|
224
252
|
end
|
225
253
|
|
226
254
|
def test_select_with_block
|
@@ -233,9 +261,19 @@ class ColumnTest < Test::Unit::TestCase
|
|
233
261
|
result.records.collect do |record|
|
234
262
|
record["body"]
|
235
263
|
end)
|
236
|
-
assert_equal(
|
237
|
-
|
238
|
-
|
264
|
+
assert_equal(<<-INSPECTED.chomp, result.expression.inspect)
|
265
|
+
#<Groonga::Expression #<expr
|
266
|
+
vars:{
|
267
|
+
$1:#<record:hash:Posts id:0(nonexistent)>
|
268
|
+
},
|
269
|
+
codes:{
|
270
|
+
0:<push(), modify:1, value:#<record:hash:Posts id:0(nonexistent)>>,
|
271
|
+
1:<get_value(), modify:2, value:#<column:var_size Posts.body range:Text type:scalar compress:none>>,
|
272
|
+
2:<push(), modify:0, value:"drive">,
|
273
|
+
3:<match(), modify:0, value:(NULL)>
|
274
|
+
}
|
275
|
+
>>
|
276
|
+
INSPECTED
|
239
277
|
end
|
240
278
|
|
241
279
|
def test_set_time
|
data/test/test-expression.rb
CHANGED
@@ -77,8 +77,17 @@ class ExpressionTest < Test::Unit::TestCase
|
|
77
77
|
expression.append_operation(Groonga::Operation::PLUS, 2)
|
78
78
|
expression.compile
|
79
79
|
|
80
|
-
assert_equal(
|
81
|
-
|
80
|
+
assert_equal(<<-INSPECTED.chomp, expression.inspect)
|
81
|
+
#<Groonga::Expression #<expr
|
82
|
+
vars:{
|
83
|
+
},
|
84
|
+
codes:{
|
85
|
+
0:<push(), modify:2, value:1>,
|
86
|
+
1:<push(), modify:0, value:1>,
|
87
|
+
2:<plus(), modify:0, value:(NULL)>
|
88
|
+
}
|
89
|
+
>>
|
90
|
+
INSPECTED
|
82
91
|
end
|
83
92
|
|
84
93
|
def test_snippet
|
@@ -162,14 +171,28 @@ class ExpressionTest < Test::Unit::TestCase
|
|
162
171
|
@expression.append_object(Groonga["TokenBigram"],
|
163
172
|
Groonga::Operator::PUSH,
|
164
173
|
1)
|
165
|
-
assert_equal(
|
166
|
-
|
174
|
+
assert_equal(<<-INSPECTED.chomp, @expression.inspect)
|
175
|
+
#<Groonga::Expression #<expr
|
176
|
+
vars:{
|
177
|
+
},
|
178
|
+
codes:{
|
179
|
+
0:<push(), modify:0, value:#<proc:tokenizer TokenBigram arguments:[$1, $2, $3]>>
|
180
|
+
}
|
181
|
+
>>
|
182
|
+
INSPECTED
|
167
183
|
end
|
168
184
|
|
169
185
|
def test_name
|
170
186
|
@expression.append_object(Groonga["TokenBigram"], "push", 1)
|
171
|
-
assert_equal(
|
172
|
-
|
187
|
+
assert_equal(<<-INSPECTED.chomp, @expression.inspect)
|
188
|
+
#<Groonga::Expression #<expr
|
189
|
+
vars:{
|
190
|
+
},
|
191
|
+
codes:{
|
192
|
+
0:<push(), modify:0, value:#<proc:tokenizer TokenBigram arguments:[$1, $2, $3]>>
|
193
|
+
}
|
194
|
+
>>
|
195
|
+
INSPECTED
|
173
196
|
end
|
174
197
|
end
|
175
198
|
end
|
@@ -183,14 +206,28 @@ class ExpressionTest < Test::Unit::TestCase
|
|
183
206
|
class OperatorTest < self
|
184
207
|
def test_constant
|
185
208
|
@expression.append_constant(29, Groonga::Operator::PUSH, 1)
|
186
|
-
assert_equal(
|
187
|
-
|
209
|
+
assert_equal(<<-INSPECTED.chomp, @expression.inspect)
|
210
|
+
#<Groonga::Expression #<expr
|
211
|
+
vars:{
|
212
|
+
},
|
213
|
+
codes:{
|
214
|
+
0:<push(), modify:0, value:29>
|
215
|
+
}
|
216
|
+
>>
|
217
|
+
INSPECTED
|
188
218
|
end
|
189
219
|
|
190
220
|
def test_name
|
191
221
|
@expression.append_constant(29, "push", 1)
|
192
|
-
assert_equal(
|
193
|
-
|
222
|
+
assert_equal(<<-INSPECTED.chomp, @expression.inspect)
|
223
|
+
#<Groonga::Expression #<expr
|
224
|
+
vars:{
|
225
|
+
},
|
226
|
+
codes:{
|
227
|
+
0:<push(), modify:0, value:29>
|
228
|
+
}
|
229
|
+
>>
|
230
|
+
INSPECTED
|
194
231
|
end
|
195
232
|
end
|
196
233
|
end
|
@@ -205,14 +242,32 @@ class ExpressionTest < Test::Unit::TestCase
|
|
205
242
|
|
206
243
|
def test_constant
|
207
244
|
@expression.append_operation(Groonga::Operator::PLUS, 2)
|
208
|
-
assert_equal(
|
209
|
-
|
245
|
+
assert_equal(<<-INSPECTED.chomp, @expression.inspect)
|
246
|
+
#<Groonga::Expression #<expr
|
247
|
+
vars:{
|
248
|
+
},
|
249
|
+
codes:{
|
250
|
+
0:<push(), modify:2, value:29>,
|
251
|
+
1:<push(), modify:0, value:92>,
|
252
|
+
2:<plus(), modify:0, value:(NULL)>
|
253
|
+
}
|
254
|
+
>>
|
255
|
+
INSPECTED
|
210
256
|
end
|
211
257
|
|
212
258
|
def test_name
|
213
259
|
@expression.append_operation("plus", 2)
|
214
|
-
assert_equal(
|
215
|
-
|
260
|
+
assert_equal(<<-INSPECTED.chomp, @expression.inspect)
|
261
|
+
#<Groonga::Expression #<expr
|
262
|
+
vars:{
|
263
|
+
},
|
264
|
+
codes:{
|
265
|
+
0:<push(), modify:2, value:29>,
|
266
|
+
1:<push(), modify:0, value:92>,
|
267
|
+
2:<plus(), modify:0, value:(NULL)>
|
268
|
+
}
|
269
|
+
>>
|
270
|
+
INSPECTED
|
216
271
|
end
|
217
272
|
end
|
218
273
|
|
@@ -244,48 +299,48 @@ class ExpressionTest < Test::Unit::TestCase
|
|
244
299
|
|
245
300
|
class DefaultOperatorTest < self
|
246
301
|
def test_nil
|
247
|
-
assert_equal("
|
302
|
+
assert_equal("and", parse(nil))
|
248
303
|
end
|
249
304
|
|
250
305
|
def test_name
|
251
|
-
assert_equal("
|
306
|
+
assert_equal("or", parse("or"))
|
252
307
|
end
|
253
308
|
|
254
309
|
def test_name_symbol
|
255
|
-
assert_equal("
|
310
|
+
assert_equal("or", parse(:or))
|
256
311
|
end
|
257
312
|
|
258
313
|
def test_symbol
|
259
|
-
assert_equal("
|
314
|
+
assert_equal("or", parse("||"))
|
260
315
|
end
|
261
316
|
|
262
317
|
def test_integer
|
263
|
-
assert_equal("
|
318
|
+
assert_equal("adjust", parse(Groonga::Operator::ADJUST))
|
264
319
|
end
|
265
320
|
|
266
321
|
private
|
267
322
|
def parse(default_operator)
|
268
323
|
@expression.parse("_id:1 _id:2", :default_operator => default_operator)
|
269
|
-
operator = @expression.inspect[
|
324
|
+
operator = @expression.inspect[/6:<([a-zA-Z_-]+)/, 1]
|
270
325
|
operator
|
271
326
|
end
|
272
327
|
end
|
273
328
|
|
274
329
|
class DefaultModeTest < self
|
275
330
|
def test_nil
|
276
|
-
assert_equal("
|
331
|
+
assert_equal("match", parse(nil))
|
277
332
|
end
|
278
333
|
|
279
334
|
def test_name
|
280
|
-
assert_equal("
|
335
|
+
assert_equal("equal", parse("equal"))
|
281
336
|
end
|
282
337
|
|
283
338
|
def test_symbol
|
284
|
-
assert_equal("
|
339
|
+
assert_equal("equal", parse(:equal))
|
285
340
|
end
|
286
341
|
|
287
342
|
def test_integer
|
288
|
-
assert_equal("
|
343
|
+
assert_equal("equal", parse(Groonga::Operator::EQUAL))
|
289
344
|
end
|
290
345
|
|
291
346
|
private
|
@@ -293,7 +348,7 @@ class ExpressionTest < Test::Unit::TestCase
|
|
293
348
|
@expression.parse("query",
|
294
349
|
:default_column => "_id",
|
295
350
|
:default_mode => default_mode)
|
296
|
-
operator = @expression.inspect[
|
351
|
+
operator = @expression.inspect[/2:<([a-zA-Z_-]+)/, 1]
|
297
352
|
operator
|
298
353
|
end
|
299
354
|
end
|
data/test/test-index-column.rb
CHANGED
@@ -500,4 +500,45 @@ class IndexColumnTest < Test::Unit::TestCase
|
|
500
500
|
end
|
501
501
|
end
|
502
502
|
end
|
503
|
+
|
504
|
+
class EstimateSizeTest < self
|
505
|
+
setup
|
506
|
+
def setup_schema
|
507
|
+
Groonga::Schema.define do |schema|
|
508
|
+
schema.create_table("Articles") do |table|
|
509
|
+
table.text("content")
|
510
|
+
end
|
511
|
+
|
512
|
+
schema.create_table("Terms",
|
513
|
+
:type => :hash,
|
514
|
+
:key_type => "ShortText",
|
515
|
+
:default_tokenizer => "TokenBigram",
|
516
|
+
:normalizer => "NormalizerAuto") do |table|
|
517
|
+
table.index("Articles.content",
|
518
|
+
:name => "articles_content",
|
519
|
+
:with_position => true,
|
520
|
+
:with_section => true)
|
521
|
+
end
|
522
|
+
end
|
523
|
+
|
524
|
+
@articles = Groonga["Articles"]
|
525
|
+
@terms = Groonga["Terms"]
|
526
|
+
@index = Groonga["Terms.articles_content"]
|
527
|
+
end
|
528
|
+
|
529
|
+
setup
|
530
|
+
def setup_data
|
531
|
+
@articles.add(:content => "Groonga is fast")
|
532
|
+
@articles.add(:content => "Rroonga is fast")
|
533
|
+
@articles.add(:content => "Mroonga is fast")
|
534
|
+
end
|
535
|
+
|
536
|
+
def test_id
|
537
|
+
assert_equal(7, @index.estimate_size(@terms["fast"].id))
|
538
|
+
end
|
539
|
+
|
540
|
+
def test_record
|
541
|
+
assert_equal(7, @index.estimate_size(@terms["fast"]))
|
542
|
+
end
|
543
|
+
end
|
503
544
|
end
|
data/test/test-index-cursor.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>
|
1
|
+
# Copyright (C) 2012-2014 Kouhei Sutou <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
|
@@ -66,6 +66,26 @@ class IndexCursorTest < Test::Unit::TestCase
|
|
66
66
|
assert_true(opened)
|
67
67
|
end
|
68
68
|
|
69
|
+
def test_each_reuse_posting_object
|
70
|
+
opened = false
|
71
|
+
@terms.open_cursor do |table_cursor|
|
72
|
+
@content_index.open_cursor(table_cursor) do |cursor|
|
73
|
+
posting_object_ids = []
|
74
|
+
postings = []
|
75
|
+
cursor.each(:reuse_posting_object => true) do |posting|
|
76
|
+
posting_object_ids << posting.object_id
|
77
|
+
postings << posting.to_hash
|
78
|
+
end
|
79
|
+
assert_equal([posting_object_ids.first] * posting_object_ids.size,
|
80
|
+
posting_object_ids)
|
81
|
+
assert_equal(expected_postings, postings)
|
82
|
+
opened = true
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
assert_true(opened)
|
87
|
+
end
|
88
|
+
|
69
89
|
def test_record
|
70
90
|
record = nil
|
71
91
|
@terms.open_cursor do |table_cursor|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2013 Kouhei Sutou <kou@clear-code.com>
|
1
|
+
# Copyright (C) 2013-2014 Kouhei Sutou <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
|
@@ -76,6 +76,64 @@ class TableKeySupportTest < Test::Unit::TestCase
|
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
79
|
+
class CastTest < self
|
80
|
+
def test_int8
|
81
|
+
key = "-1"
|
82
|
+
ids = Groonga::Hash.create(:name => "IDs", :key_type => "Int8")
|
83
|
+
id = ids.add(key)
|
84
|
+
assert_equal(key.to_i, id.key)
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_uint8
|
88
|
+
key = "1"
|
89
|
+
ids = Groonga::Hash.create(:name => "IDs", :key_type => "UInt8")
|
90
|
+
id = ids.add(key)
|
91
|
+
assert_equal(key.to_i, id.key)
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_int16
|
95
|
+
key = (-(2 ** 8)).to_s
|
96
|
+
ids = Groonga::Hash.create(:name => "IDs", :key_type => "Int16")
|
97
|
+
id = ids.add(key)
|
98
|
+
assert_equal(key.to_i, id.key)
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_uint16
|
102
|
+
key = (2 ** 8).to_s
|
103
|
+
ids = Groonga::Hash.create(:name => "IDs", :key_type => "UInt16")
|
104
|
+
id = ids.add(key)
|
105
|
+
assert_equal(key.to_i, id.key)
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_int32
|
109
|
+
key = (-(2 ** 16)).to_s
|
110
|
+
ids = Groonga::Hash.create(:name => "IDs", :key_type => "Int32")
|
111
|
+
id = ids.add(key)
|
112
|
+
assert_equal(key.to_i, id.key)
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_uint32
|
116
|
+
key = (2 ** 16).to_s
|
117
|
+
ids = Groonga::Hash.create(:name => "IDs", :key_type => "UInt32")
|
118
|
+
id = ids.add(key)
|
119
|
+
assert_equal(key.to_i, id.key)
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_int64
|
123
|
+
key = (-(2 ** 32)).to_s
|
124
|
+
ids = Groonga::Hash.create(:name => "IDs", :key_type => "Int64")
|
125
|
+
id = ids.add(key)
|
126
|
+
assert_equal(key.to_i, id.key)
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_uint64
|
130
|
+
key = (2 ** 32).to_s
|
131
|
+
ids = Groonga::Hash.create(:name => "IDs", :key_type => "UInt64")
|
132
|
+
id = ids.add(key)
|
133
|
+
assert_equal(key.to_i, id.key)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
79
137
|
class TokenizeTest < self
|
80
138
|
class TableTypeTest < self
|
81
139
|
def test_hash
|
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: 4.0.
|
4
|
+
version: 4.0.7
|
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: 2014-
|
15
|
+
date: 2014-12-12 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: pkg-config
|
@@ -194,10 +194,10 @@ email:
|
|
194
194
|
- y.hayamizu@gmail.com
|
195
195
|
- dara@shidara.net
|
196
196
|
executables:
|
197
|
-
-
|
197
|
+
- grntest-log-analyze
|
198
198
|
- grndump
|
199
199
|
- groonga-database-inspect
|
200
|
-
-
|
200
|
+
- groonga-index-dump
|
201
201
|
extensions:
|
202
202
|
- ext/groonga/extconf.rb
|
203
203
|
extra_rdoc_files:
|
@@ -375,57 +375,57 @@ specification_version: 4
|
|
375
375
|
summary: Ruby bindings for Groonga that provide full text search and column store
|
376
376
|
features.
|
377
377
|
test_files:
|
378
|
-
- test/test-schema.rb
|
378
|
+
- test/test-schema-create-table.rb
|
379
|
+
- test/test-type.rb
|
380
|
+
- test/test-table-select.rb
|
381
|
+
- test/test-variable-size-column.rb
|
382
|
+
- test/test-table-select-normalize.rb
|
383
|
+
- test/test-lock-timeout.rb
|
384
|
+
- test/test-record.rb
|
385
|
+
- test/test-plugin.rb
|
386
|
+
- test/groonga-test-utils.rb
|
387
|
+
- test/test-logger.rb
|
379
388
|
- test/test-snippet.rb
|
389
|
+
- test/test-memory-pool.rb
|
390
|
+
- test/test-command-select.rb
|
391
|
+
- test/test-expression-builder.rb
|
392
|
+
- test/test-database-dumper.rb
|
393
|
+
- test/test-encoding.rb
|
380
394
|
- test/test-variable.rb
|
381
|
-
- test/test-
|
382
|
-
- test/test
|
383
|
-
- test/test-
|
395
|
+
- test/test-context.rb
|
396
|
+
- test/run-test.rb
|
397
|
+
- test/test-index-cursor.rb
|
398
|
+
- test/test-table-select-mecab.rb
|
384
399
|
- test/test-double-array-trie.rb
|
385
|
-
- test/test-
|
386
|
-
- test/test-
|
400
|
+
- test/test-sub-records.rb
|
401
|
+
- test/test-table-offset-and-limit.rb
|
402
|
+
- test/test-table-select-weight.rb
|
403
|
+
- test/test-convert.rb
|
387
404
|
- test/test-column.rb
|
405
|
+
- test/test-table.rb
|
406
|
+
- test/test-gqtp.rb
|
388
407
|
- test/test-table-traverse.rb
|
389
|
-
- test/test-
|
390
|
-
- test/test-table-select.rb
|
391
|
-
- test/test-encoding.rb
|
392
|
-
- test/test-logger.rb
|
393
|
-
- test/test-schema-create-table.rb
|
394
|
-
- test/test-hash.rb
|
395
|
-
- test/test-type.rb
|
396
|
-
- test/test-table-offset-and-limit.rb
|
408
|
+
- test/test-schema.rb
|
397
409
|
- test/test-version.rb
|
398
|
-
- test/test-
|
410
|
+
- test/test-exception.rb
|
411
|
+
- test/test-array.rb
|
412
|
+
- test/test-patricia-trie.rb
|
413
|
+
- test/test-schema-type.rb
|
414
|
+
- test/test-database.rb
|
399
415
|
- test/test-index-column.rb
|
400
|
-
- test/test-table-key-support.rb
|
401
|
-
- test/test-vector-column.rb
|
402
416
|
- test/test-normalizer.rb
|
403
|
-
- test/test-
|
404
|
-
- test/test-schema-type.rb
|
405
|
-
- test/test-sub-records.rb
|
406
|
-
- test/test-procedure.rb
|
407
|
-
- test/test-context.rb
|
408
|
-
- test/test-gqtp.rb
|
409
|
-
- test/test-remote.rb
|
410
|
-
- test/test-database-dumper.rb
|
417
|
+
- test/test-vector-column.rb
|
411
418
|
- test/test-database-inspector.rb
|
412
|
-
- test/test-
|
413
|
-
- test/
|
414
|
-
- test/test-
|
419
|
+
- test/test-pagination.rb
|
420
|
+
- test/test-procedure.rb
|
421
|
+
- test/test-geo-point.rb
|
422
|
+
- test/test-table-key-support.rb
|
415
423
|
- test/test-statistic-measurer.rb
|
416
|
-
- test/test-
|
417
|
-
- test/test-
|
418
|
-
- test/
|
419
|
-
- test/test-
|
420
|
-
- test/test-
|
421
|
-
- test/test-table-select-normalize.rb
|
424
|
+
- test/test-fix-size-column.rb
|
425
|
+
- test/test-accessor.rb
|
426
|
+
- test/test-hash.rb
|
427
|
+
- test/test-expression.rb
|
428
|
+
- test/test-remote.rb
|
422
429
|
- test/test-schema-dumper.rb
|
423
430
|
- test/test-table-dumper.rb
|
424
|
-
- test/test-database.rb
|
425
|
-
- test/test-variable-size-column.rb
|
426
|
-
- test/test-table-select-mecab.rb
|
427
|
-
- test/test-expression-builder.rb
|
428
|
-
- test/test-convert.rb
|
429
|
-
- test/test-index-cursor.rb
|
430
|
-
- test/test-command-select.rb
|
431
431
|
has_rdoc:
|