rroonga 7.1.1-x64-mingw32 → 9.0.2-x64-mingw32
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 +5 -5
 - data/Rakefile +3 -3
 - data/doc/text/news.md +22 -0
 - data/ext/groonga/extconf.rb +29 -26
 - data/ext/groonga/rb-grn.h +3 -3
 - data/lib/2.2/groonga.so +0 -0
 - data/lib/2.3/groonga.so +0 -0
 - data/lib/2.4/groonga.so +0 -0
 - data/lib/2.5/groonga.so +0 -0
 - data/lib/groonga/expression-builder.rb +1 -1
 - data/lib/groonga/schema.rb +13 -0
 - data/rroonga-build.rb +4 -11
 - data/test/test-expression-builder.rb +8 -0
 - data/vendor/local/bin/cv2pdb.exe +0 -0
 - data/vendor/local/bin/generate-pdb.bat +38 -36
 - data/vendor/local/bin/grndb.exe +0 -0
 - data/vendor/local/bin/groonga-benchmark.exe +0 -0
 - data/vendor/local/bin/groonga-suggest-create-dataset.exe +0 -0
 - data/vendor/local/bin/groonga.exe +0 -0
 - data/vendor/local/bin/libgroonga-0.dll +0 -0
 - data/vendor/local/bin/libmecab-2.dll +0 -0
 - data/vendor/local/bin/libmsgpackc.dll +0 -0
 - data/vendor/local/bin/libonigmo-6.dll +0 -0
 - data/vendor/local/bin/libpcre-1.dll +0 -0
 - data/vendor/local/bin/libpcrecpp-0.dll +0 -0
 - data/vendor/local/bin/libpcreposix-0.dll +0 -0
 - data/vendor/local/bin/lz4.exe +0 -0
 - data/vendor/local/bin/lz4c.exe +0 -0
 - data/vendor/local/bin/{lz4cat → lz4cat.exe} +0 -0
 - data/vendor/local/bin/mecab.exe +0 -0
 - data/vendor/local/bin/pcre-config +1 -1
 - data/vendor/local/bin/pcregrep.exe +0 -0
 - data/vendor/local/bin/pcretest.exe +0 -0
 - data/vendor/local/bin/unlz4.exe +0 -0
 - data/vendor/local/bin/zlib1.dll +0 -0
 - data/vendor/local/include/groonga/groonga.h +16 -1
 - data/vendor/local/include/groonga/groonga/accessor.h +5 -1
 - data/vendor/local/include/groonga/groonga/column.h +4 -0
 - data/vendor/local/include/groonga/groonga/db.h +3 -1
 - data/vendor/local/include/groonga/groonga/expr.h +5 -0
 - data/vendor/local/include/groonga/groonga/groonga.h +124 -171
 - data/vendor/local/include/groonga/groonga/highlighter.h +57 -0
 - data/vendor/local/include/groonga/groonga/ii.h +2 -0
 - data/vendor/local/include/groonga/groonga/index_column.h +31 -0
 - data/vendor/local/include/groonga/groonga/memory.h +29 -0
 - data/vendor/local/include/groonga/groonga/msgpack.h +50 -0
 - data/vendor/local/include/groonga/groonga/obj.h +22 -1
 - data/vendor/local/include/groonga/groonga/option.h +61 -0
 - data/vendor/local/include/groonga/groonga/output.h +57 -2
 - data/vendor/local/include/groonga/groonga/output_columns.h +38 -0
 - data/vendor/local/include/groonga/groonga/plugin.h +5 -0
 - data/vendor/local/include/groonga/groonga/raw_string.h +60 -0
 - data/vendor/local/include/groonga/groonga/string.h +113 -0
 - data/vendor/local/include/groonga/groonga/table.h +89 -1
 - data/vendor/local/include/groonga/groonga/thread.h +15 -0
 - data/vendor/local/include/groonga/groonga/time.h +1 -0
 - data/vendor/local/include/groonga/groonga/token.h +60 -10
 - data/vendor/local/include/groonga/groonga/token_cursor.h +59 -0
 - data/vendor/local/include/groonga/groonga/token_filter.h +24 -0
 - data/vendor/local/include/groonga/groonga/token_metadata.h +49 -0
 - data/vendor/local/include/groonga/groonga/tokenizer.h +99 -25
 - data/vendor/local/include/groonga/groonga/tokenizer_query_deprecated.h +50 -0
 - data/vendor/local/include/groonga/groonga/vector.h +80 -0
 - data/vendor/local/include/groonga/groonga/version.h +32 -0
 - data/vendor/local/include/groonga/groonga/window_function.h +18 -8
 - data/vendor/local/include/groonga/groonga/window_function_executor.h +68 -0
 - data/vendor/local/include/lz4.h +504 -212
 - data/vendor/local/include/lz4frame.h +433 -153
 - data/vendor/local/include/lz4frame_static.h +47 -0
 - data/vendor/local/include/lz4hc.h +281 -108
 - data/vendor/local/include/msgpack.hpp +4 -0
 - data/vendor/local/include/msgpack/adaptor/adaptor_base.hpp +1 -0
 - data/vendor/local/include/msgpack/adaptor/adaptor_base_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/adaptor/array_ref_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/adaptor/boost/msgpack_variant_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/adaptor/boost/string_view.hpp +15 -0
 - data/vendor/local/include/msgpack/adaptor/check_container_size_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/adaptor/cpp17/optional.hpp +16 -0
 - data/vendor/local/include/msgpack/adaptor/cpp17/string_view.hpp +16 -0
 - data/vendor/local/include/msgpack/adaptor/define_decl.hpp +2 -0
 - data/vendor/local/include/msgpack/adaptor/ext_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/adaptor/fixint_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/adaptor/int_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/adaptor/map_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/adaptor/msgpack_tuple_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/adaptor/nil_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/adaptor/raw_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/adaptor/size_equal_only_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/adaptor/tr1/unordered_map.hpp +2 -2
 - data/vendor/local/include/msgpack/adaptor/tr1/unordered_set.hpp +2 -2
 - data/vendor/local/include/msgpack/adaptor/v4raw_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/cpp_config_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/create_object_visitor.hpp +17 -0
 - data/vendor/local/include/msgpack/create_object_visitor_decl.hpp +16 -0
 - data/vendor/local/include/msgpack/fbuffer.h +1 -1
 - data/vendor/local/include/msgpack/fbuffer_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/gcc_atomic.hpp +0 -2
 - data/vendor/local/include/msgpack/iterator_decl.hpp +2 -1
 - data/vendor/local/include/msgpack/meta_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/null_visitor.hpp +17 -0
 - data/vendor/local/include/msgpack/null_visitor_decl.hpp +16 -0
 - data/vendor/local/include/msgpack/object.h +5 -0
 - data/vendor/local/include/msgpack/object_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/object_fwd.hpp +1 -0
 - data/vendor/local/include/msgpack/object_fwd_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/pack.h +1 -0
 - data/vendor/local/include/msgpack/pack_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/parse.hpp +18 -0
 - data/vendor/local/include/msgpack/parse_decl.hpp +16 -0
 - data/vendor/local/include/msgpack/parse_return.hpp +17 -0
 - data/vendor/local/include/msgpack/sbuffer_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/sysdep.h +34 -26
 - data/vendor/local/include/msgpack/type.hpp +9 -0
 - data/vendor/local/include/msgpack/unpack.h +12 -1
 - data/vendor/local/include/msgpack/unpack.hpp +1 -0
 - data/vendor/local/include/msgpack/unpack_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/unpack_exception.hpp +15 -0
 - data/vendor/local/include/msgpack/unpack_template.h +22 -30
 - data/vendor/local/include/msgpack/v1/adaptor/array_ref.hpp +6 -6
 - data/vendor/local/include/msgpack/v1/adaptor/boost/fusion.hpp +49 -6
 - data/vendor/local/include/msgpack/v1/adaptor/boost/msgpack_variant.hpp +6 -4
 - data/vendor/local/include/msgpack/v1/adaptor/boost/string_view.hpp +87 -0
 - data/vendor/local/include/msgpack/v1/adaptor/carray.hpp +11 -11
 - data/vendor/local/include/msgpack/v1/adaptor/char_ptr.hpp +1 -1
 - data/vendor/local/include/msgpack/v1/adaptor/cpp11/array.hpp +1 -1
 - data/vendor/local/include/msgpack/v1/adaptor/cpp11/array_char.hpp +8 -1
 - data/vendor/local/include/msgpack/v1/adaptor/cpp11/array_unsigned_char.hpp +8 -1
 - data/vendor/local/include/msgpack/v1/adaptor/cpp11/forward_list.hpp +1 -1
 - data/vendor/local/include/msgpack/v1/adaptor/cpp11/tuple.hpp +2 -2
 - data/vendor/local/include/msgpack/v1/adaptor/cpp11/unordered_map.hpp +4 -4
 - data/vendor/local/include/msgpack/v1/adaptor/cpp11/unordered_set.hpp +2 -2
 - data/vendor/local/include/msgpack/v1/adaptor/cpp17/optional.hpp +90 -0
 - data/vendor/local/include/msgpack/v1/adaptor/cpp17/string_view.hpp +86 -0
 - data/vendor/local/include/msgpack/v1/adaptor/deque.hpp +1 -1
 - data/vendor/local/include/msgpack/v1/adaptor/detail/cpp03_define_array.hpp +1088 -32
 - data/vendor/local/include/msgpack/v1/adaptor/detail/cpp03_define_map.hpp +32 -16
 - data/vendor/local/include/msgpack/v1/adaptor/detail/cpp03_msgpack_tuple.hpp +32 -32
 - data/vendor/local/include/msgpack/v1/adaptor/detail/cpp11_convert_helper.hpp +45 -0
 - data/vendor/local/include/msgpack/v1/adaptor/detail/cpp11_define_array.hpp +4 -3
 - data/vendor/local/include/msgpack/v1/adaptor/detail/cpp11_define_map.hpp +4 -2
 - data/vendor/local/include/msgpack/v1/adaptor/detail/cpp11_msgpack_tuple.hpp +2 -2
 - data/vendor/local/include/msgpack/v1/adaptor/ext.hpp +1 -1
 - data/vendor/local/include/msgpack/v1/adaptor/fixint.hpp +40 -24
 - data/vendor/local/include/msgpack/v1/adaptor/float.hpp +4 -4
 - data/vendor/local/include/msgpack/v1/adaptor/int.hpp +55 -33
 - data/vendor/local/include/msgpack/v1/adaptor/list.hpp +1 -1
 - data/vendor/local/include/msgpack/v1/adaptor/map.hpp +10 -10
 - data/vendor/local/include/msgpack/v1/adaptor/pair.hpp +2 -2
 - data/vendor/local/include/msgpack/v1/adaptor/set.hpp +2 -2
 - data/vendor/local/include/msgpack/v1/adaptor/string.hpp +1 -1
 - data/vendor/local/include/msgpack/v1/adaptor/tr1/unordered_map.hpp +2 -2
 - data/vendor/local/include/msgpack/v1/adaptor/tr1/unordered_set.hpp +2 -2
 - data/vendor/local/include/msgpack/v1/adaptor/vector.hpp +5 -5
 - data/vendor/local/include/msgpack/v1/adaptor/vector_bool.hpp +1 -1
 - data/vendor/local/include/msgpack/v1/adaptor/vector_char.hpp +9 -9
 - data/vendor/local/include/msgpack/v1/adaptor/vector_unsigned_char.hpp +9 -9
 - data/vendor/local/include/msgpack/v1/cpp_config.hpp +6 -0
 - data/vendor/local/include/msgpack/v1/cpp_config_decl.hpp +6 -0
 - data/vendor/local/include/msgpack/v1/detail/cpp03_zone.hpp +41 -34
 - data/vendor/local/include/msgpack/v1/detail/cpp03_zone_decl.hpp +8 -0
 - data/vendor/local/include/msgpack/v1/detail/cpp11_zone.hpp +25 -19
 - data/vendor/local/include/msgpack/v1/detail/cpp11_zone_decl.hpp +8 -0
 - data/vendor/local/include/msgpack/v1/meta.hpp +6 -0
 - data/vendor/local/include/msgpack/v1/meta_decl.hpp +5 -0
 - data/vendor/local/include/msgpack/v1/object.hpp +768 -393
 - data/vendor/local/include/msgpack/v1/object_decl.hpp +11 -1
 - data/vendor/local/include/msgpack/v1/object_fwd.hpp +4 -1
 - data/vendor/local/include/msgpack/v1/object_fwd_decl.hpp +3 -1
 - data/vendor/local/include/msgpack/v1/parse_return.hpp +36 -0
 - data/vendor/local/include/msgpack/v1/unpack.hpp +39 -120
 - data/vendor/local/include/msgpack/v1/unpack_decl.hpp +2 -9
 - data/vendor/local/include/msgpack/v1/unpack_exception.hpp +122 -0
 - data/vendor/local/include/msgpack/v1/vrefbuffer.hpp +2 -2
 - data/vendor/local/include/msgpack/v2/create_object_visitor.hpp +250 -0
 - data/vendor/local/include/msgpack/v2/create_object_visitor_decl.hpp +33 -0
 - data/vendor/local/include/msgpack/v2/meta_decl.hpp +4 -0
 - data/vendor/local/include/msgpack/v2/null_visitor.hpp +96 -0
 - data/vendor/local/include/msgpack/v2/null_visitor_decl.hpp +29 -0
 - data/vendor/local/include/msgpack/v2/object_decl.hpp +4 -0
 - data/vendor/local/include/msgpack/v2/object_fwd.hpp +1 -1
 - data/vendor/local/include/msgpack/v2/object_fwd_decl.hpp +2 -0
 - data/vendor/local/include/msgpack/v2/pack_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/v2/parse.hpp +1072 -0
 - data/vendor/local/include/msgpack/v2/parse_decl.hpp +79 -0
 - data/vendor/local/include/msgpack/v2/parse_return.hpp +37 -0
 - data/vendor/local/include/msgpack/v2/unpack.hpp +21 -1298
 - data/vendor/local/include/msgpack/v2/unpack_decl.hpp +9 -45
 - data/vendor/local/include/msgpack/v2/x3_parse.hpp +875 -0
 - data/vendor/local/include/msgpack/v2/x3_parse_decl.hpp +36 -0
 - data/vendor/local/include/msgpack/v2/x3_unpack.hpp +120 -0
 - data/vendor/local/include/msgpack/v2/x3_unpack_decl.hpp +71 -0
 - data/vendor/local/include/msgpack/v3/adaptor/adaptor_base.hpp +58 -0
 - data/vendor/local/include/msgpack/v3/adaptor/adaptor_base_decl.hpp +52 -0
 - data/vendor/local/include/msgpack/v3/adaptor/array_ref_decl.hpp +36 -0
 - data/vendor/local/include/msgpack/v3/adaptor/boost/msgpack_variant_decl.hpp +42 -0
 - data/vendor/local/include/msgpack/v3/adaptor/check_container_size_decl.hpp +39 -0
 - data/vendor/local/include/msgpack/v3/adaptor/define_decl.hpp +23 -0
 - data/vendor/local/include/msgpack/v3/adaptor/detail/cpp03_define_array_decl.hpp +31 -0
 - data/vendor/local/include/msgpack/v3/adaptor/detail/cpp03_define_map_decl.hpp +31 -0
 - data/vendor/local/include/msgpack/v3/adaptor/detail/cpp03_msgpack_tuple_decl.hpp +43 -0
 - data/vendor/local/include/msgpack/v3/adaptor/detail/cpp11_define_array_decl.hpp +32 -0
 - data/vendor/local/include/msgpack/v3/adaptor/detail/cpp11_define_map_decl.hpp +31 -0
 - data/vendor/local/include/msgpack/v3/adaptor/detail/cpp11_msgpack_tuple_decl.hpp +59 -0
 - data/vendor/local/include/msgpack/v3/adaptor/ext_decl.hpp +34 -0
 - data/vendor/local/include/msgpack/v3/adaptor/fixint_decl.hpp +43 -0
 - data/vendor/local/include/msgpack/v3/adaptor/int_decl.hpp +54 -0
 - data/vendor/local/include/msgpack/v3/adaptor/map_decl.hpp +33 -0
 - data/vendor/local/include/msgpack/v3/adaptor/msgpack_tuple_decl.hpp +21 -0
 - data/vendor/local/include/msgpack/v3/adaptor/nil_decl.hpp +42 -0
 - data/vendor/local/include/msgpack/v3/adaptor/raw_decl.hpp +33 -0
 - data/vendor/local/include/msgpack/v3/adaptor/size_equal_only_decl.hpp +35 -0
 - data/vendor/local/include/msgpack/v3/adaptor/v4raw_decl.hpp +34 -0
 - data/vendor/local/include/msgpack/v3/cpp_config_decl.hpp +84 -0
 - data/vendor/local/include/msgpack/v3/create_object_visitor_decl.hpp +33 -0
 - data/vendor/local/include/msgpack/v3/detail/cpp03_zone_decl.hpp +31 -0
 - data/vendor/local/include/msgpack/v3/detail/cpp11_zone_decl.hpp +31 -0
 - data/vendor/local/include/msgpack/v3/fbuffer_decl.hpp +32 -0
 - data/vendor/local/include/msgpack/v3/iterator_decl.hpp +33 -0
 - data/vendor/local/include/msgpack/v3/meta_decl.hpp +50 -0
 - data/vendor/local/include/msgpack/v3/null_visitor_decl.hpp +29 -0
 - data/vendor/local/include/msgpack/v3/object_decl.hpp +53 -0
 - data/vendor/local/include/msgpack/v3/object_fwd.hpp +70 -0
 - data/vendor/local/include/msgpack/v3/object_fwd_decl.hpp +75 -0
 - data/vendor/local/include/msgpack/v3/pack_decl.hpp +55 -0
 - data/vendor/local/include/msgpack/v3/parse.hpp +677 -0
 - data/vendor/local/include/msgpack/v3/parse_decl.hpp +49 -0
 - data/vendor/local/include/msgpack/v3/parse_return.hpp +35 -0
 - data/vendor/local/include/msgpack/v3/sbuffer_decl.hpp +33 -0
 - data/vendor/local/include/msgpack/v3/unpack.hpp +192 -0
 - data/vendor/local/include/msgpack/v3/unpack_decl.hpp +304 -0
 - data/vendor/local/include/msgpack/v3/vrefbuffer_decl.hpp +29 -0
 - data/vendor/local/include/msgpack/v3/x3_parse_decl.hpp +34 -0
 - data/vendor/local/include/msgpack/v3/x3_unpack.hpp +97 -0
 - data/vendor/local/include/msgpack/v3/x3_unpack_decl.hpp +65 -0
 - data/vendor/local/include/msgpack/v3/zbuffer_decl.hpp +29 -0
 - data/vendor/local/include/msgpack/v3/zone_decl.hpp +21 -0
 - data/vendor/local/include/msgpack/version_master.h +2 -2
 - data/vendor/local/include/msgpack/versioning.hpp +5 -3
 - data/vendor/local/include/msgpack/vrefbuffer.h +1 -2
 - data/vendor/local/include/msgpack/vrefbuffer_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/x3_parse.hpp +15 -0
 - data/vendor/local/include/msgpack/x3_parse_decl.hpp +16 -0
 - data/vendor/local/include/msgpack/x3_unpack.hpp +16 -0
 - data/vendor/local/include/msgpack/x3_unpack_decl.hpp +16 -0
 - data/vendor/local/include/msgpack/zbuffer_decl.hpp +1 -0
 - data/vendor/local/include/msgpack/zone_decl.hpp +1 -0
 - data/vendor/local/include/pcre.h +6 -6
 - data/vendor/local/lib/cmake/msgpack/msgpack-config-version.cmake +46 -0
 - data/vendor/local/lib/cmake/msgpack/msgpack-config.cmake +47 -0
 - data/vendor/local/lib/cmake/msgpack/msgpack-targets-noconfig.cmake +29 -0
 - data/vendor/local/lib/cmake/msgpack/msgpack-targets.cmake +101 -0
 - data/vendor/local/lib/groonga/plugins/functions/index_column.a +0 -0
 - data/vendor/local/lib/groonga/plugins/functions/index_column.dll +0 -0
 - data/vendor/local/lib/groonga/plugins/functions/index_column.dll.a +0 -0
 - data/vendor/local/lib/groonga/plugins/functions/index_column.la +1 -1
 - data/vendor/local/lib/groonga/plugins/functions/math.a +0 -0
 - data/vendor/local/lib/groonga/plugins/functions/math.dll +0 -0
 - data/vendor/local/lib/groonga/plugins/functions/math.dll.a +0 -0
 - data/vendor/local/lib/groonga/plugins/functions/math.la +1 -1
 - data/vendor/local/lib/groonga/plugins/functions/number.a +0 -0
 - data/vendor/local/lib/groonga/plugins/functions/number.dll +0 -0
 - data/vendor/local/lib/groonga/plugins/functions/number.dll.a +0 -0
 - data/vendor/local/lib/groonga/plugins/functions/number.la +1 -1
 - data/vendor/local/lib/groonga/plugins/functions/string.a +0 -0
 - data/vendor/local/lib/groonga/plugins/functions/string.dll +0 -0
 - data/vendor/local/lib/groonga/plugins/functions/string.dll.a +0 -0
 - data/vendor/local/lib/groonga/plugins/functions/string.la +1 -1
 - data/vendor/local/lib/groonga/plugins/functions/time.a +0 -0
 - data/vendor/local/lib/groonga/plugins/functions/time.dll +0 -0
 - data/vendor/local/lib/groonga/plugins/functions/time.dll.a +0 -0
 - data/vendor/local/lib/groonga/plugins/functions/time.la +1 -1
 - data/vendor/local/lib/groonga/plugins/functions/vector.a +0 -0
 - data/vendor/local/lib/groonga/plugins/functions/vector.dll +0 -0
 - data/vendor/local/lib/groonga/plugins/functions/vector.dll.a +0 -0
 - data/vendor/local/lib/groonga/plugins/functions/vector.la +1 -1
 - data/vendor/local/lib/groonga/plugins/normalizers/mysql.a +0 -0
 - data/vendor/local/lib/groonga/plugins/normalizers/mysql.dll +0 -0
 - data/vendor/local/lib/groonga/plugins/normalizers/mysql.dll.a +0 -0
 - data/vendor/local/lib/groonga/plugins/normalizers/mysql.la +2 -2
 - data/vendor/local/lib/groonga/plugins/query_expanders/tsv.a +0 -0
 - data/vendor/local/lib/groonga/plugins/query_expanders/tsv.dll +0 -0
 - data/vendor/local/lib/groonga/plugins/query_expanders/tsv.dll.a +0 -0
 - data/vendor/local/lib/groonga/plugins/query_expanders/tsv.la +1 -1
 - data/vendor/local/lib/groonga/plugins/sharding/dynamic_columns.rb +150 -19
 - data/vendor/local/lib/groonga/plugins/sharding/logical_count.rb +123 -65
 - data/vendor/local/lib/groonga/plugins/sharding/logical_range_filter.rb +528 -113
 - data/vendor/local/lib/groonga/plugins/sharding/logical_select.rb +142 -40
 - data/vendor/local/lib/groonga/plugins/suggest/suggest.a +0 -0
 - data/vendor/local/lib/groonga/plugins/suggest/suggest.dll +0 -0
 - data/vendor/local/lib/groonga/plugins/suggest/suggest.dll.a +0 -0
 - data/vendor/local/lib/groonga/plugins/suggest/suggest.la +1 -1
 - data/vendor/local/lib/groonga/plugins/token_filters/stop_word.a +0 -0
 - data/vendor/local/lib/groonga/plugins/token_filters/stop_word.dll +0 -0
 - data/vendor/local/lib/groonga/plugins/token_filters/stop_word.dll.a +0 -0
 - data/vendor/local/lib/groonga/plugins/token_filters/stop_word.la +1 -1
 - data/vendor/local/lib/groonga/plugins/tokenizers/mecab.a +0 -0
 - data/vendor/local/lib/groonga/plugins/tokenizers/mecab.dll +0 -0
 - data/vendor/local/lib/groonga/plugins/tokenizers/mecab.dll.a +0 -0
 - data/vendor/local/lib/groonga/plugins/tokenizers/mecab.la +1 -1
 - data/vendor/local/lib/groonga/scripts/ruby/backtrace_entry.rb +1 -1
 - data/vendor/local/lib/groonga/scripts/ruby/command_line/grndb.rb +64 -35
 - data/vendor/local/lib/groonga/scripts/ruby/expression.rb +3 -1
 - data/vendor/local/lib/groonga/scripts/ruby/expression_rewriters.rb +15 -21
 - data/vendor/local/lib/groonga/scripts/ruby/expression_rewriters/optimizer.rb +274 -0
 - data/vendor/local/lib/groonga/scripts/ruby/expression_tree.rb +8 -2
 - data/vendor/local/lib/groonga/scripts/ruby/expression_tree/assign.rb +22 -0
 - data/vendor/local/lib/groonga/scripts/ruby/expression_tree/assign_binary_operation.rb +24 -0
 - data/vendor/local/lib/groonga/scripts/ruby/expression_tree/binary_operation.rb +206 -8
 - data/vendor/local/lib/groonga/scripts/ruby/expression_tree/constant.rb +16 -1
 - data/vendor/local/lib/groonga/scripts/ruby/expression_tree/function_call.rb +30 -1
 - data/vendor/local/lib/groonga/scripts/ruby/expression_tree/logical_operation.rb +6 -0
 - data/vendor/local/lib/groonga/scripts/ruby/expression_tree/member.rb +18 -0
 - data/vendor/local/lib/groonga/scripts/ruby/expression_tree/null.rb +17 -0
 - data/vendor/local/lib/groonga/scripts/ruby/expression_tree/reference.rb +18 -0
 - data/vendor/local/lib/groonga/scripts/ruby/expression_tree/table.rb +14 -0
 - data/vendor/local/lib/groonga/scripts/ruby/expression_tree/unary_operation.rb +26 -0
 - data/vendor/local/lib/groonga/scripts/ruby/expression_tree/variable.rb +4 -0
 - data/vendor/local/lib/groonga/scripts/ruby/expression_tree_builder.rb +78 -8
 - data/vendor/local/lib/groonga/scripts/ruby/index_column.rb +10 -0
 - data/vendor/local/lib/groonga/scripts/ruby/initialize/post.rb +2 -0
 - data/vendor/local/lib/groonga/scripts/ruby/locale_output.rb +28 -0
 - data/vendor/local/lib/groonga/scripts/ruby/logger.rb +36 -4
 - data/vendor/local/lib/groonga/scripts/ruby/record.rb +1 -1
 - data/vendor/local/lib/groonga/scripts/ruby/scan_info_builder.rb +0 -3
 - data/vendor/local/lib/groonga/scripts/ruby/scan_info_data.rb +46 -5
 - data/vendor/local/lib/groonga/scripts/ruby/scan_info_data_size_estimator.rb +5 -136
 - data/vendor/local/lib/groonga/scripts/ruby/table.rb +2 -2
 - data/vendor/local/lib/libgroonga.a +0 -0
 - data/vendor/local/lib/libgroonga.dll.a +0 -0
 - data/vendor/local/lib/libgroonga.la +1 -1
 - data/vendor/local/lib/liblz4.a +0 -0
 - data/vendor/local/lib/liblz4.dll +0 -0
 - data/vendor/local/lib/liblz4.dll.1 +0 -0
 - data/vendor/local/lib/{liblz4.dll.1.5.0 → liblz4.dll.1.8.2} +0 -0
 - data/vendor/local/lib/libmecab.dll.a +0 -0
 - data/vendor/local/lib/libmsgpackc.a +0 -0
 - data/vendor/local/lib/libmsgpackc.dll.a +0 -0
 - data/vendor/local/lib/libonigmo.a +0 -0
 - data/vendor/local/lib/libonigmo.dll.a +0 -0
 - data/vendor/local/lib/libpcre.a +0 -0
 - data/vendor/local/lib/libpcre.dll.a +0 -0
 - data/vendor/local/lib/libpcre.la +2 -2
 - data/vendor/local/lib/libpcrecpp.dll.a +0 -0
 - data/vendor/local/lib/libpcrecpp.la +1 -1
 - data/vendor/local/lib/libpcreposix.a +0 -0
 - data/vendor/local/lib/libpcreposix.dll.a +0 -0
 - data/vendor/local/lib/libpcreposix.la +2 -2
 - data/vendor/local/lib/libz.dll.a +0 -0
 - data/vendor/local/lib/pkgconfig/groonga-normalizer-mysql.pc +1 -1
 - data/vendor/local/lib/pkgconfig/groonga.pc +2 -2
 - data/vendor/local/lib/pkgconfig/liblz4.pc +3 -3
 - data/vendor/local/lib/pkgconfig/libpcre.pc +1 -1
 - data/vendor/local/lib/pkgconfig/libpcrecpp.pc +1 -1
 - data/vendor/local/lib/pkgconfig/libpcreposix.pc +1 -1
 - data/vendor/local/lib/pkgconfig/msgpack.pc +1 -1
 - data/vendor/local/libexec/mecab/mecab-cost-train.exe +0 -0
 - data/vendor/local/libexec/mecab/mecab-dict-gen.exe +0 -0
 - data/vendor/local/libexec/mecab/mecab-dict-index.exe +0 -0
 - data/vendor/local/libexec/mecab/mecab-system-eval.exe +0 -0
 - data/vendor/local/libexec/mecab/mecab-test-gen.exe +0 -0
 - data/vendor/local/share/doc/groonga-normalizer-mysql/README.md +14 -22
 - data/vendor/local/share/doc/groonga-normalizer-mysql/news.md +22 -2
 - data/vendor/local/share/doc/groonga/en/html/.buildinfo +1 -1
 - data/vendor/local/share/doc/groonga/en/html/_static/basic.css +113 -4
 - data/vendor/local/share/doc/groonga/en/html/_static/doctools.js +46 -19
 - data/vendor/local/share/doc/groonga/en/html/_static/documentation_options.js +10 -0
 - data/vendor/local/share/doc/groonga/en/html/_static/{jquery-3.1.0.js → jquery-3.2.1.js} +474 -295
 - data/vendor/local/share/doc/groonga/en/html/_static/jquery.js +4 -4
 - data/vendor/local/share/doc/groonga/en/html/_static/language_data.js +297 -0
 - data/vendor/local/share/doc/groonga/en/html/_static/pygments.css +4 -0
 - data/vendor/local/share/doc/groonga/en/html/_static/searchtools.js +69 -322
 - data/vendor/local/share/doc/groonga/en/html/characteristic.html +16 -24
 - data/vendor/local/share/doc/groonga/en/html/client.html +15 -23
 - data/vendor/local/share/doc/groonga/en/html/community.html +30 -38
 - data/vendor/local/share/doc/groonga/en/html/contribution.html +23 -31
 - data/vendor/local/share/doc/groonga/en/html/contribution/development.html +15 -23
 - data/vendor/local/share/doc/groonga/en/html/contribution/development/build.html +15 -23
 - data/vendor/local/share/doc/groonga/en/html/contribution/development/build/unix_autotools.html +58 -66
 - data/vendor/local/share/doc/groonga/en/html/contribution/development/build/unix_cmake.html +51 -56
 - data/vendor/local/share/doc/groonga/en/html/contribution/development/build/windows_cmake.html +52 -56
 - data/vendor/local/share/doc/groonga/en/html/contribution/development/com.html +27 -35
 - data/vendor/local/share/doc/groonga/en/html/contribution/development/cooperation.html +19 -27
 - data/vendor/local/share/doc/groonga/en/html/contribution/development/query.html +26 -34
 - data/vendor/local/share/doc/groonga/en/html/contribution/development/release.html +167 -167
 - data/vendor/local/share/doc/groonga/en/html/contribution/development/repository.html +16 -24
 - data/vendor/local/share/doc/groonga/en/html/contribution/development/test.html +28 -36
 - data/vendor/local/share/doc/groonga/en/html/contribution/documentation.html +15 -23
 - data/vendor/local/share/doc/groonga/en/html/contribution/documentation/c-api.html +15 -23
 - data/vendor/local/share/doc/groonga/en/html/contribution/documentation/i18n.html +59 -67
 - data/vendor/local/share/doc/groonga/en/html/contribution/documentation/introduction.html +31 -39
 - data/vendor/local/share/doc/groonga/en/html/contribution/report.html +18 -26
 - data/vendor/local/share/doc/groonga/en/html/development.html +15 -23
 - data/vendor/local/share/doc/groonga/en/html/development/travis-ci.html +38 -43
 - data/vendor/local/share/doc/groonga/en/html/genindex.html +50 -28
 - data/vendor/local/share/doc/groonga/en/html/index.html +248 -234
 - data/vendor/local/share/doc/groonga/en/html/install.html +43 -47
 - data/vendor/local/share/doc/groonga/en/html/install/centos.html +43 -51
 - data/vendor/local/share/doc/groonga/en/html/install/debian.html +52 -131
 - data/vendor/local/share/doc/groonga/en/html/install/docker.html +155 -0
 - data/vendor/local/share/doc/groonga/en/html/install/fedora.html +41 -49
 - data/vendor/local/share/doc/groonga/en/html/install/mac_os_x.html +29 -37
 - data/vendor/local/share/doc/groonga/en/html/install/others.html +142 -150
 - data/vendor/local/share/doc/groonga/en/html/install/solaris.html +30 -38
 - data/vendor/local/share/doc/groonga/en/html/install/ubuntu.html +43 -51
 - data/vendor/local/share/doc/groonga/en/html/install/windows.html +33 -41
 - data/vendor/local/share/doc/groonga/en/html/limitations.html +36 -42
 - data/vendor/local/share/doc/groonga/en/html/news.html +1586 -598
 - data/vendor/local/share/doc/groonga/en/html/news/0.x.html +83 -83
 - data/vendor/local/share/doc/groonga/en/html/news/1.0.x.html +147 -155
 - data/vendor/local/share/doc/groonga/en/html/news/1.1.x.html +26 -34
 - data/vendor/local/share/doc/groonga/en/html/news/1.2.x.html +225 -233
 - data/vendor/local/share/doc/groonga/en/html/news/1.3.x.html +48 -56
 - data/vendor/local/share/doc/groonga/en/html/news/2.x.html +378 -386
 - data/vendor/local/share/doc/groonga/en/html/news/3.x.html +320 -328
 - data/vendor/local/share/doc/groonga/en/html/news/4.x.html +442 -448
 - data/vendor/local/share/doc/groonga/en/html/news/5.x.html +742 -860
 - data/vendor/local/share/doc/groonga/en/html/news/6.x.html +544 -621
 - data/vendor/local/share/doc/groonga/en/html/news/senna.html +32 -40
 - data/vendor/local/share/doc/groonga/en/html/objects.inv +0 -0
 - data/vendor/local/share/doc/groonga/en/html/reference.html +208 -198
 - data/vendor/local/share/doc/groonga/en/html/reference/alias.html +85 -93
 - data/vendor/local/share/doc/groonga/en/html/reference/api.html +50 -57
 - data/vendor/local/share/doc/groonga/en/html/reference/api/global_configurations.html +62 -77
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_cache.html +117 -149
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_column.html +140 -176
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_command_version.html +43 -55
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_content_type.html +48 -56
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_ctx.html +194 -254
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_db.html +106 -138
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_encoding.html +62 -82
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_expr.html +117 -137
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_geo.html +74 -98
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_hook.html +79 -103
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_ii.html +40 -48
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_index_cursor.html +57 -73
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_info.html +75 -99
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_inspect.html +495 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_match_escalation.html +52 -68
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_obj.html +291 -357
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_proc.html +69 -89
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_search.html +47 -59
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_table.html +226 -306
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_table_cursor.html +120 -160
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_thread.html +80 -103
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_type.html +46 -58
 - data/vendor/local/share/doc/groonga/en/html/reference/api/grn_user_data.html +40 -52
 - data/vendor/local/share/doc/groonga/en/html/reference/api/overview.html +52 -66
 - data/vendor/local/share/doc/groonga/en/html/reference/api/plugin.html +98 -122
 - data/vendor/local/share/doc/groonga/en/html/reference/cast.html +40 -26
 - data/vendor/local/share/doc/groonga/en/html/reference/column.html +16 -24
 - data/vendor/local/share/doc/groonga/en/html/reference/columns/index.html +16 -24
 - data/vendor/local/share/doc/groonga/en/html/reference/columns/pseudo.html +30 -34
 - data/vendor/local/share/doc/groonga/en/html/reference/columns/scalar.html +16 -24
 - data/vendor/local/share/doc/groonga/en/html/reference/columns/vector.html +92 -100
 - data/vendor/local/share/doc/groonga/en/html/reference/command.html +76 -84
 - data/vendor/local/share/doc/groonga/en/html/reference/command/command_version.html +26 -34
 - data/vendor/local/share/doc/groonga/en/html/reference/command/output_format.html +64 -72
 - data/vendor/local/share/doc/groonga/en/html/reference/command/pretty_print.html +21 -29
 - data/vendor/local/share/doc/groonga/en/html/reference/command/request_id.html +25 -33
 - data/vendor/local/share/doc/groonga/en/html/reference/command/request_timeout.html +32 -40
 - data/vendor/local/share/doc/groonga/en/html/reference/command/return_code.html +105 -113
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/cache_limit.html +44 -50
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/check.html +85 -73
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/clearlock.html +31 -37
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/column_copy.html +131 -139
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/column_create.html +370 -326
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/column_list.html +115 -117
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/column_remove.html +38 -44
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/column_rename.html +47 -53
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/config_delete.html +40 -48
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/config_get.html +42 -50
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/config_set.html +41 -49
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/database_unmap.html +37 -45
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/define_selector.html +71 -63
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/defrag.html +31 -37
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/delete.html +49 -51
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/dump.html +64 -71
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/io_flush.html +335 -138
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/load.html +233 -87
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/lock_acquire.html +45 -53
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/lock_clear.html +42 -48
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/lock_release.html +43 -51
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/log_level.html +58 -64
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/log_put.html +33 -38
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/log_reopen.html +31 -38
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/logical_count.html +295 -218
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/logical_parameters.html +56 -64
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/logical_range_filter.html +532 -214
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/logical_select.html +797 -388
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/logical_shard_list.html +35 -43
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/logical_table_remove.html +188 -196
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/normalize.html +83 -90
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/normalizer_list.html +41 -48
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/object_exist.html +41 -49
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/object_inspect.html +401 -403
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/object_list.html +253 -261
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/object_remove.html +60 -68
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/plugin_register.html +36 -44
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/plugin_unregister.html +35 -43
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/query_expand.html +21 -29
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/quit.html +22 -30
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/range_filter.html +21 -29
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/register.html +39 -47
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/reindex.html +47 -53
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/request_cancel.html +72 -74
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/ruby_eval.html +38 -45
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/ruby_load.html +38 -45
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/schema.html +330 -338
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/select.html +1545 -1194
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/shutdown.html +57 -65
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/status.html +83 -91
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/suggest.html +119 -133
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/table_copy.html +30 -38
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/table_create.html +165 -174
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/table_list.html +50 -50
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/table_remove.html +104 -112
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/table_rename.html +42 -50
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/table_tokenize.html +49 -57
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/thread_limit.html +46 -54
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/tokenize.html +110 -117
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/tokenizer_list.html +41 -48
 - data/vendor/local/share/doc/groonga/en/html/reference/commands/truncate.html +40 -46
 - data/vendor/local/share/doc/groonga/en/html/reference/configuration.html +37 -45
 - data/vendor/local/share/doc/groonga/en/html/reference/executables.html +19 -27
 - data/vendor/local/share/doc/groonga/en/html/reference/executables/grndb.html +134 -114
 - data/vendor/local/share/doc/groonga/en/html/reference/executables/grnslap.html +25 -31
 - data/vendor/local/share/doc/groonga/en/html/reference/executables/groonga-benchmark.html +66 -66
 - data/vendor/local/share/doc/groonga/en/html/reference/executables/groonga-httpd.html +174 -182
 - data/vendor/local/share/doc/groonga/en/html/reference/executables/groonga-server-http.html +25 -33
 - data/vendor/local/share/doc/groonga/en/html/reference/executables/groonga-suggest-create-dataset.html +27 -35
 - data/vendor/local/share/doc/groonga/en/html/reference/executables/groonga-suggest-httpd.html +191 -199
 - data/vendor/local/share/doc/groonga/en/html/reference/executables/groonga-suggest-learner.html +32 -40
 - data/vendor/local/share/doc/groonga/en/html/reference/executables/groonga.html +189 -163
 - data/vendor/local/share/doc/groonga/en/html/reference/function.html +59 -64
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/between.html +71 -79
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/cast_loose.html +210 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/edit_distance.html +49 -55
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/fuzzy_search.html +38 -46
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/geo_distance.html +133 -142
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/geo_in_circle.html +67 -73
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/geo_in_rectangle.html +56 -62
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/highlight_full.html +80 -88
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/highlight_html.html +70 -78
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/html_untag.html +56 -64
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/in_records.html +87 -94
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/in_values.html +54 -62
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/math_abs.html +55 -63
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/now.html +40 -48
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/number_classify.html +36 -44
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/prefix_rk_search.html +74 -82
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/query.html +152 -160
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/rand.html +45 -52
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/snippet_html.html +76 -84
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/string_length.html +37 -45
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/string_substring.html +39 -47
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/sub_filter.html +76 -84
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/time_classify_day.html +37 -45
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/time_classify_day_of_week.html +278 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/time_classify_hour.html +37 -45
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/time_classify_minute.html +36 -44
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/time_classify_month.html +36 -44
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/time_classify_second.html +36 -44
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/time_classify_week.html +36 -44
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/time_classify_year.html +37 -45
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/vector_find.html +368 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/vector_new.html +40 -48
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/vector_size.html +54 -62
 - data/vendor/local/share/doc/groonga/en/html/reference/functions/vector_slice.html +40 -47
 - data/vendor/local/share/doc/groonga/en/html/reference/grn_expr.html +44 -52
 - data/vendor/local/share/doc/groonga/en/html/reference/grn_expr/query_syntax.html +307 -316
 - data/vendor/local/share/doc/groonga/en/html/reference/grn_expr/script_syntax.html +486 -492
 - data/vendor/local/share/doc/groonga/en/html/reference/indexing.html +44 -52
 - data/vendor/local/share/doc/groonga/en/html/reference/log.html +128 -147
 - data/vendor/local/share/doc/groonga/en/html/reference/normalizers.html +43 -92
 - data/vendor/local/share/doc/groonga/en/html/reference/normalizers/normalizer_auto.html +179 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/normalizers/normalizer_nfkc100.html +897 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/normalizers/normalizer_nfkc51.html +162 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/operations.html +26 -34
 - data/vendor/local/share/doc/groonga/en/html/reference/operations/geolocation_search.html +48 -56
 - data/vendor/local/share/doc/groonga/en/html/reference/operations/prefix_rk_search.html +47 -55
 - data/vendor/local/share/doc/groonga/en/html/reference/output.html +47 -55
 - data/vendor/local/share/doc/groonga/en/html/reference/query_expanders.html +20 -28
 - data/vendor/local/share/doc/groonga/en/html/reference/query_expanders/tsv.html +93 -101
 - data/vendor/local/share/doc/groonga/en/html/reference/regular_expression.html +228 -225
 - data/vendor/local/share/doc/groonga/en/html/reference/scorer.html +59 -67
 - data/vendor/local/share/doc/groonga/en/html/reference/scorers/scorer_tf_at_most.html +50 -58
 - data/vendor/local/share/doc/groonga/en/html/reference/scorers/scorer_tf_idf.html +57 -65
 - data/vendor/local/share/doc/groonga/en/html/reference/sharding.html +76 -86
 - data/vendor/local/share/doc/groonga/en/html/reference/suggest.html +43 -51
 - data/vendor/local/share/doc/groonga/en/html/reference/suggest/completion.html +159 -167
 - data/vendor/local/share/doc/groonga/en/html/reference/suggest/correction.html +93 -101
 - data/vendor/local/share/doc/groonga/en/html/reference/suggest/introduction.html +85 -93
 - data/vendor/local/share/doc/groonga/en/html/reference/suggest/suggestion.html +88 -96
 - data/vendor/local/share/doc/groonga/en/html/reference/tables.html +142 -150
 - data/vendor/local/share/doc/groonga/en/html/reference/token_filter/summary.html +147 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/token_filters.html +31 -223
 - data/vendor/local/share/doc/groonga/en/html/reference/token_filters/token_filter_nfkc100.html +626 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/token_filters/token_filter_stem.html +291 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/token_filters/token_filter_stop_word.html +287 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/tokenizer/summary.html +259 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/tokenizers.html +42 -1455
 - data/vendor/local/share/doc/groonga/en/html/reference/tokenizers/token_bigram.html +368 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/tokenizers/token_bigram_ignore_blank.html +221 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/tokenizers/token_bigram_ignore_blank_split_symbol.html +240 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/tokenizers/token_bigram_ignore_blank_split_symbol_alpha.html +270 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/tokenizers/token_bigram_ignore_blank_split_symbol_alpha_digit.html +292 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/tokenizers/token_bigram_split_symbol.html +179 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/tokenizers/token_bigram_split_symbol_alpha.html +200 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/tokenizers/token_bigram_split_symbol_alpha_digit.html +212 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/tokenizers/token_delimit.html +357 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/tokenizers/token_delimit_null.html +162 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/tokenizers/token_mecab.html +783 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/tokenizers/token_regexp.html +289 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/tokenizers/token_trigram.html +194 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/tokenizers/token_unigram.html +194 -0
 - data/vendor/local/share/doc/groonga/en/html/reference/tuning.html +71 -79
 - data/vendor/local/share/doc/groonga/en/html/reference/types.html +64 -72
 - data/vendor/local/share/doc/groonga/en/html/reference/window_function.html +29 -37
 - data/vendor/local/share/doc/groonga/en/html/reference/window_functions/record_number.html +38 -46
 - data/vendor/local/share/doc/groonga/en/html/reference/window_functions/window_count.html +38 -46
 - data/vendor/local/share/doc/groonga/en/html/reference/window_functions/window_record_number.html +38 -46
 - data/vendor/local/share/doc/groonga/en/html/reference/window_functions/window_sum.html +38 -46
 - data/vendor/local/share/doc/groonga/en/html/search.html +13 -24
 - data/vendor/local/share/doc/groonga/en/html/searchindex.js +1 -1
 - data/vendor/local/share/doc/groonga/en/html/server.html +15 -23
 - data/vendor/local/share/doc/groonga/en/html/server/gqtp.html +27 -35
 - data/vendor/local/share/doc/groonga/en/html/server/http.html +18 -26
 - data/vendor/local/share/doc/groonga/en/html/server/http/comparison.html +94 -102
 - data/vendor/local/share/doc/groonga/en/html/server/http/groonga-httpd.html +15 -23
 - data/vendor/local/share/doc/groonga/en/html/server/http/groonga.html +15 -23
 - data/vendor/local/share/doc/groonga/en/html/server/memcached.html +18 -26
 - data/vendor/local/share/doc/groonga/en/html/server/package.html +101 -109
 - data/vendor/local/share/doc/groonga/en/html/spec.html +19 -27
 - data/vendor/local/share/doc/groonga/en/html/spec/gqtp.html +207 -215
 - data/vendor/local/share/doc/groonga/en/html/spec/search.html +39 -39
 - data/vendor/local/share/doc/groonga/en/html/troubleshooting.html +15 -23
 - data/vendor/local/share/doc/groonga/en/html/troubleshooting/different_results_with_the_same_keyword.html +46 -50
 - data/vendor/local/share/doc/groonga/en/html/troubleshooting/how_to_analyze_error_message.html +27 -35
 - data/vendor/local/share/doc/groonga/en/html/troubleshooting/mmap_cannot_allocate_memory.html +26 -31
 - data/vendor/local/share/doc/groonga/en/html/tutorial.html +17 -25
 - data/vendor/local/share/doc/groonga/en/html/tutorial/data.html +46 -54
 - data/vendor/local/share/doc/groonga/en/html/tutorial/drilldown.html +63 -71
 - data/vendor/local/share/doc/groonga/en/html/tutorial/index.html +30 -38
 - data/vendor/local/share/doc/groonga/en/html/tutorial/introduction.html +88 -97
 - data/vendor/local/share/doc/groonga/en/html/tutorial/lexicon.html +19 -27
 - data/vendor/local/share/doc/groonga/en/html/tutorial/match_columns.html +61 -69
 - data/vendor/local/share/doc/groonga/en/html/tutorial/micro_blog.html +108 -116
 - data/vendor/local/share/doc/groonga/en/html/tutorial/network.html +24 -32
 - data/vendor/local/share/doc/groonga/en/html/tutorial/patricia_trie.html +19 -27
 - data/vendor/local/share/doc/groonga/en/html/tutorial/query_expansion.html +32 -40
 - data/vendor/local/share/doc/groonga/en/html/tutorial/search.html +52 -60
 - data/vendor/local/share/doc/groonga/ja/html/.buildinfo +1 -1
 - data/vendor/local/share/doc/groonga/ja/html/_static/basic.css +113 -4
 - data/vendor/local/share/doc/groonga/ja/html/_static/doctools.js +46 -19
 - data/vendor/local/share/doc/groonga/ja/html/_static/documentation_options.js +10 -0
 - data/vendor/local/share/doc/groonga/ja/html/_static/{jquery-3.1.0.js → jquery-3.2.1.js} +474 -295
 - data/vendor/local/share/doc/groonga/ja/html/_static/jquery.js +4 -4
 - data/vendor/local/share/doc/groonga/ja/html/_static/language_data.js +124 -0
 - data/vendor/local/share/doc/groonga/ja/html/_static/pygments.css +4 -0
 - data/vendor/local/share/doc/groonga/ja/html/_static/searchtools.js +70 -150
 - data/vendor/local/share/doc/groonga/ja/html/characteristic.html +15 -23
 - data/vendor/local/share/doc/groonga/ja/html/client.html +15 -23
 - data/vendor/local/share/doc/groonga/ja/html/community.html +29 -37
 - data/vendor/local/share/doc/groonga/ja/html/contribution.html +23 -31
 - data/vendor/local/share/doc/groonga/ja/html/contribution/development.html +15 -23
 - data/vendor/local/share/doc/groonga/ja/html/contribution/development/build.html +15 -23
 - data/vendor/local/share/doc/groonga/ja/html/contribution/development/build/unix_autotools.html +50 -58
 - data/vendor/local/share/doc/groonga/ja/html/contribution/development/build/unix_cmake.html +43 -48
 - data/vendor/local/share/doc/groonga/ja/html/contribution/development/build/windows_cmake.html +47 -51
 - data/vendor/local/share/doc/groonga/ja/html/contribution/development/com.html +26 -34
 - data/vendor/local/share/doc/groonga/ja/html/contribution/development/cooperation.html +18 -26
 - data/vendor/local/share/doc/groonga/ja/html/contribution/development/query.html +23 -31
 - data/vendor/local/share/doc/groonga/ja/html/contribution/development/release.html +162 -162
 - data/vendor/local/share/doc/groonga/ja/html/contribution/development/repository.html +16 -24
 - data/vendor/local/share/doc/groonga/ja/html/contribution/development/test.html +26 -34
 - data/vendor/local/share/doc/groonga/ja/html/contribution/documentation.html +15 -23
 - data/vendor/local/share/doc/groonga/ja/html/contribution/documentation/c-api.html +15 -23
 - data/vendor/local/share/doc/groonga/ja/html/contribution/documentation/i18n.html +50 -58
 - data/vendor/local/share/doc/groonga/ja/html/contribution/documentation/introduction.html +28 -36
 - data/vendor/local/share/doc/groonga/ja/html/contribution/report.html +17 -25
 - data/vendor/local/share/doc/groonga/ja/html/development.html +15 -23
 - data/vendor/local/share/doc/groonga/ja/html/development/travis-ci.html +32 -37
 - data/vendor/local/share/doc/groonga/ja/html/genindex.html +50 -28
 - data/vendor/local/share/doc/groonga/ja/html/index.html +247 -233
 - data/vendor/local/share/doc/groonga/ja/html/install.html +41 -45
 - data/vendor/local/share/doc/groonga/ja/html/install/centos.html +44 -52
 - data/vendor/local/share/doc/groonga/ja/html/install/debian.html +52 -121
 - data/vendor/local/share/doc/groonga/ja/html/install/docker.html +155 -0
 - data/vendor/local/share/doc/groonga/ja/html/install/fedora.html +40 -48
 - data/vendor/local/share/doc/groonga/ja/html/install/mac_os_x.html +28 -36
 - data/vendor/local/share/doc/groonga/ja/html/install/others.html +116 -124
 - data/vendor/local/share/doc/groonga/ja/html/install/solaris.html +28 -36
 - data/vendor/local/share/doc/groonga/ja/html/install/ubuntu.html +43 -51
 - data/vendor/local/share/doc/groonga/ja/html/install/windows.html +29 -37
 - data/vendor/local/share/doc/groonga/ja/html/limitations.html +30 -36
 - data/vendor/local/share/doc/groonga/ja/html/news.html +1234 -384
 - data/vendor/local/share/doc/groonga/ja/html/news/0.x.html +82 -82
 - data/vendor/local/share/doc/groonga/ja/html/news/1.0.x.html +146 -154
 - data/vendor/local/share/doc/groonga/ja/html/news/1.1.x.html +25 -33
 - data/vendor/local/share/doc/groonga/ja/html/news/1.2.x.html +191 -199
 - data/vendor/local/share/doc/groonga/ja/html/news/1.3.x.html +41 -49
 - data/vendor/local/share/doc/groonga/ja/html/news/2.x.html +283 -291
 - data/vendor/local/share/doc/groonga/ja/html/news/3.x.html +229 -237
 - data/vendor/local/share/doc/groonga/ja/html/news/4.x.html +274 -280
 - data/vendor/local/share/doc/groonga/ja/html/news/5.x.html +475 -593
 - data/vendor/local/share/doc/groonga/ja/html/news/6.x.html +313 -390
 - data/vendor/local/share/doc/groonga/ja/html/news/senna.html +31 -39
 - data/vendor/local/share/doc/groonga/ja/html/objects.inv +0 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference.html +208 -198
 - data/vendor/local/share/doc/groonga/ja/html/reference/alias.html +70 -78
 - data/vendor/local/share/doc/groonga/ja/html/reference/api.html +50 -57
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/global_configurations.html +57 -72
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_cache.html +107 -139
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_column.html +137 -173
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_command_version.html +40 -52
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_content_type.html +46 -54
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_ctx.html +184 -244
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_db.html +99 -131
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_encoding.html +57 -77
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_expr.html +100 -120
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_geo.html +71 -95
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_hook.html +75 -99
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_ii.html +37 -45
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_index_cursor.html +54 -70
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_info.html +71 -95
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_inspect.html +487 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_match_escalation.html +49 -65
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_obj.html +286 -352
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_proc.html +64 -84
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_search.html +44 -56
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_table.html +219 -299
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_table_cursor.html +116 -156
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_thread.html +70 -93
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_type.html +42 -54
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/grn_user_data.html +36 -48
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/overview.html +48 -62
 - data/vendor/local/share/doc/groonga/ja/html/reference/api/plugin.html +94 -118
 - data/vendor/local/share/doc/groonga/ja/html/reference/cast.html +39 -25
 - data/vendor/local/share/doc/groonga/ja/html/reference/column.html +15 -23
 - data/vendor/local/share/doc/groonga/ja/html/reference/columns/index.html +15 -23
 - data/vendor/local/share/doc/groonga/ja/html/reference/columns/pseudo.html +28 -32
 - data/vendor/local/share/doc/groonga/ja/html/reference/columns/scalar.html +15 -23
 - data/vendor/local/share/doc/groonga/ja/html/reference/columns/vector.html +76 -84
 - data/vendor/local/share/doc/groonga/ja/html/reference/command.html +76 -84
 - data/vendor/local/share/doc/groonga/ja/html/reference/command/command_version.html +25 -33
 - data/vendor/local/share/doc/groonga/ja/html/reference/command/output_format.html +51 -59
 - data/vendor/local/share/doc/groonga/ja/html/reference/command/pretty_print.html +20 -28
 - data/vendor/local/share/doc/groonga/ja/html/reference/command/request_id.html +21 -29
 - data/vendor/local/share/doc/groonga/ja/html/reference/command/request_timeout.html +27 -35
 - data/vendor/local/share/doc/groonga/ja/html/reference/command/return_code.html +101 -109
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/cache_limit.html +39 -45
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/check.html +84 -72
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/clearlock.html +30 -36
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/column_copy.html +104 -112
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/column_create.html +271 -237
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/column_list.html +100 -102
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/column_remove.html +37 -43
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/column_rename.html +41 -47
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/config_delete.html +38 -46
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/config_get.html +39 -47
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/config_set.html +39 -47
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/database_unmap.html +34 -42
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/define_selector.html +70 -62
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/defrag.html +30 -36
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/delete.html +42 -44
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/dump.html +59 -68
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/io_flush.html +300 -126
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/load.html +212 -80
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/lock_acquire.html +42 -50
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/lock_clear.html +40 -46
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/lock_release.html +41 -49
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/log_level.html +57 -63
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/log_put.html +32 -37
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/log_reopen.html +30 -37
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/logical_count.html +246 -178
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/logical_parameters.html +51 -59
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/logical_range_filter.html +479 -175
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/logical_select.html +718 -326
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/logical_shard_list.html +34 -42
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/logical_table_remove.html +145 -153
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/normalize.html +78 -85
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/normalizer_list.html +40 -47
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/object_exist.html +36 -44
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/object_inspect.html +360 -362
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/object_list.html +221 -229
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/object_remove.html +47 -55
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/plugin_register.html +32 -40
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/plugin_unregister.html +33 -41
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/query_expand.html +20 -28
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/quit.html +21 -29
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/range_filter.html +20 -28
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/register.html +35 -43
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/reindex.html +42 -48
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/request_cancel.html +57 -57
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/ruby_eval.html +36 -43
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/ruby_load.html +36 -43
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/schema.html +317 -325
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/select.html +1246 -917
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/shutdown.html +50 -58
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/status.html +77 -85
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/suggest.html +109 -123
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/table_copy.html +29 -37
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/table_create.html +131 -140
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/table_list.html +49 -49
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/table_remove.html +87 -95
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/table_rename.html +36 -44
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/table_tokenize.html +44 -52
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/thread_limit.html +38 -46
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/tokenize.html +93 -100
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/tokenizer_list.html +40 -47
 - data/vendor/local/share/doc/groonga/ja/html/reference/commands/truncate.html +39 -45
 - data/vendor/local/share/doc/groonga/ja/html/reference/configuration.html +36 -44
 - data/vendor/local/share/doc/groonga/ja/html/reference/executables.html +19 -27
 - data/vendor/local/share/doc/groonga/ja/html/reference/executables/grndb.html +125 -107
 - data/vendor/local/share/doc/groonga/ja/html/reference/executables/grnslap.html +23 -29
 - data/vendor/local/share/doc/groonga/ja/html/reference/executables/groonga-benchmark.html +62 -62
 - data/vendor/local/share/doc/groonga/ja/html/reference/executables/groonga-httpd.html +132 -140
 - data/vendor/local/share/doc/groonga/ja/html/reference/executables/groonga-server-http.html +23 -31
 - data/vendor/local/share/doc/groonga/ja/html/reference/executables/groonga-suggest-create-dataset.html +25 -33
 - data/vendor/local/share/doc/groonga/ja/html/reference/executables/groonga-suggest-httpd.html +166 -174
 - data/vendor/local/share/doc/groonga/ja/html/reference/executables/groonga-suggest-learner.html +31 -39
 - data/vendor/local/share/doc/groonga/ja/html/reference/executables/groonga.html +189 -165
 - data/vendor/local/share/doc/groonga/ja/html/reference/function.html +59 -64
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/between.html +69 -77
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/cast_loose.html +208 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/edit_distance.html +48 -54
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/fuzzy_search.html +37 -45
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/geo_distance.html +115 -124
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/geo_in_circle.html +66 -72
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/geo_in_rectangle.html +55 -61
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/highlight_full.html +69 -77
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/highlight_html.html +60 -68
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/html_untag.html +54 -62
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/in_records.html +85 -93
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/in_values.html +54 -62
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/math_abs.html +54 -62
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/now.html +39 -47
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/number_classify.html +35 -43
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/prefix_rk_search.html +67 -75
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/query.html +130 -138
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/rand.html +44 -51
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/snippet_html.html +61 -69
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/string_length.html +36 -44
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/string_substring.html +38 -46
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/sub_filter.html +63 -71
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/time_classify_day.html +36 -44
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/time_classify_day_of_week.html +276 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/time_classify_hour.html +36 -44
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/time_classify_minute.html +35 -43
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/time_classify_month.html +35 -43
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/time_classify_second.html +35 -43
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/time_classify_week.html +35 -43
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/time_classify_year.html +36 -44
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/vector_find.html +353 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/vector_new.html +39 -47
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/vector_size.html +52 -61
 - data/vendor/local/share/doc/groonga/ja/html/reference/functions/vector_slice.html +38 -46
 - data/vendor/local/share/doc/groonga/ja/html/reference/grn_expr.html +38 -46
 - data/vendor/local/share/doc/groonga/ja/html/reference/grn_expr/query_syntax.html +200 -208
 - data/vendor/local/share/doc/groonga/ja/html/reference/grn_expr/script_syntax.html +375 -382
 - data/vendor/local/share/doc/groonga/ja/html/reference/indexing.html +39 -47
 - data/vendor/local/share/doc/groonga/ja/html/reference/log.html +125 -144
 - data/vendor/local/share/doc/groonga/ja/html/reference/normalizers.html +36 -70
 - data/vendor/local/share/doc/groonga/ja/html/reference/normalizers/normalizer_auto.html +168 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/normalizers/normalizer_nfkc100.html +887 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/normalizers/normalizer_nfkc51.html +160 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/operations.html +26 -34
 - data/vendor/local/share/doc/groonga/ja/html/reference/operations/geolocation_search.html +38 -46
 - data/vendor/local/share/doc/groonga/ja/html/reference/operations/prefix_rk_search.html +41 -49
 - data/vendor/local/share/doc/groonga/ja/html/reference/output.html +42 -50
 - data/vendor/local/share/doc/groonga/ja/html/reference/query_expanders.html +20 -28
 - data/vendor/local/share/doc/groonga/ja/html/reference/query_expanders/tsv.html +68 -76
 - data/vendor/local/share/doc/groonga/ja/html/reference/regular_expression.html +178 -184
 - data/vendor/local/share/doc/groonga/ja/html/reference/scorer.html +38 -46
 - data/vendor/local/share/doc/groonga/ja/html/reference/scorers/scorer_tf_at_most.html +38 -46
 - data/vendor/local/share/doc/groonga/ja/html/reference/scorers/scorer_tf_idf.html +39 -47
 - data/vendor/local/share/doc/groonga/ja/html/reference/sharding.html +63 -73
 - data/vendor/local/share/doc/groonga/ja/html/reference/suggest.html +43 -51
 - data/vendor/local/share/doc/groonga/ja/html/reference/suggest/completion.html +130 -138
 - data/vendor/local/share/doc/groonga/ja/html/reference/suggest/correction.html +72 -80
 - data/vendor/local/share/doc/groonga/ja/html/reference/suggest/introduction.html +68 -76
 - data/vendor/local/share/doc/groonga/ja/html/reference/suggest/suggestion.html +76 -86
 - data/vendor/local/share/doc/groonga/ja/html/reference/tables.html +129 -137
 - data/vendor/local/share/doc/groonga/ja/html/reference/token_filter/summary.html +145 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/token_filters.html +31 -215
 - data/vendor/local/share/doc/groonga/ja/html/reference/token_filters/token_filter_nfkc100.html +617 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/token_filters/token_filter_stem.html +289 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/token_filters/token_filter_stop_word.html +284 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/tokenizer/summary.html +233 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/tokenizers.html +42 -1349
 - data/vendor/local/share/doc/groonga/ja/html/reference/tokenizers/token_bigram.html +344 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/tokenizers/token_bigram_ignore_blank.html +219 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/tokenizers/token_bigram_ignore_blank_split_symbol.html +237 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/tokenizers/token_bigram_ignore_blank_split_symbol_alpha.html +267 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/tokenizers/token_bigram_ignore_blank_split_symbol_alpha_digit.html +287 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/tokenizers/token_bigram_split_symbol.html +179 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/tokenizers/token_bigram_split_symbol_alpha.html +199 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/tokenizers/token_bigram_split_symbol_alpha_digit.html +209 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/tokenizers/token_delimit.html +344 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/tokenizers/token_delimit_null.html +160 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/tokenizers/token_mecab.html +764 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/tokenizers/token_regexp.html +284 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/tokenizers/token_trigram.html +191 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/tokenizers/token_unigram.html +191 -0
 - data/vendor/local/share/doc/groonga/ja/html/reference/tuning.html +65 -73
 - data/vendor/local/share/doc/groonga/ja/html/reference/types.html +48 -56
 - data/vendor/local/share/doc/groonga/ja/html/reference/window_function.html +29 -37
 - data/vendor/local/share/doc/groonga/ja/html/reference/window_functions/record_number.html +37 -45
 - data/vendor/local/share/doc/groonga/ja/html/reference/window_functions/window_count.html +37 -45
 - data/vendor/local/share/doc/groonga/ja/html/reference/window_functions/window_record_number.html +37 -45
 - data/vendor/local/share/doc/groonga/ja/html/reference/window_functions/window_sum.html +37 -45
 - data/vendor/local/share/doc/groonga/ja/html/search.html +13 -24
 - data/vendor/local/share/doc/groonga/ja/html/searchindex.js +1 -1
 - data/vendor/local/share/doc/groonga/ja/html/server.html +15 -23
 - data/vendor/local/share/doc/groonga/ja/html/server/gqtp.html +22 -30
 - data/vendor/local/share/doc/groonga/ja/html/server/http.html +17 -25
 - data/vendor/local/share/doc/groonga/ja/html/server/http/comparison.html +82 -90
 - data/vendor/local/share/doc/groonga/ja/html/server/http/groonga-httpd.html +15 -23
 - data/vendor/local/share/doc/groonga/ja/html/server/http/groonga.html +15 -23
 - data/vendor/local/share/doc/groonga/ja/html/server/memcached.html +16 -24
 - data/vendor/local/share/doc/groonga/ja/html/server/package.html +99 -107
 - data/vendor/local/share/doc/groonga/ja/html/spec.html +19 -27
 - data/vendor/local/share/doc/groonga/ja/html/spec/gqtp.html +201 -209
 - data/vendor/local/share/doc/groonga/ja/html/spec/search.html +36 -36
 - data/vendor/local/share/doc/groonga/ja/html/troubleshooting.html +15 -23
 - data/vendor/local/share/doc/groonga/ja/html/troubleshooting/different_results_with_the_same_keyword.html +44 -48
 - data/vendor/local/share/doc/groonga/ja/html/troubleshooting/how_to_analyze_error_message.html +21 -29
 - data/vendor/local/share/doc/groonga/ja/html/troubleshooting/mmap_cannot_allocate_memory.html +24 -29
 - data/vendor/local/share/doc/groonga/ja/html/tutorial.html +16 -24
 - data/vendor/local/share/doc/groonga/ja/html/tutorial/data.html +32 -40
 - data/vendor/local/share/doc/groonga/ja/html/tutorial/drilldown.html +62 -70
 - data/vendor/local/share/doc/groonga/ja/html/tutorial/index.html +22 -30
 - data/vendor/local/share/doc/groonga/ja/html/tutorial/introduction.html +77 -86
 - data/vendor/local/share/doc/groonga/ja/html/tutorial/lexicon.html +15 -23
 - data/vendor/local/share/doc/groonga/ja/html/tutorial/match_columns.html +56 -64
 - data/vendor/local/share/doc/groonga/ja/html/tutorial/micro_blog.html +84 -92
 - data/vendor/local/share/doc/groonga/ja/html/tutorial/network.html +20 -28
 - data/vendor/local/share/doc/groonga/ja/html/tutorial/patricia_trie.html +18 -26
 - data/vendor/local/share/doc/groonga/ja/html/tutorial/query_expansion.html +21 -29
 - data/vendor/local/share/doc/groonga/ja/html/tutorial/search.html +43 -51
 - data/vendor/local/share/doc/pcre/AUTHORS +3 -3
 - data/vendor/local/share/doc/pcre/ChangeLog +53 -0
 - data/vendor/local/share/doc/pcre/LICENCE +3 -3
 - data/vendor/local/share/doc/pcre/NEWS +6 -0
 - data/vendor/local/share/doc/pcre/html/NON-AUTOTOOLS-BUILD.txt +8 -7
 - data/vendor/local/share/groonga/mruby/LEGAL +35 -35
 - data/vendor/local/share/license/cv2pdb/{README → README.MD} +28 -10
 - data/vendor/local/share/license/groonga-normalizer-mysql/README.md +14 -22
 - data/vendor/local/share/license/lz4/LICENSE +2 -2
 - data/vendor/local/share/license/mruby/AUTHORS +3 -0
 - data/vendor/local/share/license/mruby/MITL +1 -1
 - data/vendor/local/share/license/mruby/README.md +1 -1
 - data/vendor/local/share/license/msgpack/README.md +5 -34
 - data/vendor/local/share/license/pcre/LICENCE +3 -3
 - data/vendor/local/share/man/man1/lz4.1 +221 -86
 - data/vendor/local/share/man/man1/lz4c.1 +222 -32
 - data/vendor/local/share/man/man1/lz4cat.1 +221 -30
 - data/vendor/local/share/man/man1/unlz4.1 +223 -0
 - metadata +231 -87
 - data/lib/2.1/groonga.so +0 -0
 - data/vendor/local/lib/groonga/plugins/expression_rewriters/optimizer.rb +0 -147
 - data/vendor/local/lib/groonga/scripts/ruby/expression_tree/options.rb +0 -14
 - data/vendor/local/share/doc/groonga/en/html/_static/ajax-loader.gif +0 -0
 - data/vendor/local/share/doc/groonga/en/html/_static/comment-bright.png +0 -0
 - data/vendor/local/share/doc/groonga/en/html/_static/comment-close.png +0 -0
 - data/vendor/local/share/doc/groonga/en/html/_static/comment.png +0 -0
 - data/vendor/local/share/doc/groonga/en/html/_static/down-pressed.png +0 -0
 - data/vendor/local/share/doc/groonga/en/html/_static/down.png +0 -0
 - data/vendor/local/share/doc/groonga/en/html/_static/up-pressed.png +0 -0
 - data/vendor/local/share/doc/groonga/en/html/_static/up.png +0 -0
 - data/vendor/local/share/doc/groonga/en/html/_static/websupport.js +0 -808
 - data/vendor/local/share/doc/groonga/ja/html/_static/ajax-loader.gif +0 -0
 - data/vendor/local/share/doc/groonga/ja/html/_static/comment-bright.png +0 -0
 - data/vendor/local/share/doc/groonga/ja/html/_static/comment-close.png +0 -0
 - data/vendor/local/share/doc/groonga/ja/html/_static/comment.png +0 -0
 - data/vendor/local/share/doc/groonga/ja/html/_static/down-pressed.png +0 -0
 - data/vendor/local/share/doc/groonga/ja/html/_static/down.png +0 -0
 - data/vendor/local/share/doc/groonga/ja/html/_static/up-pressed.png +0 -0
 - data/vendor/local/share/doc/groonga/ja/html/_static/up.png +0 -0
 - data/vendor/local/share/doc/groonga/ja/html/_static/websupport.js +0 -808
 
| 
         @@ -10,6 +10,7 @@ module Groonga 
     | 
|
| 
       10 
10 
     | 
    
         
             
                             "max",
         
     | 
| 
       11 
11 
     | 
    
         
             
                             "max_border",
         
     | 
| 
       12 
12 
     | 
    
         
             
                             "filter",
         
     | 
| 
      
 13 
     | 
    
         
            +
                             "post_filter",
         
     | 
| 
       13 
14 
     | 
    
         
             
                           ])
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
       15 
16 
     | 
    
         
             
                  def run_body(input)
         
     | 
| 
         @@ -18,9 +19,14 @@ module Groonga 
     | 
|
| 
       18 
19 
     | 
    
         
             
                    counter = Counter.new(input, enumerator.target_range)
         
     | 
| 
       19 
20 
     | 
    
         
             
                    total = 0
         
     | 
| 
       20 
21 
     | 
    
         
             
                    have_shard = false
         
     | 
| 
       21 
     | 
    
         
            -
                     
     | 
| 
       22 
     | 
    
         
            -
                       
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
      
 22 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 23 
     | 
    
         
            +
                      enumerator.each do |shard, shard_range|
         
     | 
| 
      
 24 
     | 
    
         
            +
                        have_shard = true
         
     | 
| 
      
 25 
     | 
    
         
            +
                        counter.count_pre(shard, shard_range)
         
     | 
| 
      
 26 
     | 
    
         
            +
                      end
         
     | 
| 
      
 27 
     | 
    
         
            +
                      total += counter.count
         
     | 
| 
      
 28 
     | 
    
         
            +
                    ensure
         
     | 
| 
      
 29 
     | 
    
         
            +
                      counter.close
         
     | 
| 
       24 
30 
     | 
    
         
             
                    end
         
     | 
| 
       25 
31 
     | 
    
         
             
                    unless have_shard
         
     | 
| 
       26 
32 
     | 
    
         
             
                      message =
         
     | 
| 
         @@ -43,22 +49,40 @@ module Groonga 
     | 
|
| 
       43 
49 
     | 
    
         
             
                    key << "#{input[:max]}\0"
         
     | 
| 
       44 
50 
     | 
    
         
             
                    key << "#{input[:max_border]}\0"
         
     | 
| 
       45 
51 
     | 
    
         
             
                    key << "#{input[:filter]}\0"
         
     | 
| 
      
 52 
     | 
    
         
            +
                    key << "#{input[:post_filter]}\0"
         
     | 
| 
       46 
53 
     | 
    
         
             
                    dynamic_columns = DynamicColumns.parse(input)
         
     | 
| 
       47 
54 
     | 
    
         
             
                    key << dynamic_columns.cache_key
         
     | 
| 
       48 
55 
     | 
    
         
             
                    key
         
     | 
| 
       49 
56 
     | 
    
         
             
                  end
         
     | 
| 
       50 
57 
     | 
    
         | 
| 
      
 58 
     | 
    
         
            +
                  class ShardCountContext
         
     | 
| 
      
 59 
     | 
    
         
            +
                    attr_reader :shard
         
     | 
| 
      
 60 
     | 
    
         
            +
                    attr_reader :cover_type
         
     | 
| 
      
 61 
     | 
    
         
            +
                    attr_reader :range_index
         
     | 
| 
      
 62 
     | 
    
         
            +
                    attr_accessor :table
         
     | 
| 
      
 63 
     | 
    
         
            +
                    def initialize(shard, cover_type, range_index)
         
     | 
| 
      
 64 
     | 
    
         
            +
                      @shard = shard
         
     | 
| 
      
 65 
     | 
    
         
            +
                      @cover_type = cover_type
         
     | 
| 
      
 66 
     | 
    
         
            +
                      @range_idnex = range_index
         
     | 
| 
      
 67 
     | 
    
         
            +
                      @table = shard.table
         
     | 
| 
      
 68 
     | 
    
         
            +
                    end
         
     | 
| 
      
 69 
     | 
    
         
            +
                  end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
       51 
71 
     | 
    
         
             
                  class Counter
         
     | 
| 
       52 
72 
     | 
    
         
             
                    def initialize(input, target_range)
         
     | 
| 
       53 
73 
     | 
    
         
             
                      @logger = Context.instance.logger
         
     | 
| 
       54 
74 
     | 
    
         
             
                      @filter = input[:filter]
         
     | 
| 
      
 75 
     | 
    
         
            +
                      @post_filter = input[:post_filter]
         
     | 
| 
       55 
76 
     | 
    
         
             
                      @dynamic_columns = DynamicColumns.parse(input)
         
     | 
| 
       56 
77 
     | 
    
         
             
                      @target_range = target_range
         
     | 
| 
      
 78 
     | 
    
         
            +
                      @contexts = []
         
     | 
| 
      
 79 
     | 
    
         
            +
                      @temporary_tables = []
         
     | 
| 
      
 80 
     | 
    
         
            +
                      @temporary_expressions = []
         
     | 
| 
       57 
81 
     | 
    
         
             
                    end
         
     | 
| 
       58 
82 
     | 
    
         | 
| 
       59 
     | 
    
         
            -
                    def  
     | 
| 
      
 83 
     | 
    
         
            +
                    def count_pre(shard, shard_range)
         
     | 
| 
       60 
84 
     | 
    
         
             
                      cover_type = @target_range.cover_type(shard_range)
         
     | 
| 
       61 
     | 
    
         
            -
                      return  
     | 
| 
      
 85 
     | 
    
         
            +
                      return if cover_type == :none
         
     | 
| 
       62 
86 
     | 
    
         | 
| 
       63 
87 
     | 
    
         
             
                      shard_key = shard.key
         
     | 
| 
       64 
88 
     | 
    
         
             
                      if shard_key.nil?
         
     | 
| 
         @@ -66,41 +90,41 @@ module Groonga 
     | 
|
| 
       66 
90 
     | 
    
         
             
                                  "<#{shard.key_name}>"
         
     | 
| 
       67 
91 
     | 
    
         
             
                        raise InvalidArgument, message
         
     | 
| 
       68 
92 
     | 
    
         
             
                      end
         
     | 
| 
       69 
     | 
    
         
            -
                      table_name = shard.table_name
         
     | 
| 
       70 
93 
     | 
    
         | 
| 
       71 
     | 
    
         
            -
                       
     | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
       80 
     | 
    
         
            -
                         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
                        range_index 
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
                          log_use_range_index(false, table_name, "need filter",
         
     | 
| 
      
 94 
     | 
    
         
            +
                      table_name = shard.table_name
         
     | 
| 
      
 95 
     | 
    
         
            +
                      range_index = nil
         
     | 
| 
      
 96 
     | 
    
         
            +
                      if @filter or @post_filter
         
     | 
| 
      
 97 
     | 
    
         
            +
                        log_use_range_index(false, table_name, "need filter",
         
     | 
| 
      
 98 
     | 
    
         
            +
                                            __LINE__, __method__)
         
     | 
| 
      
 99 
     | 
    
         
            +
                      elsif cover_type == :all
         
     | 
| 
      
 100 
     | 
    
         
            +
                        log_use_range_index(false, table_name, "covered",
         
     | 
| 
      
 101 
     | 
    
         
            +
                                            __LINE__, __method__)
         
     | 
| 
      
 102 
     | 
    
         
            +
                      else
         
     | 
| 
      
 103 
     | 
    
         
            +
                        index_info = shard_key.find_index(Operator::LESS)
         
     | 
| 
      
 104 
     | 
    
         
            +
                        range_index = index_info.index if index_info
         
     | 
| 
      
 105 
     | 
    
         
            +
                        if range_index
         
     | 
| 
      
 106 
     | 
    
         
            +
                          log_use_range_index(true, table_name, "range index is available",
         
     | 
| 
       85 
107 
     | 
    
         
             
                                              __LINE__, __method__)
         
     | 
| 
       86 
108 
     | 
    
         
             
                        else
         
     | 
| 
       87 
     | 
    
         
            -
                           
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
     | 
    
         
            -
                          if range_index
         
     | 
| 
       90 
     | 
    
         
            -
                            log_use_range_index(true, table_name, "range index is available",
         
     | 
| 
       91 
     | 
    
         
            -
                                                __LINE__, __method__)
         
     | 
| 
       92 
     | 
    
         
            -
                          else
         
     | 
| 
       93 
     | 
    
         
            -
                            log_use_range_index(false, table_name, "no range index",
         
     | 
| 
       94 
     | 
    
         
            -
                                                __LINE__, __method__)
         
     | 
| 
       95 
     | 
    
         
            -
                          end
         
     | 
| 
      
 109 
     | 
    
         
            +
                          log_use_range_index(false, table_name, "no range index",
         
     | 
| 
      
 110 
     | 
    
         
            +
                                              __LINE__, __method__)
         
     | 
| 
       96 
111 
     | 
    
         
             
                        end
         
     | 
| 
      
 112 
     | 
    
         
            +
                      end
         
     | 
| 
      
 113 
     | 
    
         
            +
                      @contexts << ShardCountContext.new(shard, cover_type, range_index)
         
     | 
| 
      
 114 
     | 
    
         
            +
                    end
         
     | 
| 
       97 
115 
     | 
    
         | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
     | 
    
         
            -
             
     | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
       102 
     | 
    
         
            -
                         
     | 
| 
      
 116 
     | 
    
         
            +
                    def count
         
     | 
| 
      
 117 
     | 
    
         
            +
                      prepare_contexts
         
     | 
| 
      
 118 
     | 
    
         
            +
                      total = 0
         
     | 
| 
      
 119 
     | 
    
         
            +
                      @contexts.each do |context|
         
     | 
| 
      
 120 
     | 
    
         
            +
                        total += count_shard(context)
         
     | 
| 
       103 
121 
     | 
    
         
             
                      end
         
     | 
| 
      
 122 
     | 
    
         
            +
                      total
         
     | 
| 
      
 123 
     | 
    
         
            +
                    end
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
                    def close
         
     | 
| 
      
 126 
     | 
    
         
            +
                      @temporary_tables.each(&:close)
         
     | 
| 
      
 127 
     | 
    
         
            +
                      @temporary_expressions.each(&:close)
         
     | 
| 
       104 
128 
     | 
    
         
             
                    end
         
     | 
| 
       105 
129 
     | 
    
         | 
| 
       106 
130 
     | 
    
         
             
                    private
         
     | 
| 
         @@ -119,34 +143,51 @@ module Groonga 
     | 
|
| 
       119 
143 
     | 
    
         
             
                                  message)
         
     | 
| 
       120 
144 
     | 
    
         
             
                    end
         
     | 
| 
       121 
145 
     | 
    
         | 
| 
       122 
     | 
    
         
            -
                    def  
     | 
| 
       123 
     | 
    
         
            -
                       
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
      
 146 
     | 
    
         
            +
                    def prepare_contexts
         
     | 
| 
      
 147 
     | 
    
         
            +
                      if @filter or @post_filter
         
     | 
| 
      
 148 
     | 
    
         
            +
                        if @dynamic_columns.have_initial?
         
     | 
| 
      
 149 
     | 
    
         
            +
                          apply_targets = []
         
     | 
| 
      
 150 
     | 
    
         
            +
                          @contexts.each do |context|
         
     | 
| 
      
 151 
     | 
    
         
            +
                            table = context.table.select_all
         
     | 
| 
      
 152 
     | 
    
         
            +
                            @temporary_tables << table
         
     | 
| 
      
 153 
     | 
    
         
            +
                            context.table = table
         
     | 
| 
      
 154 
     | 
    
         
            +
                            apply_targets << [table]
         
     | 
| 
      
 155 
     | 
    
         
            +
                          end
         
     | 
| 
      
 156 
     | 
    
         
            +
                          @dynamic_columns.apply_initial(apply_targets)
         
     | 
| 
       129 
157 
     | 
    
         
             
                        end
         
     | 
| 
       130 
     | 
    
         
            -
                        dynamic_column.apply(table)
         
     | 
| 
       131 
158 
     | 
    
         
             
                      end
         
     | 
| 
       132 
     | 
    
         
            -
             
     | 
| 
       133 
     | 
    
         
            -
             
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
       135 
     | 
    
         
            -
                       
     | 
| 
       136 
     | 
    
         
            -
                         
     | 
| 
      
 159 
     | 
    
         
            +
                      @contexts.each do |context|
         
     | 
| 
      
 160 
     | 
    
         
            +
                        filter_shard(context)
         
     | 
| 
      
 161 
     | 
    
         
            +
                      end
         
     | 
| 
      
 162 
     | 
    
         
            +
                      if @post_filter
         
     | 
| 
      
 163 
     | 
    
         
            +
                        if @dynamic_columns.have_filtered?
         
     | 
| 
      
 164 
     | 
    
         
            +
                          apply_targets = @contexts.collect do |context|
         
     | 
| 
      
 165 
     | 
    
         
            +
                            [context.table]
         
     | 
| 
      
 166 
     | 
    
         
            +
                          end
         
     | 
| 
      
 167 
     | 
    
         
            +
                          @dynamic_columns.apply_filtered(apply_targets)
         
     | 
| 
      
 168 
     | 
    
         
            +
                        end
         
     | 
| 
      
 169 
     | 
    
         
            +
                        @contexts.each do |context|
         
     | 
| 
      
 170 
     | 
    
         
            +
                          post_filter_shard(context)
         
     | 
| 
      
 171 
     | 
    
         
            +
                        end
         
     | 
| 
       137 
172 
     | 
    
         
             
                      end
         
     | 
| 
       138 
173 
     | 
    
         
             
                    end
         
     | 
| 
       139 
174 
     | 
    
         | 
| 
       140 
     | 
    
         
            -
                    def  
     | 
| 
       141 
     | 
    
         
            -
                       
     | 
| 
       142 
     | 
    
         
            -
             
     | 
| 
       143 
     | 
    
         
            -
             
     | 
| 
       144 
     | 
    
         
            -
             
     | 
| 
       145 
     | 
    
         
            -
             
     | 
| 
       146 
     | 
    
         
            -
             
     | 
| 
       147 
     | 
    
         
            -
             
     | 
| 
       148 
     | 
    
         
            -
                         
     | 
| 
       149 
     | 
    
         
            -
             
     | 
| 
      
 175 
     | 
    
         
            +
                    def filter_shard(context)
         
     | 
| 
      
 176 
     | 
    
         
            +
                      return if context.range_index
         
     | 
| 
      
 177 
     | 
    
         
            +
             
     | 
| 
      
 178 
     | 
    
         
            +
                      if context.cover_type == :all and @filter.nil?
         
     | 
| 
      
 179 
     | 
    
         
            +
                        if @post_filter and @dynamic_columns.have_filtered?
         
     | 
| 
      
 180 
     | 
    
         
            +
                          filtered_table = context.table.select_all
         
     | 
| 
      
 181 
     | 
    
         
            +
                          @temporary_tables << filtered_table
         
     | 
| 
      
 182 
     | 
    
         
            +
                          context.table = filtered_table
         
     | 
| 
      
 183 
     | 
    
         
            +
                        end
         
     | 
| 
      
 184 
     | 
    
         
            +
                      else
         
     | 
| 
      
 185 
     | 
    
         
            +
                        expression = Expression.create(context.table)
         
     | 
| 
      
 186 
     | 
    
         
            +
                        @temporary_expressions << expression
         
     | 
| 
      
 187 
     | 
    
         
            +
                        expression_builder = RangeExpressionBuilder.new(context.shard.key,
         
     | 
| 
      
 188 
     | 
    
         
            +
                                                                        @target_range)
         
     | 
| 
      
 189 
     | 
    
         
            +
                        expression_builder.filter = @filter
         
     | 
| 
      
 190 
     | 
    
         
            +
                        case context.cover_type
         
     | 
| 
       150 
191 
     | 
    
         
             
                        when :all
         
     | 
| 
       151 
192 
     | 
    
         
             
                          expression_builder.build_all(expression)
         
     | 
| 
       152 
193 
     | 
    
         
             
                        when :partial_min
         
     | 
| 
         @@ -156,16 +197,33 @@ module Groonga 
     | 
|
| 
       156 
197 
     | 
    
         
             
                        when :partial_min_and_max
         
     | 
| 
       157 
198 
     | 
    
         
             
                          expression_builder.build_partial_min_and_max(expression)
         
     | 
| 
       158 
199 
     | 
    
         
             
                        end
         
     | 
| 
       159 
     | 
    
         
            -
                        filtered_table = table.select(expression)
         
     | 
| 
       160 
     | 
    
         
            -
                        filtered_table 
     | 
| 
       161 
     | 
    
         
            -
             
     | 
| 
       162 
     | 
    
         
            -
                        filtered_table.close if filtered_table
         
     | 
| 
       163 
     | 
    
         
            -
                        expression.close if expression
         
     | 
| 
      
 200 
     | 
    
         
            +
                        filtered_table = context.table.select(expression)
         
     | 
| 
      
 201 
     | 
    
         
            +
                        @temporary_tables << filtered_table
         
     | 
| 
      
 202 
     | 
    
         
            +
                        context.table = filtered_table
         
     | 
| 
       164 
203 
     | 
    
         
             
                      end
         
     | 
| 
       165 
204 
     | 
    
         
             
                    end
         
     | 
| 
       166 
205 
     | 
    
         | 
| 
       167 
     | 
    
         
            -
                    def  
     | 
| 
       168 
     | 
    
         
            -
                       
     | 
| 
      
 206 
     | 
    
         
            +
                    def count_shard(context)
         
     | 
| 
      
 207 
     | 
    
         
            +
                      if context.range_index
         
     | 
| 
      
 208 
     | 
    
         
            +
                        count_n_records_in_range(context)
         
     | 
| 
      
 209 
     | 
    
         
            +
                      else
         
     | 
| 
      
 210 
     | 
    
         
            +
                        context.table.size
         
     | 
| 
      
 211 
     | 
    
         
            +
                      end
         
     | 
| 
      
 212 
     | 
    
         
            +
                    end
         
     | 
| 
      
 213 
     | 
    
         
            +
             
     | 
| 
      
 214 
     | 
    
         
            +
                    def post_filter_shard(context)
         
     | 
| 
      
 215 
     | 
    
         
            +
                      expression = nil
         
     | 
| 
      
 216 
     | 
    
         
            +
                      post_filtered_table = nil
         
     | 
| 
      
 217 
     | 
    
         
            +
                      expression = Expression.create(context.table)
         
     | 
| 
      
 218 
     | 
    
         
            +
                      @temporary_expressions << expression
         
     | 
| 
      
 219 
     | 
    
         
            +
                      expression.parse(@post_filter)
         
     | 
| 
      
 220 
     | 
    
         
            +
                      filtered_table = context.table.select(expression)
         
     | 
| 
      
 221 
     | 
    
         
            +
                      @temporary_tables << filtered_table
         
     | 
| 
      
 222 
     | 
    
         
            +
                      context.table = filtered_table
         
     | 
| 
      
 223 
     | 
    
         
            +
                    end
         
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
      
 225 
     | 
    
         
            +
                    def count_n_records_in_range(context)
         
     | 
| 
      
 226 
     | 
    
         
            +
                      case context.cover_type
         
     | 
| 
       169 
227 
     | 
    
         
             
                      when :partial_min
         
     | 
| 
       170 
228 
     | 
    
         
             
                        min = @target_range.min
         
     | 
| 
       171 
229 
     | 
    
         
             
                        min_border = @target_range.min_border
         
     | 
| 
         @@ -197,7 +255,7 @@ module Groonga 
     | 
|
| 
       197 
255 
     | 
    
         
             
                        flags |= TableCursorFlags::LT
         
     | 
| 
       198 
256 
     | 
    
         
             
                      end
         
     | 
| 
       199 
257 
     | 
    
         | 
| 
       200 
     | 
    
         
            -
                      TableCursor.open(range_index.table,
         
     | 
| 
      
 258 
     | 
    
         
            +
                      TableCursor.open(context.range_index.table,
         
     | 
| 
       201 
259 
     | 
    
         
             
                                       :min => min,
         
     | 
| 
       202 
260 
     | 
    
         
             
                                       :max => max,
         
     | 
| 
       203 
261 
     | 
    
         
             
                                       :flags => flags) do |table_cursor|
         
     | 
| 
         @@ -16,6 +16,7 @@ module Groonga 
     | 
|
| 
       16 
16 
     | 
    
         
             
                             "output_columns",
         
     | 
| 
       17 
17 
     | 
    
         
             
                             "use_range_index",
         
     | 
| 
       18 
18 
     | 
    
         
             
                             "post_filter",
         
     | 
| 
      
 19 
     | 
    
         
            +
                             "sort_keys",
         
     | 
| 
       19 
20 
     | 
    
         
             
                           ])
         
     | 
| 
       20 
21 
     | 
    
         | 
| 
       21 
22 
     | 
    
         
             
                  def run_body(input)
         
     | 
| 
         @@ -73,26 +74,30 @@ module Groonga 
     | 
|
| 
       73 
74 
     | 
    
         
             
                    key << "#{input[:output_columns]}\0"
         
     | 
| 
       74 
75 
     | 
    
         
             
                    key << "#{input[:use_range_index]}\0"
         
     | 
| 
       75 
76 
     | 
    
         
             
                    key << "#{input[:post_filter]}\0"
         
     | 
| 
      
 77 
     | 
    
         
            +
                    key << "#{input[:sort_keys]}\0"
         
     | 
| 
       76 
78 
     | 
    
         
             
                    dynamic_columns = DynamicColumns.parse(input)
         
     | 
| 
       77 
79 
     | 
    
         
             
                    key << dynamic_columns.cache_key
         
     | 
| 
       78 
80 
     | 
    
         
             
                    key
         
     | 
| 
       79 
81 
     | 
    
         
             
                  end
         
     | 
| 
       80 
82 
     | 
    
         | 
| 
       81 
83 
     | 
    
         
             
                  class ExecuteContext
         
     | 
| 
      
 84 
     | 
    
         
            +
                    include KeysParsable
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
       82 
86 
     | 
    
         
             
                    attr_reader :use_range_index
         
     | 
| 
       83 
87 
     | 
    
         
             
                    attr_reader :enumerator
         
     | 
| 
       84 
88 
     | 
    
         
             
                    attr_reader :order
         
     | 
| 
       85 
89 
     | 
    
         
             
                    attr_reader :filter
         
     | 
| 
       86 
90 
     | 
    
         
             
                    attr_reader :offset
         
     | 
| 
       87 
91 
     | 
    
         
             
                    attr_reader :limit
         
     | 
| 
      
 92 
     | 
    
         
            +
                    attr_reader :post_filter
         
     | 
| 
      
 93 
     | 
    
         
            +
                    attr_reader :sort_keys
         
     | 
| 
       88 
94 
     | 
    
         
             
                    attr_reader :dynamic_columns
         
     | 
| 
       89 
95 
     | 
    
         
             
                    attr_accessor :current_offset
         
     | 
| 
       90 
96 
     | 
    
         
             
                    attr_accessor :current_limit
         
     | 
| 
       91 
97 
     | 
    
         
             
                    attr_reader :result_sets
         
     | 
| 
       92 
     | 
    
         
            -
                    attr_reader :unsorted_result_sets
         
     | 
| 
       93 
98 
     | 
    
         
             
                    attr_reader :temporary_tables
         
     | 
| 
       94 
99 
     | 
    
         
             
                    attr_reader :threshold
         
     | 
| 
       95 
     | 
    
         
            -
                    attr_reader : 
     | 
| 
      
 100 
     | 
    
         
            +
                    attr_reader :time_classify_types
         
     | 
| 
       96 
101 
     | 
    
         
             
                    def initialize(input)
         
     | 
| 
       97 
102 
     | 
    
         
             
                      @input = input
         
     | 
| 
       98 
103 
     | 
    
         
             
                      @use_range_index = parse_use_range_index(@input[:use_range_index])
         
     | 
| 
         @@ -101,34 +106,34 @@ module Groonga 
     | 
|
| 
       101 
106 
     | 
    
         
             
                      @filter = @input[:filter]
         
     | 
| 
       102 
107 
     | 
    
         
             
                      @offset = (@input[:offset] || 0).to_i
         
     | 
| 
       103 
108 
     | 
    
         
             
                      @limit = (@input[:limit] || 10).to_i
         
     | 
| 
      
 109 
     | 
    
         
            +
                      @post_filter = @input[:post_filter]
         
     | 
| 
      
 110 
     | 
    
         
            +
                      @sort_keys = parse_keys(@input[:sort_keys])
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
       104 
112 
     | 
    
         
             
                      @dynamic_columns = DynamicColumns.parse(@input)
         
     | 
| 
       105 
113 
     | 
    
         | 
| 
       106 
114 
     | 
    
         
             
                      @current_offset = @offset
         
     | 
| 
       107 
115 
     | 
    
         
             
                      @current_limit = @limit
         
     | 
| 
       108 
116 
     | 
    
         | 
| 
       109 
117 
     | 
    
         
             
                      @result_sets = []
         
     | 
| 
       110 
     | 
    
         
            -
                      @unsorted_result_sets = []
         
     | 
| 
       111 
     | 
    
         
            -
             
     | 
| 
       112 
118 
     | 
    
         
             
                      @temporary_tables = []
         
     | 
| 
       113 
119 
     | 
    
         | 
| 
       114 
120 
     | 
    
         
             
                      @threshold = compute_threshold
         
     | 
| 
       115 
121 
     | 
    
         | 
| 
       116 
     | 
    
         
            -
                      @ 
     | 
| 
      
 122 
     | 
    
         
            +
                      @time_classify_types = detect_time_classify_types
         
     | 
| 
       117 
123 
     | 
    
         
             
                    end
         
     | 
| 
       118 
124 
     | 
    
         | 
| 
       119 
125 
     | 
    
         
             
                    def close
         
     | 
| 
       120 
     | 
    
         
            -
                      @unsorted_result_sets.each do |result_set|
         
     | 
| 
       121 
     | 
    
         
            -
                        result_set.close if result_set.temporary?
         
     | 
| 
       122 
     | 
    
         
            -
                      end
         
     | 
| 
       123 
     | 
    
         
            -
                      @result_sets.each do |result_set|
         
     | 
| 
       124 
     | 
    
         
            -
                        result_set.close if result_set.temporary?
         
     | 
| 
       125 
     | 
    
         
            -
                      end
         
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
       127 
126 
     | 
    
         
             
                      @temporary_tables.each do |table|
         
     | 
| 
       128 
127 
     | 
    
         
             
                        table.close
         
     | 
| 
       129 
128 
     | 
    
         
             
                      end
         
     | 
| 
       130 
129 
     | 
    
         
             
                    end
         
     | 
| 
       131 
130 
     | 
    
         | 
| 
      
 131 
     | 
    
         
            +
                    def need_look_ahead?
         
     | 
| 
      
 132 
     | 
    
         
            +
                      return false unless @dynamic_columns.have_window_function?
         
     | 
| 
      
 133 
     | 
    
         
            +
                      return false unless @time_classify_types.empty?
         
     | 
| 
      
 134 
     | 
    
         
            +
                      true
         
     | 
| 
      
 135 
     | 
    
         
            +
                    end
         
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
       132 
137 
     | 
    
         
             
                    private
         
     | 
| 
       133 
138 
     | 
    
         
             
                    def parse_use_range_index(use_range_index)
         
     | 
| 
       134 
139 
     | 
    
         
             
                      case use_range_index
         
     | 
| 
         @@ -163,6 +168,33 @@ module Groonga 
     | 
|
| 
       163 
168 
     | 
    
         
             
                      default_threshold = 0.2
         
     | 
| 
       164 
169 
     | 
    
         
             
                      (threshold_env || default_threshold).to_f
         
     | 
| 
       165 
170 
     | 
    
         
             
                    end
         
     | 
| 
      
 171 
     | 
    
         
            +
             
     | 
| 
      
 172 
     | 
    
         
            +
                    def detect_time_classify_types
         
     | 
| 
      
 173 
     | 
    
         
            +
                      window_group_keys = []
         
     | 
| 
      
 174 
     | 
    
         
            +
                      @dynamic_columns.each_filtered do |dynamic_column|
         
     | 
| 
      
 175 
     | 
    
         
            +
                        window_group_keys.concat(dynamic_column.window_group_keys)
         
     | 
| 
      
 176 
     | 
    
         
            +
                      end
         
     | 
| 
      
 177 
     | 
    
         
            +
                      return [] if window_group_keys.empty?
         
     | 
| 
      
 178 
     | 
    
         
            +
             
     | 
| 
      
 179 
     | 
    
         
            +
                      types = []
         
     | 
| 
      
 180 
     | 
    
         
            +
                      @dynamic_columns.each do |dynamic_column|
         
     | 
| 
      
 181 
     | 
    
         
            +
                        next unless window_group_keys.include?(dynamic_column.label)
         
     | 
| 
      
 182 
     | 
    
         
            +
                        case dynamic_column.value.strip
         
     | 
| 
      
 183 
     | 
    
         
            +
                        when /\Atime_classify_(.+?)\s*\(\s*([a-zA-Z\d_]+)\s*[,)]/
         
     | 
| 
      
 184 
     | 
    
         
            +
                          type = $1
         
     | 
| 
      
 185 
     | 
    
         
            +
                          column = $2
         
     | 
| 
      
 186 
     | 
    
         
            +
                          next if column != @enumerator.shard_key_name
         
     | 
| 
      
 187 
     | 
    
         
            +
             
     | 
| 
      
 188 
     | 
    
         
            +
                          case type
         
     | 
| 
      
 189 
     | 
    
         
            +
                          when "minute", "second"
         
     | 
| 
      
 190 
     | 
    
         
            +
                            types << type
         
     | 
| 
      
 191 
     | 
    
         
            +
                          when "day", "hour"
         
     | 
| 
      
 192 
     | 
    
         
            +
                            types << type
         
     | 
| 
      
 193 
     | 
    
         
            +
                          end
         
     | 
| 
      
 194 
     | 
    
         
            +
                        end
         
     | 
| 
      
 195 
     | 
    
         
            +
                      end
         
     | 
| 
      
 196 
     | 
    
         
            +
                      types
         
     | 
| 
      
 197 
     | 
    
         
            +
                    end
         
     | 
| 
       166 
198 
     | 
    
         
             
                  end
         
     | 
| 
       167 
199 
     | 
    
         | 
| 
       168 
200 
     | 
    
         
             
                  class Executor
         
     | 
| 
         @@ -172,20 +204,13 @@ module Groonga 
     | 
|
| 
       172 
204 
     | 
    
         | 
| 
       173 
205 
     | 
    
         
             
                    def execute
         
     | 
| 
       174 
206 
     | 
    
         
             
                      first_shard = nil
         
     | 
| 
       175 
     | 
    
         
            -
                       
     | 
| 
       176 
     | 
    
         
            -
             
     | 
| 
       177 
     | 
    
         
            -
                      if @context.order == :descending
         
     | 
| 
       178 
     | 
    
         
            -
                        each_method = :reverse_each
         
     | 
| 
       179 
     | 
    
         
            -
                      else
         
     | 
| 
       180 
     | 
    
         
            -
                        each_method = :each
         
     | 
| 
       181 
     | 
    
         
            -
                      end
         
     | 
| 
       182 
     | 
    
         
            -
                      enumerator.send(each_method) do |shard, shard_range|
         
     | 
| 
       183 
     | 
    
         
            -
                        first_shard ||= shard
         
     | 
| 
       184 
     | 
    
         
            -
                        shard_executor = ShardExecutor.new(@context, shard, shard_range)
         
     | 
| 
      
 207 
     | 
    
         
            +
                      each_shard_executor do |shard_executor|
         
     | 
| 
      
 208 
     | 
    
         
            +
                        first_shard ||= shard_executor.shard
         
     | 
| 
       185 
209 
     | 
    
         
             
                        shard_executor.execute
         
     | 
| 
       186 
     | 
    
         
            -
                        break if @context.current_limit 
     | 
| 
      
 210 
     | 
    
         
            +
                        break if @context.current_limit.zero?
         
     | 
| 
       187 
211 
     | 
    
         
             
                      end
         
     | 
| 
       188 
212 
     | 
    
         
             
                      if first_shard.nil?
         
     | 
| 
      
 213 
     | 
    
         
            +
                        enumerator = @context.enumerator
         
     | 
| 
       189 
214 
     | 
    
         
             
                        message =
         
     | 
| 
       190 
215 
     | 
    
         
             
                          "[logical_range_filter] no shard exists: " +
         
     | 
| 
       191 
216 
     | 
    
         
             
                          "logical_table: <#{enumerator.logical_table}>: " +
         
     | 
| 
         @@ -195,82 +220,411 @@ module Groonga 
     | 
|
| 
       195 
220 
     | 
    
         
             
                      if @context.result_sets.empty?
         
     | 
| 
       196 
221 
     | 
    
         
             
                        result_set = HashTable.create(:flags => ObjectFlags::WITH_SUBREC,
         
     | 
| 
       197 
222 
     | 
    
         
             
                                                      :key_type => first_shard.table)
         
     | 
| 
       198 
     | 
    
         
            -
                        @context. 
     | 
| 
       199 
     | 
    
         
            -
             
     | 
| 
      
 223 
     | 
    
         
            +
                        @context.temporary_tables << result_set
         
     | 
| 
      
 224 
     | 
    
         
            +
                        targets = [[result_set]]
         
     | 
| 
      
 225 
     | 
    
         
            +
                        @context.dynamic_columns.apply_initial(targets)
         
     | 
| 
      
 226 
     | 
    
         
            +
                        @context.dynamic_columns.apply_filtered(targets)
         
     | 
| 
      
 227 
     | 
    
         
            +
                        @context.result_sets << result_set
         
     | 
| 
      
 228 
     | 
    
         
            +
                      end
         
     | 
| 
      
 229 
     | 
    
         
            +
                    end
         
     | 
| 
      
 230 
     | 
    
         
            +
             
     | 
| 
      
 231 
     | 
    
         
            +
                    private
         
     | 
| 
      
 232 
     | 
    
         
            +
                    def each_shard_executor(&block)
         
     | 
| 
      
 233 
     | 
    
         
            +
                      enumerator = @context.enumerator
         
     | 
| 
      
 234 
     | 
    
         
            +
                      target_range = enumerator.target_range
         
     | 
| 
      
 235 
     | 
    
         
            +
                      if @context.order == :descending
         
     | 
| 
      
 236 
     | 
    
         
            +
                        each_method = :reverse_each
         
     | 
| 
      
 237 
     | 
    
         
            +
                      else
         
     | 
| 
      
 238 
     | 
    
         
            +
                        each_method = :each
         
     | 
| 
      
 239 
     | 
    
         
            +
                      end
         
     | 
| 
      
 240 
     | 
    
         
            +
                      if @context.need_look_ahead?
         
     | 
| 
      
 241 
     | 
    
         
            +
                        executors = []
         
     | 
| 
      
 242 
     | 
    
         
            +
                        previous_executor = nil
         
     | 
| 
      
 243 
     | 
    
         
            +
                        enumerator.send(each_method) do |shard, shard_range|
         
     | 
| 
      
 244 
     | 
    
         
            +
                          current_executor = ShardExecutor.new(@context, shard, shard_range)
         
     | 
| 
      
 245 
     | 
    
         
            +
                          if previous_executor
         
     | 
| 
      
 246 
     | 
    
         
            +
                            previous_executor.next_executor = current_executor
         
     | 
| 
      
 247 
     | 
    
         
            +
                            current_executor.previous_executor = previous_executor
         
     | 
| 
      
 248 
     | 
    
         
            +
                            executors << previous_executor
         
     | 
| 
      
 249 
     | 
    
         
            +
                          end
         
     | 
| 
      
 250 
     | 
    
         
            +
                          previous_executor = current_executor
         
     | 
| 
       200 
251 
     | 
    
         
             
                        end
         
     | 
| 
       201 
     | 
    
         
            -
                         
     | 
| 
       202 
     | 
    
         
            -
             
     | 
| 
      
 252 
     | 
    
         
            +
                        executors << previous_executor if previous_executor
         
     | 
| 
      
 253 
     | 
    
         
            +
                        executors.each(&block)
         
     | 
| 
      
 254 
     | 
    
         
            +
                      else
         
     | 
| 
      
 255 
     | 
    
         
            +
                        enumerator.send(each_method) do |shard, shard_range|
         
     | 
| 
      
 256 
     | 
    
         
            +
                          yield(ShardExecutor.new(@context, shard, shard_range))
         
     | 
| 
       203 
257 
     | 
    
         
             
                        end
         
     | 
| 
       204 
     | 
    
         
            -
                        @context.result_sets << result_set
         
     | 
| 
       205 
258 
     | 
    
         
             
                      end
         
     | 
| 
       206 
259 
     | 
    
         
             
                    end
         
     | 
| 
       207 
260 
     | 
    
         
             
                  end
         
     | 
| 
       208 
261 
     | 
    
         | 
| 
      
 262 
     | 
    
         
            +
                  class Window
         
     | 
| 
      
 263 
     | 
    
         
            +
                    include Comparable
         
     | 
| 
      
 264 
     | 
    
         
            +
             
     | 
| 
      
 265 
     | 
    
         
            +
                    attr_reader :unit
         
     | 
| 
      
 266 
     | 
    
         
            +
                    attr_reader :step
         
     | 
| 
      
 267 
     | 
    
         
            +
                    def initialize(context, shard, shard_range, unit, step)
         
     | 
| 
      
 268 
     | 
    
         
            +
                      @context = context
         
     | 
| 
      
 269 
     | 
    
         
            +
                      @shard = shard
         
     | 
| 
      
 270 
     | 
    
         
            +
                      @shard_range = shard_range
         
     | 
| 
      
 271 
     | 
    
         
            +
                      @unit = unit
         
     | 
| 
      
 272 
     | 
    
         
            +
                      @step = step
         
     | 
| 
      
 273 
     | 
    
         
            +
             
     | 
| 
      
 274 
     | 
    
         
            +
                      @between = Groonga::Context.instance["between"]
         
     | 
| 
      
 275 
     | 
    
         
            +
             
     | 
| 
      
 276 
     | 
    
         
            +
                      @target_range = @context.enumerator.target_range
         
     | 
| 
      
 277 
     | 
    
         
            +
             
     | 
| 
      
 278 
     | 
    
         
            +
                      case @unit
         
     | 
| 
      
 279 
     | 
    
         
            +
                      when :day
         
     | 
| 
      
 280 
     | 
    
         
            +
                        @step_second = (60 * 60 * 24) * @step
         
     | 
| 
      
 281 
     | 
    
         
            +
                      when :hour
         
     | 
| 
      
 282 
     | 
    
         
            +
                        @step_second = (60 * 60) * @step
         
     | 
| 
      
 283 
     | 
    
         
            +
                      else
         
     | 
| 
      
 284 
     | 
    
         
            +
                        raise InvalidArgument "Unexpected unit: #{@unit.inspect}"
         
     | 
| 
      
 285 
     | 
    
         
            +
                      end
         
     | 
| 
      
 286 
     | 
    
         
            +
                    end
         
     | 
| 
      
 287 
     | 
    
         
            +
             
     | 
| 
      
 288 
     | 
    
         
            +
                    def <=>(other)
         
     | 
| 
      
 289 
     | 
    
         
            +
                      case @unit
         
     | 
| 
      
 290 
     | 
    
         
            +
                      when other.unit
         
     | 
| 
      
 291 
     | 
    
         
            +
                        @step <=> other.unit
         
     | 
| 
      
 292 
     | 
    
         
            +
                      when :day # @unit == :day && other.unit == :hour
         
     | 
| 
      
 293 
     | 
    
         
            +
                        1
         
     | 
| 
      
 294 
     | 
    
         
            +
                      else # @unit == :hour && other.unit == :day
         
     | 
| 
      
 295 
     | 
    
         
            +
                        -1
         
     | 
| 
      
 296 
     | 
    
         
            +
                      end
         
     | 
| 
      
 297 
     | 
    
         
            +
                    end
         
     | 
| 
      
 298 
     | 
    
         
            +
             
     | 
| 
      
 299 
     | 
    
         
            +
                    def each(table)
         
     | 
| 
      
 300 
     | 
    
         
            +
                      min = create_min_edge
         
     | 
| 
      
 301 
     | 
    
         
            +
                      max = create_max_edge(min)
         
     | 
| 
      
 302 
     | 
    
         
            +
                      shard_key = table.find_column(@context.enumerator.shard_key_name)
         
     | 
| 
      
 303 
     | 
    
         
            +
                      begin
         
     | 
| 
      
 304 
     | 
    
         
            +
                        current_min = min
         
     | 
| 
      
 305 
     | 
    
         
            +
                        while current_min < max do
         
     | 
| 
      
 306 
     | 
    
         
            +
                          next_min = compute_next_min_edge(current_min)
         
     | 
| 
      
 307 
     | 
    
         
            +
                          if next_min > max
         
     | 
| 
      
 308 
     | 
    
         
            +
                            current_max = max
         
     | 
| 
      
 309 
     | 
    
         
            +
                          else
         
     | 
| 
      
 310 
     | 
    
         
            +
                            current_max = WindowEdge.new(next_min.year,
         
     | 
| 
      
 311 
     | 
    
         
            +
                                                         next_min.month,
         
     | 
| 
      
 312 
     | 
    
         
            +
                                                         next_min.day,
         
     | 
| 
      
 313 
     | 
    
         
            +
                                                         next_min.hour,
         
     | 
| 
      
 314 
     | 
    
         
            +
                                                         next_min.minute,
         
     | 
| 
      
 315 
     | 
    
         
            +
                                                         next_min.second,
         
     | 
| 
      
 316 
     | 
    
         
            +
                                                         next_min.microsecond,
         
     | 
| 
      
 317 
     | 
    
         
            +
                                                         :exclude)
         
     | 
| 
      
 318 
     | 
    
         
            +
                          end
         
     | 
| 
      
 319 
     | 
    
         
            +
                          windowed_table = select_by_range(table,
         
     | 
| 
      
 320 
     | 
    
         
            +
                                                           shard_key,
         
     | 
| 
      
 321 
     | 
    
         
            +
                                                           current_min,
         
     | 
| 
      
 322 
     | 
    
         
            +
                                                           current_max)
         
     | 
| 
      
 323 
     | 
    
         
            +
                          if windowed_table.empty?
         
     | 
| 
      
 324 
     | 
    
         
            +
                            windowed_table.close
         
     | 
| 
      
 325 
     | 
    
         
            +
                          else
         
     | 
| 
      
 326 
     | 
    
         
            +
                            message = "[logical_range_filter][window] "
         
     | 
| 
      
 327 
     | 
    
         
            +
                            message << "<#{@shard.table_name}>: "
         
     | 
| 
      
 328 
     | 
    
         
            +
                            message << inspect_range(current_min, current_max)
         
     | 
| 
      
 329 
     | 
    
         
            +
                            Context.instance.logger.log(Logger::Level::DEBUG,
         
     | 
| 
      
 330 
     | 
    
         
            +
                                                        __FILE__,
         
     | 
| 
      
 331 
     | 
    
         
            +
                                                        __LINE__,
         
     | 
| 
      
 332 
     | 
    
         
            +
                                                        __method__.to_s,
         
     | 
| 
      
 333 
     | 
    
         
            +
                                                        message)
         
     | 
| 
      
 334 
     | 
    
         
            +
                            yield(windowed_table)
         
     | 
| 
      
 335 
     | 
    
         
            +
                          end
         
     | 
| 
      
 336 
     | 
    
         
            +
                          current_min = next_min
         
     | 
| 
      
 337 
     | 
    
         
            +
                        end
         
     | 
| 
      
 338 
     | 
    
         
            +
                      ensure
         
     | 
| 
      
 339 
     | 
    
         
            +
                        shard_key.close
         
     | 
| 
      
 340 
     | 
    
         
            +
                      end
         
     | 
| 
      
 341 
     | 
    
         
            +
                    end
         
     | 
| 
      
 342 
     | 
    
         
            +
             
     | 
| 
      
 343 
     | 
    
         
            +
                    private
         
     | 
| 
      
 344 
     | 
    
         
            +
                    def create_min_edge
         
     | 
| 
      
 345 
     | 
    
         
            +
                      min = @target_range.min
         
     | 
| 
      
 346 
     | 
    
         
            +
                      if min
         
     | 
| 
      
 347 
     | 
    
         
            +
                        year = min.year
         
     | 
| 
      
 348 
     | 
    
         
            +
                        month = min.month
         
     | 
| 
      
 349 
     | 
    
         
            +
                        day = min.day
         
     | 
| 
      
 350 
     | 
    
         
            +
                        hour = min.hour
         
     | 
| 
      
 351 
     | 
    
         
            +
                        minute = min.min
         
     | 
| 
      
 352 
     | 
    
         
            +
                        second = min.sec
         
     | 
| 
      
 353 
     | 
    
         
            +
                        microsecond = min.usec
         
     | 
| 
      
 354 
     | 
    
         
            +
                        border = @target_range.min_border
         
     | 
| 
      
 355 
     | 
    
         
            +
                      else
         
     | 
| 
      
 356 
     | 
    
         
            +
                        year = @shard_range.year
         
     | 
| 
      
 357 
     | 
    
         
            +
                        month = @shard_range.month
         
     | 
| 
      
 358 
     | 
    
         
            +
                        day = 1
         
     | 
| 
      
 359 
     | 
    
         
            +
                        hour = 0
         
     | 
| 
      
 360 
     | 
    
         
            +
                        minute = 0
         
     | 
| 
      
 361 
     | 
    
         
            +
                        second = 0
         
     | 
| 
      
 362 
     | 
    
         
            +
                        microsecond = 0
         
     | 
| 
      
 363 
     | 
    
         
            +
                        border = :include
         
     | 
| 
      
 364 
     | 
    
         
            +
                      end
         
     | 
| 
      
 365 
     | 
    
         
            +
                      WindowEdge.new(year, month, day, hour, minute, second, microsecond,
         
     | 
| 
      
 366 
     | 
    
         
            +
                                     border)
         
     | 
| 
      
 367 
     | 
    
         
            +
                    end
         
     | 
| 
      
 368 
     | 
    
         
            +
             
     | 
| 
      
 369 
     | 
    
         
            +
                    def create_max_edge(min)
         
     | 
| 
      
 370 
     | 
    
         
            +
                      max = @target_range.max
         
     | 
| 
      
 371 
     | 
    
         
            +
                      if max
         
     | 
| 
      
 372 
     | 
    
         
            +
                        year = max.year
         
     | 
| 
      
 373 
     | 
    
         
            +
                        month = max.month
         
     | 
| 
      
 374 
     | 
    
         
            +
                        day = max.day
         
     | 
| 
      
 375 
     | 
    
         
            +
                        hour = max.hour
         
     | 
| 
      
 376 
     | 
    
         
            +
                        minute = max.min
         
     | 
| 
      
 377 
     | 
    
         
            +
                        second = max.sec
         
     | 
| 
      
 378 
     | 
    
         
            +
                        microsecond = max.usec
         
     | 
| 
      
 379 
     | 
    
         
            +
                        border = @target_range.max_border
         
     | 
| 
      
 380 
     | 
    
         
            +
                      else
         
     | 
| 
      
 381 
     | 
    
         
            +
                        next_shard_edge = @shard_range.least_over_time
         
     | 
| 
      
 382 
     | 
    
         
            +
                        year = next_shard_edge.year
         
     | 
| 
      
 383 
     | 
    
         
            +
                        month = next_shard_edge.month
         
     | 
| 
      
 384 
     | 
    
         
            +
                        day = next_shard_edge.day
         
     | 
| 
      
 385 
     | 
    
         
            +
                        hour = 0
         
     | 
| 
      
 386 
     | 
    
         
            +
                        minute = 0
         
     | 
| 
      
 387 
     | 
    
         
            +
                        second = 0
         
     | 
| 
      
 388 
     | 
    
         
            +
                        microsecond = 0
         
     | 
| 
      
 389 
     | 
    
         
            +
                        border = :exclude
         
     | 
| 
      
 390 
     | 
    
         
            +
                      end
         
     | 
| 
      
 391 
     | 
    
         
            +
                      WindowEdge.new(year, month, day, hour, minute, second, microsecond,
         
     | 
| 
      
 392 
     | 
    
         
            +
                                     border)
         
     | 
| 
      
 393 
     | 
    
         
            +
                    end
         
     | 
| 
      
 394 
     | 
    
         
            +
             
     | 
| 
      
 395 
     | 
    
         
            +
                    def compute_next_min_edge(current_min)
         
     | 
| 
      
 396 
     | 
    
         
            +
                      next_edge = Time.at(current_min.to_time.to_i + @step_second)
         
     | 
| 
      
 397 
     | 
    
         
            +
                      year = next_edge.year
         
     | 
| 
      
 398 
     | 
    
         
            +
                      month = next_edge.month
         
     | 
| 
      
 399 
     | 
    
         
            +
                      day = next_edge.day
         
     | 
| 
      
 400 
     | 
    
         
            +
                      if @unit == :day
         
     | 
| 
      
 401 
     | 
    
         
            +
                        hour = 0
         
     | 
| 
      
 402 
     | 
    
         
            +
                      else
         
     | 
| 
      
 403 
     | 
    
         
            +
                        hour = next_edge.hour
         
     | 
| 
      
 404 
     | 
    
         
            +
                      end
         
     | 
| 
      
 405 
     | 
    
         
            +
                      minute = 0
         
     | 
| 
      
 406 
     | 
    
         
            +
                      second = 0
         
     | 
| 
      
 407 
     | 
    
         
            +
                      microsecond = 0
         
     | 
| 
      
 408 
     | 
    
         
            +
                      border = :include
         
     | 
| 
      
 409 
     | 
    
         
            +
                      WindowEdge.new(year, month, day, hour, minute, second, microsecond,
         
     | 
| 
      
 410 
     | 
    
         
            +
                                     border)
         
     | 
| 
      
 411 
     | 
    
         
            +
                    end
         
     | 
| 
      
 412 
     | 
    
         
            +
             
     | 
| 
      
 413 
     | 
    
         
            +
                    def select_by_range(table, shard_key, min, max)
         
     | 
| 
      
 414 
     | 
    
         
            +
                      expression = Expression.create(table)
         
     | 
| 
      
 415 
     | 
    
         
            +
                      begin
         
     | 
| 
      
 416 
     | 
    
         
            +
                        expression.append_object(@between, Operator::PUSH, 1)
         
     | 
| 
      
 417 
     | 
    
         
            +
                        expression.append_object(shard_key, Operator::PUSH, 1)
         
     | 
| 
      
 418 
     | 
    
         
            +
                        expression.append_operator(Operator::GET_VALUE, 1)
         
     | 
| 
      
 419 
     | 
    
         
            +
                        expression.append_constant(min.to_s, Operator::PUSH, 1)
         
     | 
| 
      
 420 
     | 
    
         
            +
                        expression.append_constant(min.border, Operator::PUSH, 1)
         
     | 
| 
      
 421 
     | 
    
         
            +
                        expression.append_constant(max.to_s, Operator::PUSH, 1)
         
     | 
| 
      
 422 
     | 
    
         
            +
                        expression.append_constant(max.border, Operator::PUSH, 1)
         
     | 
| 
      
 423 
     | 
    
         
            +
                        expression.append_operator(Operator::CALL, 5)
         
     | 
| 
      
 424 
     | 
    
         
            +
                        table.select(expression)
         
     | 
| 
      
 425 
     | 
    
         
            +
                      ensure
         
     | 
| 
      
 426 
     | 
    
         
            +
                        expression.close
         
     | 
| 
      
 427 
     | 
    
         
            +
                      end
         
     | 
| 
      
 428 
     | 
    
         
            +
                    end
         
     | 
| 
      
 429 
     | 
    
         
            +
             
     | 
| 
      
 430 
     | 
    
         
            +
                    def inspect_range(min, max)
         
     | 
| 
      
 431 
     | 
    
         
            +
                      range = ""
         
     | 
| 
      
 432 
     | 
    
         
            +
                      if min.border == :include
         
     | 
| 
      
 433 
     | 
    
         
            +
                        range << "["
         
     | 
| 
      
 434 
     | 
    
         
            +
                      else
         
     | 
| 
      
 435 
     | 
    
         
            +
                        range << "("
         
     | 
| 
      
 436 
     | 
    
         
            +
                      end
         
     | 
| 
      
 437 
     | 
    
         
            +
                      range << min.to_s
         
     | 
| 
      
 438 
     | 
    
         
            +
                      range << ","
         
     | 
| 
      
 439 
     | 
    
         
            +
                      range << max.to_s
         
     | 
| 
      
 440 
     | 
    
         
            +
                      if max.border == :include
         
     | 
| 
      
 441 
     | 
    
         
            +
                        range << "]"
         
     | 
| 
      
 442 
     | 
    
         
            +
                      else
         
     | 
| 
      
 443 
     | 
    
         
            +
                        range << ")"
         
     | 
| 
      
 444 
     | 
    
         
            +
                      end
         
     | 
| 
      
 445 
     | 
    
         
            +
                      range
         
     | 
| 
      
 446 
     | 
    
         
            +
                    end
         
     | 
| 
      
 447 
     | 
    
         
            +
                  end
         
     | 
| 
      
 448 
     | 
    
         
            +
             
     | 
| 
      
 449 
     | 
    
         
            +
                  class WindowEdge
         
     | 
| 
      
 450 
     | 
    
         
            +
                    include Comparable
         
     | 
| 
      
 451 
     | 
    
         
            +
             
     | 
| 
      
 452 
     | 
    
         
            +
                    attr_reader :year
         
     | 
| 
      
 453 
     | 
    
         
            +
                    attr_reader :month
         
     | 
| 
      
 454 
     | 
    
         
            +
                    attr_reader :day
         
     | 
| 
      
 455 
     | 
    
         
            +
                    attr_reader :hour
         
     | 
| 
      
 456 
     | 
    
         
            +
                    attr_reader :minute
         
     | 
| 
      
 457 
     | 
    
         
            +
                    attr_reader :second
         
     | 
| 
      
 458 
     | 
    
         
            +
                    attr_reader :microsecond
         
     | 
| 
      
 459 
     | 
    
         
            +
                    attr_reader :border
         
     | 
| 
      
 460 
     | 
    
         
            +
                    def initialize(year, month, day, hour, minute, second, microsecond,
         
     | 
| 
      
 461 
     | 
    
         
            +
                                   border)
         
     | 
| 
      
 462 
     | 
    
         
            +
                      @year = year
         
     | 
| 
      
 463 
     | 
    
         
            +
                      @month = month
         
     | 
| 
      
 464 
     | 
    
         
            +
                      @day = day
         
     | 
| 
      
 465 
     | 
    
         
            +
                      @hour = hour
         
     | 
| 
      
 466 
     | 
    
         
            +
                      @minute = minute
         
     | 
| 
      
 467 
     | 
    
         
            +
                      @second = second
         
     | 
| 
      
 468 
     | 
    
         
            +
                      @microsecond = microsecond
         
     | 
| 
      
 469 
     | 
    
         
            +
                      @border = border
         
     | 
| 
      
 470 
     | 
    
         
            +
                    end
         
     | 
| 
      
 471 
     | 
    
         
            +
             
     | 
| 
      
 472 
     | 
    
         
            +
                    def to_s
         
     | 
| 
      
 473 
     | 
    
         
            +
                      format = "%04d/%02d/%02d %02d:%02d:%02d"
         
     | 
| 
      
 474 
     | 
    
         
            +
                      format_values = [@year, @month, @day, @hour, @minute, @second]
         
     | 
| 
      
 475 
     | 
    
         
            +
                      unless @microsecond.zero?
         
     | 
| 
      
 476 
     | 
    
         
            +
                        format << ".%06d"
         
     | 
| 
      
 477 
     | 
    
         
            +
                        format_values << @microsecond
         
     | 
| 
      
 478 
     | 
    
         
            +
                      end
         
     | 
| 
      
 479 
     | 
    
         
            +
                      format % format_values
         
     | 
| 
      
 480 
     | 
    
         
            +
                    end
         
     | 
| 
      
 481 
     | 
    
         
            +
             
     | 
| 
      
 482 
     | 
    
         
            +
                    def to_time
         
     | 
| 
      
 483 
     | 
    
         
            +
                      Time.local(@year, @month, @day, @hour, @minute, @second, @microsecond)
         
     | 
| 
      
 484 
     | 
    
         
            +
                    end
         
     | 
| 
      
 485 
     | 
    
         
            +
             
     | 
| 
      
 486 
     | 
    
         
            +
                    def values
         
     | 
| 
      
 487 
     | 
    
         
            +
                      [@year, @month, @day, @hour, @minute, @second, @microsecond]
         
     | 
| 
      
 488 
     | 
    
         
            +
                    end
         
     | 
| 
      
 489 
     | 
    
         
            +
             
     | 
| 
      
 490 
     | 
    
         
            +
                    def <=>(other)
         
     | 
| 
      
 491 
     | 
    
         
            +
                      (values + [@border == :include ? 1 : 0]) <=>
         
     | 
| 
      
 492 
     | 
    
         
            +
                        (other.values + [other.border == :include ? 1 : 0])
         
     | 
| 
      
 493 
     | 
    
         
            +
                    end
         
     | 
| 
      
 494 
     | 
    
         
            +
                  end
         
     | 
| 
      
 495 
     | 
    
         
            +
             
     | 
| 
       209 
496 
     | 
    
         
             
                  class ShardExecutor
         
     | 
| 
      
 497 
     | 
    
         
            +
                    attr_reader :shard
         
     | 
| 
      
 498 
     | 
    
         
            +
                    attr_writer :previous_executor
         
     | 
| 
      
 499 
     | 
    
         
            +
                    attr_writer :next_executor
         
     | 
| 
       210 
500 
     | 
    
         
             
                    def initialize(context, shard, shard_range)
         
     | 
| 
       211 
501 
     | 
    
         
             
                      @context = context
         
     | 
| 
       212 
502 
     | 
    
         
             
                      @shard = shard
         
     | 
| 
       213 
503 
     | 
    
         
             
                      @shard_range = shard_range
         
     | 
| 
       214 
504 
     | 
    
         | 
| 
      
 505 
     | 
    
         
            +
                      @shard_key = shard.key
         
     | 
| 
       215 
506 
     | 
    
         
             
                      @target_table = @shard.table
         
     | 
| 
       216 
507 
     | 
    
         | 
| 
       217 
508 
     | 
    
         
             
                      @filter = @context.filter
         
     | 
| 
       218 
509 
     | 
    
         
             
                      @post_filter = @context.post_filter
         
     | 
| 
       219 
510 
     | 
    
         
             
                      @result_sets = @context.result_sets
         
     | 
| 
       220 
     | 
    
         
            -
                      @ 
     | 
| 
      
 511 
     | 
    
         
            +
                      @filtered_result_sets = []
         
     | 
| 
      
 512 
     | 
    
         
            +
                      @temporary_tables = @context.temporary_tables
         
     | 
| 
       221 
513 
     | 
    
         | 
| 
       222 
514 
     | 
    
         
             
                      @target_range = @context.enumerator.target_range
         
     | 
| 
       223 
515 
     | 
    
         | 
| 
       224 
516 
     | 
    
         
             
                      @cover_type = @target_range.cover_type(@shard_range)
         
     | 
| 
      
 517 
     | 
    
         
            +
             
     | 
| 
      
 518 
     | 
    
         
            +
                      @previous_executor = nil
         
     | 
| 
      
 519 
     | 
    
         
            +
                      @next_executor = nil
         
     | 
| 
      
 520 
     | 
    
         
            +
             
     | 
| 
      
 521 
     | 
    
         
            +
                      @initital_table = nil
         
     | 
| 
      
 522 
     | 
    
         
            +
             
     | 
| 
      
 523 
     | 
    
         
            +
                      @range_index = nil
         
     | 
| 
      
 524 
     | 
    
         
            +
                      @window = nil
         
     | 
| 
      
 525 
     | 
    
         
            +
             
     | 
| 
      
 526 
     | 
    
         
            +
                      @prepared = false
         
     | 
| 
      
 527 
     | 
    
         
            +
                      @filtered = false
         
     | 
| 
       225 
528 
     | 
    
         
             
                    end
         
     | 
| 
       226 
529 
     | 
    
         | 
| 
       227 
530 
     | 
    
         
             
                    def execute
         
     | 
| 
       228 
     | 
    
         
            -
                       
     | 
| 
       229 
     | 
    
         
            -
             
     | 
| 
      
 531 
     | 
    
         
            +
                      ensure_filtered
         
     | 
| 
      
 532 
     | 
    
         
            +
             
     | 
| 
      
 533 
     | 
    
         
            +
                      return if @filtered_result_sets.empty?
         
     | 
| 
      
 534 
     | 
    
         
            +
             
     | 
| 
      
 535 
     | 
    
         
            +
                      if @window
         
     | 
| 
      
 536 
     | 
    
         
            +
                        @filtered_result_sets.each do |result_set|
         
     | 
| 
      
 537 
     | 
    
         
            +
                          @window.each(result_set) do |windowed_result_set|
         
     | 
| 
      
 538 
     | 
    
         
            +
                            @temporary_tables << windowed_result_set
         
     | 
| 
      
 539 
     | 
    
         
            +
                            if @context.dynamic_columns.have_filtered?
         
     | 
| 
      
 540 
     | 
    
         
            +
                              apply_targets = [[windowed_result_set]]
         
     | 
| 
      
 541 
     | 
    
         
            +
                              @context.dynamic_columns.apply_filtered(apply_targets)
         
     | 
| 
      
 542 
     | 
    
         
            +
                            end
         
     | 
| 
      
 543 
     | 
    
         
            +
                            sort_result_set(windowed_result_set)
         
     | 
| 
      
 544 
     | 
    
         
            +
                            return if @context.current_limit.zero?
         
     | 
| 
      
 545 
     | 
    
         
            +
                          end
         
     | 
| 
      
 546 
     | 
    
         
            +
                        end
         
     | 
| 
      
 547 
     | 
    
         
            +
                      else
         
     | 
| 
      
 548 
     | 
    
         
            +
                        apply_targets = []
         
     | 
| 
      
 549 
     | 
    
         
            +
                        if @previous_executor
         
     | 
| 
      
 550 
     | 
    
         
            +
                          @previous_executor.add_filtered_stage_context(apply_targets)
         
     | 
| 
      
 551 
     | 
    
         
            +
                        end
         
     | 
| 
      
 552 
     | 
    
         
            +
                        @filtered_result_sets.each do |result_set|
         
     | 
| 
      
 553 
     | 
    
         
            +
                          apply_targets << [result_set]
         
     | 
| 
      
 554 
     | 
    
         
            +
                        end
         
     | 
| 
      
 555 
     | 
    
         
            +
                        if @next_executor
         
     | 
| 
      
 556 
     | 
    
         
            +
                          @next_executor.add_filtered_stage_context(apply_targets)
         
     | 
| 
      
 557 
     | 
    
         
            +
                        end
         
     | 
| 
      
 558 
     | 
    
         
            +
                        options = {}
         
     | 
| 
      
 559 
     | 
    
         
            +
                        if @context.need_look_ahead?
         
     | 
| 
      
 560 
     | 
    
         
            +
                          options[:normal] = false
         
     | 
| 
      
 561 
     | 
    
         
            +
                        end
         
     | 
| 
      
 562 
     | 
    
         
            +
                        @context.dynamic_columns.apply_filtered(apply_targets, options)
         
     | 
| 
      
 563 
     | 
    
         
            +
                        @filtered_result_sets.each do |result_set|
         
     | 
| 
      
 564 
     | 
    
         
            +
                          sort_result_set(result_set)
         
     | 
| 
      
 565 
     | 
    
         
            +
                        end
         
     | 
| 
      
 566 
     | 
    
         
            +
                      end
         
     | 
| 
      
 567 
     | 
    
         
            +
                    end
         
     | 
| 
       230 
568 
     | 
    
         | 
| 
       231 
     | 
    
         
            -
             
     | 
| 
       232 
     | 
    
         
            -
                       
     | 
| 
      
 569 
     | 
    
         
            +
                    def add_initial_stage_context(apply_targets)
         
     | 
| 
      
 570 
     | 
    
         
            +
                      ensure_prepared
         
     | 
| 
      
 571 
     | 
    
         
            +
                      return unless @initial_table
         
     | 
| 
      
 572 
     | 
    
         
            +
                      apply_targets << [@initial_table, {context: true}]
         
     | 
| 
      
 573 
     | 
    
         
            +
                    end
         
     | 
| 
      
 574 
     | 
    
         
            +
             
     | 
| 
      
 575 
     | 
    
         
            +
                    def add_filtered_stage_context(apply_targets)
         
     | 
| 
      
 576 
     | 
    
         
            +
                      ensure_filtered
         
     | 
| 
      
 577 
     | 
    
         
            +
                      @filtered_result_sets.each do |table|
         
     | 
| 
      
 578 
     | 
    
         
            +
                        apply_targets << [table, {context: true}]
         
     | 
| 
      
 579 
     | 
    
         
            +
                      end
         
     | 
| 
      
 580 
     | 
    
         
            +
                    end
         
     | 
| 
      
 581 
     | 
    
         
            +
             
     | 
| 
      
 582 
     | 
    
         
            +
                    private
         
     | 
| 
      
 583 
     | 
    
         
            +
                    def have_record?
         
     | 
| 
      
 584 
     | 
    
         
            +
                      return false if @cover_type == :none
         
     | 
| 
      
 585 
     | 
    
         
            +
                      return false if @target_table.empty?
         
     | 
| 
      
 586 
     | 
    
         
            +
                      true
         
     | 
| 
      
 587 
     | 
    
         
            +
                    end
         
     | 
| 
      
 588 
     | 
    
         
            +
             
     | 
| 
      
 589 
     | 
    
         
            +
                    def ensure_prepared
         
     | 
| 
      
 590 
     | 
    
         
            +
                      return if @prepared
         
     | 
| 
      
 591 
     | 
    
         
            +
                      @prepared = true
         
     | 
| 
      
 592 
     | 
    
         
            +
             
     | 
| 
      
 593 
     | 
    
         
            +
                      return unless have_record?
         
     | 
| 
      
 594 
     | 
    
         
            +
             
     | 
| 
      
 595 
     | 
    
         
            +
                      if @shard_key.nil?
         
     | 
| 
       233 
596 
     | 
    
         
             
                        message = "[logical_range_filter] shard_key doesn't exist: " +
         
     | 
| 
       234 
597 
     | 
    
         
             
                                  "<#{@shard.key_name}>"
         
     | 
| 
       235 
598 
     | 
    
         
             
                        raise InvalidArgument, message
         
     | 
| 
       236 
599 
     | 
    
         
             
                      end
         
     | 
| 
       237 
600 
     | 
    
         | 
| 
       238 
     | 
    
         
            -
                      expression_builder = RangeExpressionBuilder.new(shard_key,
         
     | 
| 
       239 
     | 
    
         
            -
             
     | 
| 
       240 
     | 
    
         
            -
                      expression_builder.filter = @filter
         
     | 
| 
       241 
     | 
    
         
            -
             
     | 
| 
       242 
     | 
    
         
            -
                      index_info  
     | 
| 
       243 
     | 
    
         
            -
             
     | 
| 
       244 
     | 
    
         
            -
                        range_index = index_info.index
         
     | 
| 
       245 
     | 
    
         
            -
                        unless use_range_index?(range_index, expression_builder)
         
     | 
| 
       246 
     | 
    
         
            -
                          range_index = nil
         
     | 
| 
       247 
     | 
    
         
            -
                        end
         
     | 
| 
       248 
     | 
    
         
            -
                      else
         
     | 
| 
       249 
     | 
    
         
            -
                        range_index = nil
         
     | 
| 
      
 601 
     | 
    
         
            +
                      @expression_builder = RangeExpressionBuilder.new(@shard_key,
         
     | 
| 
      
 602 
     | 
    
         
            +
                                                                       @target_range)
         
     | 
| 
      
 603 
     | 
    
         
            +
                      @expression_builder.filter = @filter
         
     | 
| 
      
 604 
     | 
    
         
            +
                      index_info = @shard_key.find_index(Operator::LESS)
         
     | 
| 
      
 605 
     | 
    
         
            +
                      if index_info and use_range_index?
         
     | 
| 
      
 606 
     | 
    
         
            +
                        @range_index = index_info.index
         
     | 
| 
       250 
607 
     | 
    
         
             
                      end
         
     | 
| 
       251 
608 
     | 
    
         | 
| 
       252 
     | 
    
         
            -
                      @context.dynamic_columns. 
     | 
| 
       253 
     | 
    
         
            -
                        if @ 
     | 
| 
       254 
     | 
    
         
            -
                           
     | 
| 
       255 
     | 
    
         
            -
             
     | 
| 
       256 
     | 
    
         
            -
                           
     | 
| 
       257 
     | 
    
         
            -
             
     | 
| 
       258 
     | 
    
         
            -
                            @ 
     | 
| 
       259 
     | 
    
         
            -
             
     | 
| 
       260 
     | 
    
         
            -
                              @target_table.select(expression)
         
     | 
| 
       261 
     | 
    
         
            -
                            end
         
     | 
| 
       262 
     | 
    
         
            -
                            @cover_type = :all
         
     | 
| 
       263 
     | 
    
         
            -
                            expression_builder.filter = @filter
         
     | 
| 
      
 609 
     | 
    
         
            +
                      if @context.dynamic_columns.have_initial?
         
     | 
| 
      
 610 
     | 
    
         
            +
                        if @cover_type == :all
         
     | 
| 
      
 611 
     | 
    
         
            +
                          @target_table = @target_table.select_all
         
     | 
| 
      
 612 
     | 
    
         
            +
                        else
         
     | 
| 
      
 613 
     | 
    
         
            +
                          @expression_builder.filter = nil
         
     | 
| 
      
 614 
     | 
    
         
            +
                          @target_table = create_expression(@target_table) do |expression|
         
     | 
| 
      
 615 
     | 
    
         
            +
                            @expression_builder.build(expression, @shard_range)
         
     | 
| 
      
 616 
     | 
    
         
            +
                            @target_table.select(expression)
         
     | 
| 
       264 
617 
     | 
    
         
             
                          end
         
     | 
| 
       265 
     | 
    
         
            -
                          @ 
     | 
| 
      
 618 
     | 
    
         
            +
                          @expression_builder.filter = @filter
         
     | 
| 
      
 619 
     | 
    
         
            +
                          @cover_type = :all
         
     | 
| 
       266 
620 
     | 
    
         
             
                        end
         
     | 
| 
       267 
     | 
    
         
            -
                         
     | 
| 
      
 621 
     | 
    
         
            +
                        @temporary_tables << @target_table
         
     | 
| 
      
 622 
     | 
    
         
            +
                        @initial_table = @target_table
         
     | 
| 
       268 
623 
     | 
    
         
             
                      end
         
     | 
| 
       269 
624 
     | 
    
         | 
| 
       270 
     | 
    
         
            -
                       
     | 
| 
      
 625 
     | 
    
         
            +
                      @window = detect_window
         
     | 
| 
       271 
626 
     | 
    
         
             
                    end
         
     | 
| 
       272 
627 
     | 
    
         | 
| 
       273 
     | 
    
         
            -
                    private
         
     | 
| 
       274 
628 
     | 
    
         
             
                    def decide_use_range_index(use, reason, line, method)
         
     | 
| 
       275 
629 
     | 
    
         
             
                      message = "[logical_range_filter]"
         
     | 
| 
       276 
630 
     | 
    
         
             
                      if use
         
     | 
| 
         @@ -289,7 +643,7 @@ module Groonga 
     | 
|
| 
       289 
643 
     | 
    
         
             
                      use
         
     | 
| 
       290 
644 
     | 
    
         
             
                    end
         
     | 
| 
       291 
645 
     | 
    
         | 
| 
       292 
     | 
    
         
            -
                    def use_range_index? 
     | 
| 
      
 646 
     | 
    
         
            +
                    def use_range_index?
         
     | 
| 
       293 
647 
     | 
    
         
             
                      use_range_index_parameter_message =
         
     | 
| 
       294 
648 
     | 
    
         
             
                        "force by use_range_index parameter"
         
     | 
| 
       295 
649 
     | 
    
         
             
                      case @context.use_range_index
         
     | 
| 
         @@ -326,6 +680,11 @@ module Groonga 
     | 
|
| 
       326 
680 
     | 
    
         
             
                        return decide_use_range_index(false, reason, __LINE__, __method__)
         
     | 
| 
       327 
681 
     | 
    
         
             
                      end
         
     | 
| 
       328 
682 
     | 
    
         | 
| 
      
 683 
     | 
    
         
            +
                      unless @context.sort_keys.empty?
         
     | 
| 
      
 684 
     | 
    
         
            +
                        reason = "sort_keys is used"
         
     | 
| 
      
 685 
     | 
    
         
            +
                        return decide_use_range_index(false, reason, __LINE__, __method__)
         
     | 
| 
      
 686 
     | 
    
         
            +
                      end
         
     | 
| 
      
 687 
     | 
    
         
            +
             
     | 
| 
       329 
688 
     | 
    
         
             
                      current_limit = @context.current_limit
         
     | 
| 
       330 
689 
     | 
    
         
             
                      if current_limit < 0
         
     | 
| 
       331 
690 
     | 
    
         
             
                        reason = "limit is negative: <#{current_limit}>"
         
     | 
| 
         @@ -360,7 +719,7 @@ module Groonga 
     | 
|
| 
       360 
719 
     | 
    
         
             
                      when :all
         
     | 
| 
       361 
720 
     | 
    
         
             
                        if @filter
         
     | 
| 
       362 
721 
     | 
    
         
             
                          create_expression(table) do |expression|
         
     | 
| 
       363 
     | 
    
         
            -
                            expression_builder.build_all(expression)
         
     | 
| 
      
 722 
     | 
    
         
            +
                            @expression_builder.build_all(expression)
         
     | 
| 
       364 
723 
     | 
    
         
             
                            unless range_index_available_expression?(expression,
         
     | 
| 
       365 
724 
     | 
    
         
             
                                                                     __LINE__, __method__)
         
     | 
| 
       366 
725 
     | 
    
         
             
                              return false
         
     | 
| 
         @@ -372,7 +731,7 @@ module Groonga 
     | 
|
| 
       372 
731 
     | 
    
         
             
                        end
         
     | 
| 
       373 
732 
     | 
    
         
             
                      when :partial_min
         
     | 
| 
       374 
733 
     | 
    
         
             
                        create_expression(table) do |expression|
         
     | 
| 
       375 
     | 
    
         
            -
                          expression_builder.build_partial_min(expression)
         
     | 
| 
      
 734 
     | 
    
         
            +
                          @expression_builder.build_partial_min(expression)
         
     | 
| 
       376 
735 
     | 
    
         
             
                          unless range_index_available_expression?(expression,
         
     | 
| 
       377 
736 
     | 
    
         
             
                                                                   __LINE__, __method__)
         
     | 
| 
       378 
737 
     | 
    
         
             
                            return false
         
     | 
| 
         @@ -381,7 +740,7 @@ module Groonga 
     | 
|
| 
       381 
740 
     | 
    
         
             
                        end
         
     | 
| 
       382 
741 
     | 
    
         
             
                      when :partial_max
         
     | 
| 
       383 
742 
     | 
    
         
             
                        create_expression(table) do |expression|
         
     | 
| 
       384 
     | 
    
         
            -
                          expression_builder.build_partial_max(expression)
         
     | 
| 
      
 743 
     | 
    
         
            +
                          @expression_builder.build_partial_max(expression)
         
     | 
| 
       385 
744 
     | 
    
         
             
                          unless range_index_available_expression?(expression,
         
     | 
| 
       386 
745 
     | 
    
         
             
                                                                   __LINE__, __method__)
         
     | 
| 
       387 
746 
     | 
    
         
             
                            return false
         
     | 
| 
         @@ -390,7 +749,7 @@ module Groonga 
     | 
|
| 
       390 
749 
     | 
    
         
             
                        end
         
     | 
| 
       391 
750 
     | 
    
         
             
                      when :partial_min_and_max
         
     | 
| 
       392 
751 
     | 
    
         
             
                        create_expression(table) do |expression|
         
     | 
| 
       393 
     | 
    
         
            -
                          expression_builder.build_partial_min_and_max(expression)
         
     | 
| 
      
 752 
     | 
    
         
            +
                          @expression_builder.build_partial_min_and_max(expression)
         
     | 
| 
       394 
753 
     | 
    
         
             
                          unless range_index_available_expression?(expression,
         
     | 
| 
       395 
754 
     | 
    
         
             
                                                                   __LINE__, __method__)
         
     | 
| 
       396 
755 
     | 
    
         
             
                            return false
         
     | 
| 
         @@ -463,65 +822,102 @@ module Groonga 
     | 
|
| 
       463 
822 
     | 
    
         
             
                      nil
         
     | 
| 
       464 
823 
     | 
    
         
             
                    end
         
     | 
| 
       465 
824 
     | 
    
         | 
| 
       466 
     | 
    
         
            -
                    def  
     | 
| 
      
 825 
     | 
    
         
            +
                    def ensure_filtered
         
     | 
| 
      
 826 
     | 
    
         
            +
                      return if @filtered
         
     | 
| 
      
 827 
     | 
    
         
            +
             
     | 
| 
      
 828 
     | 
    
         
            +
                      @filtered = true
         
     | 
| 
      
 829 
     | 
    
         
            +
             
     | 
| 
      
 830 
     | 
    
         
            +
                      ensure_prepared
         
     | 
| 
      
 831 
     | 
    
         
            +
                      return unless have_record?
         
     | 
| 
      
 832 
     | 
    
         
            +
             
     | 
| 
      
 833 
     | 
    
         
            +
                      if @context.dynamic_columns.have_initial?
         
     | 
| 
      
 834 
     | 
    
         
            +
                        apply_targets = []
         
     | 
| 
      
 835 
     | 
    
         
            +
                        if @previous_executor
         
     | 
| 
      
 836 
     | 
    
         
            +
                          @previous_executor.add_initial_stage_context(apply_targets)
         
     | 
| 
      
 837 
     | 
    
         
            +
                        end
         
     | 
| 
      
 838 
     | 
    
         
            +
                        apply_targets << [@target_table]
         
     | 
| 
      
 839 
     | 
    
         
            +
                        if @next_executor
         
     | 
| 
      
 840 
     | 
    
         
            +
                          @next_executor.add_initial_stage_context(apply_targets)
         
     | 
| 
      
 841 
     | 
    
         
            +
                        end
         
     | 
| 
      
 842 
     | 
    
         
            +
                        @context.dynamic_columns.apply_initial(apply_targets)
         
     | 
| 
      
 843 
     | 
    
         
            +
                      end
         
     | 
| 
      
 844 
     | 
    
         
            +
             
     | 
| 
      
 845 
     | 
    
         
            +
                      execute_filter(@range_index)
         
     | 
| 
      
 846 
     | 
    
         
            +
             
     | 
| 
      
 847 
     | 
    
         
            +
                      return unless @context.need_look_ahead?
         
     | 
| 
      
 848 
     | 
    
         
            +
             
     | 
| 
      
 849 
     | 
    
         
            +
                      apply_targets = []
         
     | 
| 
      
 850 
     | 
    
         
            +
                      @filtered_result_sets = @filtered_result_sets.collect do |result_set|
         
     | 
| 
      
 851 
     | 
    
         
            +
                        if result_set == @shard.table
         
     | 
| 
      
 852 
     | 
    
         
            +
                          result_set = result_set.select_all
         
     | 
| 
      
 853 
     | 
    
         
            +
                          @temporary_tables << result_set
         
     | 
| 
      
 854 
     | 
    
         
            +
                        end
         
     | 
| 
      
 855 
     | 
    
         
            +
                        apply_targets << [result_set]
         
     | 
| 
      
 856 
     | 
    
         
            +
                        result_set
         
     | 
| 
      
 857 
     | 
    
         
            +
                      end
         
     | 
| 
      
 858 
     | 
    
         
            +
                      @context.dynamic_columns.apply_filtered(apply_targets,
         
     | 
| 
      
 859 
     | 
    
         
            +
                                                              window_function: false)
         
     | 
| 
      
 860 
     | 
    
         
            +
                    end
         
     | 
| 
      
 861 
     | 
    
         
            +
             
     | 
| 
      
 862 
     | 
    
         
            +
                    def execute_filter(range_index)
         
     | 
| 
       467 
863 
     | 
    
         
             
                      case @cover_type
         
     | 
| 
       468 
864 
     | 
    
         
             
                      when :all
         
     | 
| 
       469 
     | 
    
         
            -
                        filter_shard_all(range_index 
     | 
| 
      
 865 
     | 
    
         
            +
                        filter_shard_all(range_index)
         
     | 
| 
       470 
866 
     | 
    
         
             
                      when :partial_min
         
     | 
| 
       471 
867 
     | 
    
         
             
                        if range_index
         
     | 
| 
       472 
     | 
    
         
            -
                          filter_by_range(range_index, 
     | 
| 
      
 868 
     | 
    
         
            +
                          filter_by_range(range_index,
         
     | 
| 
       473 
869 
     | 
    
         
             
                                          @target_range.min, @target_range.min_border,
         
     | 
| 
       474 
870 
     | 
    
         
             
                                          nil, nil)
         
     | 
| 
       475 
871 
     | 
    
         
             
                        else
         
     | 
| 
       476 
872 
     | 
    
         
             
                          filter_table do |expression|
         
     | 
| 
       477 
     | 
    
         
            -
                            expression_builder.build_partial_min(expression)
         
     | 
| 
      
 873 
     | 
    
         
            +
                            @expression_builder.build_partial_min(expression)
         
     | 
| 
       478 
874 
     | 
    
         
             
                          end
         
     | 
| 
       479 
875 
     | 
    
         
             
                        end
         
     | 
| 
       480 
876 
     | 
    
         
             
                      when :partial_max
         
     | 
| 
       481 
877 
     | 
    
         
             
                        if range_index
         
     | 
| 
       482 
     | 
    
         
            -
                          filter_by_range(range_index, 
     | 
| 
      
 878 
     | 
    
         
            +
                          filter_by_range(range_index,
         
     | 
| 
       483 
879 
     | 
    
         
             
                                          nil, nil,
         
     | 
| 
       484 
880 
     | 
    
         
             
                                          @target_range.max, @target_range.max_border)
         
     | 
| 
       485 
881 
     | 
    
         
             
                        else
         
     | 
| 
       486 
882 
     | 
    
         
             
                          filter_table do |expression|
         
     | 
| 
       487 
     | 
    
         
            -
                            expression_builder.build_partial_max(expression)
         
     | 
| 
      
 883 
     | 
    
         
            +
                            @expression_builder.build_partial_max(expression)
         
     | 
| 
       488 
884 
     | 
    
         
             
                          end
         
     | 
| 
       489 
885 
     | 
    
         
             
                        end
         
     | 
| 
       490 
886 
     | 
    
         
             
                      when :partial_min_and_max
         
     | 
| 
       491 
887 
     | 
    
         
             
                        if range_index
         
     | 
| 
       492 
     | 
    
         
            -
                          filter_by_range(range_index, 
     | 
| 
      
 888 
     | 
    
         
            +
                          filter_by_range(range_index,
         
     | 
| 
       493 
889 
     | 
    
         
             
                                          @target_range.min, @target_range.min_border,
         
     | 
| 
       494 
890 
     | 
    
         
             
                                          @target_range.max, @target_range.max_border)
         
     | 
| 
       495 
891 
     | 
    
         
             
                        else
         
     | 
| 
       496 
892 
     | 
    
         
             
                          filter_table do |expression|
         
     | 
| 
       497 
     | 
    
         
            -
                            expression_builder.build_partial_min_and_max(expression)
         
     | 
| 
      
 893 
     | 
    
         
            +
                            @expression_builder.build_partial_min_and_max(expression)
         
     | 
| 
       498 
894 
     | 
    
         
             
                          end
         
     | 
| 
       499 
895 
     | 
    
         
             
                        end
         
     | 
| 
       500 
896 
     | 
    
         
             
                      end
         
     | 
| 
       501 
897 
     | 
    
         
             
                    end
         
     | 
| 
       502 
898 
     | 
    
         | 
| 
       503 
     | 
    
         
            -
                    def filter_shard_all(range_index 
     | 
| 
      
 899 
     | 
    
         
            +
                    def filter_shard_all(range_index)
         
     | 
| 
       504 
900 
     | 
    
         
             
                      table = @target_table
         
     | 
| 
       505 
901 
     | 
    
         
             
                      if @filter.nil?
         
     | 
| 
       506 
902 
     | 
    
         
             
                        if @post_filter.nil? and table.size <= @context.current_offset
         
     | 
| 
       507 
903 
     | 
    
         
             
                          @context.current_offset -= table.size
         
     | 
| 
       508 
904 
     | 
    
         
             
                          return
         
     | 
| 
       509 
905 
     | 
    
         
             
                        end
         
     | 
| 
       510 
     | 
    
         
            -
                        if range_index
         
     | 
| 
       511 
     | 
    
         
            -
                          filter_by_range(range_index, 
     | 
| 
      
 906 
     | 
    
         
            +
                        if @range_index
         
     | 
| 
      
 907 
     | 
    
         
            +
                          filter_by_range(range_index,
         
     | 
| 
       512 
908 
     | 
    
         
             
                                          nil, nil,
         
     | 
| 
       513 
909 
     | 
    
         
             
                                          nil, nil)
         
     | 
| 
       514 
910 
     | 
    
         
             
                        else
         
     | 
| 
       515 
     | 
    
         
            -
                           
     | 
| 
      
 911 
     | 
    
         
            +
                          add_filtered_result_set(table)
         
     | 
| 
       516 
912 
     | 
    
         
             
                        end
         
     | 
| 
       517 
913 
     | 
    
         
             
                      else
         
     | 
| 
       518 
     | 
    
         
            -
                        if range_index
         
     | 
| 
       519 
     | 
    
         
            -
                          filter_by_range(range_index, 
     | 
| 
      
 914 
     | 
    
         
            +
                        if @range_index
         
     | 
| 
      
 915 
     | 
    
         
            +
                          filter_by_range(range_index,
         
     | 
| 
       520 
916 
     | 
    
         
             
                                          nil, nil,
         
     | 
| 
       521 
917 
     | 
    
         
             
                                          nil, nil)
         
     | 
| 
       522 
918 
     | 
    
         
             
                        else
         
     | 
| 
       523 
919 
     | 
    
         
             
                          filter_table do |expression|
         
     | 
| 
       524 
     | 
    
         
            -
                            expression_builder.build_all(expression)
         
     | 
| 
      
 920 
     | 
    
         
            +
                            @expression_builder.build_all(expression)
         
     | 
| 
       525 
921 
     | 
    
         
             
                          end
         
     | 
| 
       526 
922 
     | 
    
         
             
                        end
         
     | 
| 
       527 
923 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -536,8 +932,7 @@ module Groonga 
     | 
|
| 
       536 
932 
     | 
    
         
             
                      end
         
     | 
| 
       537 
933 
     | 
    
         
             
                    end
         
     | 
| 
       538 
934 
     | 
    
         | 
| 
       539 
     | 
    
         
            -
                    def filter_by_range(range_index,  
     | 
| 
       540 
     | 
    
         
            -
                                        min, min_border, max, max_border)
         
     | 
| 
      
 935 
     | 
    
         
            +
                    def filter_by_range(range_index, min, min_border, max, max_border)
         
     | 
| 
       541 
936 
     | 
    
         
             
                      lexicon = range_index.domain
         
     | 
| 
       542 
937 
     | 
    
         
             
                      data_table = range_index.range
         
     | 
| 
       543 
938 
     | 
    
         
             
                      flags = build_range_search_flags(min_border, max_border)
         
     | 
| 
         @@ -584,18 +979,18 @@ module Groonga 
     | 
|
| 
       584 
979 
     | 
    
         
             
                            decide_use_range_index(false,
         
     | 
| 
       585 
980 
     | 
    
         
             
                                                   fallback_message,
         
     | 
| 
       586 
981 
     | 
    
         
             
                                                   __LINE__, __method__)
         
     | 
| 
       587 
     | 
    
         
            -
                            execute_filter(nil 
     | 
| 
      
 982 
     | 
    
         
            +
                            execute_filter(nil)
         
     | 
| 
       588 
983 
     | 
    
         
             
                            return
         
     | 
| 
       589 
984 
     | 
    
         
             
                          end
         
     | 
| 
       590 
985 
     | 
    
         
             
                        end
         
     | 
| 
       591 
     | 
    
         
            -
                      rescue
         
     | 
| 
      
 986 
     | 
    
         
            +
                      rescue => error
         
     | 
| 
       592 
987 
     | 
    
         
             
                        result_set.close
         
     | 
| 
       593 
     | 
    
         
            -
                        raise
         
     | 
| 
      
 988 
     | 
    
         
            +
                        raise error
         
     | 
| 
       594 
989 
     | 
    
         
             
                      end
         
     | 
| 
       595 
990 
     | 
    
         | 
| 
       596 
991 
     | 
    
         
             
                      if n_matched_records <= @context.current_offset
         
     | 
| 
       597 
992 
     | 
    
         
             
                        @context.current_offset -= n_matched_records
         
     | 
| 
       598 
     | 
    
         
            -
                        result_set 
     | 
| 
      
 993 
     | 
    
         
            +
                        @temporary_tables << result_set
         
     | 
| 
       599 
994 
     | 
    
         
             
                        return
         
     | 
| 
       600 
995 
     | 
    
         
             
                      end
         
     | 
| 
       601 
996 
     | 
    
         | 
| 
         @@ -605,6 +1000,7 @@ module Groonga 
     | 
|
| 
       605 
1000 
     | 
    
         
             
                      if @context.current_limit > 0
         
     | 
| 
       606 
1001 
     | 
    
         
             
                        @context.current_limit -= result_set.size
         
     | 
| 
       607 
1002 
     | 
    
         
             
                      end
         
     | 
| 
      
 1003 
     | 
    
         
            +
                      @temporary_tables << result_set
         
     | 
| 
       608 
1004 
     | 
    
         
             
                      @result_sets << result_set
         
     | 
| 
       609 
1005 
     | 
    
         
             
                    end
         
     | 
| 
       610 
1006 
     | 
    
         | 
| 
         @@ -649,7 +1045,8 @@ module Groonga 
     | 
|
| 
       649 
1045 
     | 
    
         
             
                      create_expression(table) do |expression|
         
     | 
| 
       650 
1046 
     | 
    
         
             
                        yield(expression)
         
     | 
| 
       651 
1047 
     | 
    
         
             
                        result_set = table.select(expression)
         
     | 
| 
       652 
     | 
    
         
            -
                         
     | 
| 
      
 1048 
     | 
    
         
            +
                        @temporary_tables << result_set
         
     | 
| 
      
 1049 
     | 
    
         
            +
                        add_filtered_result_set(result_set)
         
     | 
| 
       653 
1050 
     | 
    
         
             
                      end
         
     | 
| 
       654 
1051 
     | 
    
         
             
                    end
         
     | 
| 
       655 
1052 
     | 
    
         | 
| 
         @@ -660,40 +1057,41 @@ module Groonga 
     | 
|
| 
       660 
1057 
     | 
    
         
             
                      end
         
     | 
| 
       661 
1058 
     | 
    
         
             
                    end
         
     | 
| 
       662 
1059 
     | 
    
         | 
| 
       663 
     | 
    
         
            -
                    def  
     | 
| 
       664 
     | 
    
         
            -
                       
     | 
| 
       665 
     | 
    
         
            -
             
     | 
| 
       666 
     | 
    
         
            -
             
     | 
| 
       667 
     | 
    
         
            -
                        result_set.close if result_set.temporary?
         
     | 
| 
       668 
     | 
    
         
            -
                        return
         
     | 
| 
       669 
     | 
    
         
            -
                      end
         
     | 
| 
       670 
     | 
    
         
            -
             
     | 
| 
       671 
     | 
    
         
            -
                      @context.dynamic_columns.each_filtered do |dynamic_column|
         
     | 
| 
       672 
     | 
    
         
            -
                        if result_set == @shard.table
         
     | 
| 
       673 
     | 
    
         
            -
                          result_set = result_set.select_all
         
     | 
| 
       674 
     | 
    
         
            -
                        end
         
     | 
| 
       675 
     | 
    
         
            -
                        dynamic_column.apply(result_set)
         
     | 
| 
       676 
     | 
    
         
            -
                      end
         
     | 
| 
      
 1060 
     | 
    
         
            +
                    def add_filtered_result_set(result_set)
         
     | 
| 
      
 1061 
     | 
    
         
            +
                      return if result_set.empty?
         
     | 
| 
      
 1062 
     | 
    
         
            +
                      @filtered_result_sets << result_set
         
     | 
| 
      
 1063 
     | 
    
         
            +
                    end
         
     | 
| 
       677 
1064 
     | 
    
         | 
| 
      
 1065 
     | 
    
         
            +
                    def sort_result_set(result_set)
         
     | 
| 
       678 
1066 
     | 
    
         
             
                      unless @post_filter.nil?
         
     | 
| 
       679 
     | 
    
         
            -
                         
     | 
| 
       680 
     | 
    
         
            -
                         
     | 
| 
       681 
     | 
    
         
            -
                        @context.temporary_tables << filtered_table
         
     | 
| 
      
 1067 
     | 
    
         
            +
                        result_set = apply_post_filter(result_set)
         
     | 
| 
      
 1068 
     | 
    
         
            +
                        @temporary_tables << result_set
         
     | 
| 
       682 
1069 
     | 
    
         
             
                      end
         
     | 
| 
       683 
1070 
     | 
    
         | 
| 
       684 
1071 
     | 
    
         
             
                      if result_set.size <= @context.current_offset
         
     | 
| 
       685 
1072 
     | 
    
         
             
                        @context.current_offset -= result_set.size
         
     | 
| 
       686 
     | 
    
         
            -
                        result_set.close if result_set.temporary?
         
     | 
| 
       687 
1073 
     | 
    
         
             
                        return
         
     | 
| 
       688 
1074 
     | 
    
         
             
                      end
         
     | 
| 
       689 
1075 
     | 
    
         | 
| 
       690 
     | 
    
         
            -
                       
     | 
| 
       691 
     | 
    
         
            -
             
     | 
| 
       692 
     | 
    
         
            -
             
     | 
| 
       693 
     | 
    
         
            -
             
     | 
| 
       694 
     | 
    
         
            -
             
     | 
| 
       695 
     | 
    
         
            -
             
     | 
| 
       696 
     | 
    
         
            -
             
     | 
| 
      
 1076 
     | 
    
         
            +
                      if @context.sort_keys.empty?
         
     | 
| 
      
 1077 
     | 
    
         
            +
                        sort_keys = [
         
     | 
| 
      
 1078 
     | 
    
         
            +
                          {
         
     | 
| 
      
 1079 
     | 
    
         
            +
                            :key => @context.enumerator.shard_key_name,
         
     | 
| 
      
 1080 
     | 
    
         
            +
                            :order => @context.order,
         
     | 
| 
      
 1081 
     | 
    
         
            +
                          },
         
     | 
| 
      
 1082 
     | 
    
         
            +
                        ]
         
     | 
| 
      
 1083 
     | 
    
         
            +
                      else
         
     | 
| 
      
 1084 
     | 
    
         
            +
                        sort_keys = @context.sort_keys.collect do |sort_key|
         
     | 
| 
      
 1085 
     | 
    
         
            +
                          if sort_key.start_with?("-")
         
     | 
| 
      
 1086 
     | 
    
         
            +
                            key = sort_key[1..-1]
         
     | 
| 
      
 1087 
     | 
    
         
            +
                            order = :descending
         
     | 
| 
      
 1088 
     | 
    
         
            +
                          else
         
     | 
| 
      
 1089 
     | 
    
         
            +
                            key = sort_key
         
     | 
| 
      
 1090 
     | 
    
         
            +
                            order = :ascending
         
     | 
| 
      
 1091 
     | 
    
         
            +
                          end
         
     | 
| 
      
 1092 
     | 
    
         
            +
                          {:key => key, :order => order}
         
     | 
| 
      
 1093 
     | 
    
         
            +
                        end
         
     | 
| 
      
 1094 
     | 
    
         
            +
                      end
         
     | 
| 
       697 
1095 
     | 
    
         
             
                      if @context.current_limit > 0
         
     | 
| 
       698 
1096 
     | 
    
         
             
                        limit = @context.current_limit
         
     | 
| 
       699 
1097 
     | 
    
         
             
                      else
         
     | 
| 
         @@ -702,6 +1100,7 @@ module Groonga 
     | 
|
| 
       702 
1100 
     | 
    
         
             
                      sorted_result_set = result_set.sort(sort_keys,
         
     | 
| 
       703 
1101 
     | 
    
         
             
                                                          :offset => @context.current_offset,
         
     | 
| 
       704 
1102 
     | 
    
         
             
                                                          :limit => limit)
         
     | 
| 
      
 1103 
     | 
    
         
            +
                      @temporary_tables << sorted_result_set
         
     | 
| 
       705 
1104 
     | 
    
         
             
                      @result_sets << sorted_result_set
         
     | 
| 
       706 
1105 
     | 
    
         
             
                      if @context.current_offset > 0
         
     | 
| 
       707 
1106 
     | 
    
         
             
                        @context.current_offset = 0
         
     | 
| 
         @@ -710,6 +1109,22 @@ module Groonga 
     | 
|
| 
       710 
1109 
     | 
    
         
             
                        @context.current_limit -= sorted_result_set.size
         
     | 
| 
       711 
1110 
     | 
    
         
             
                      end
         
     | 
| 
       712 
1111 
     | 
    
         
             
                    end
         
     | 
| 
      
 1112 
     | 
    
         
            +
             
     | 
| 
      
 1113 
     | 
    
         
            +
                    def detect_window
         
     | 
| 
      
 1114 
     | 
    
         
            +
                      # TODO: return nil if result_set is small enough
         
     | 
| 
      
 1115 
     | 
    
         
            +
                      windows = []
         
     | 
| 
      
 1116 
     | 
    
         
            +
                      @context.time_classify_types.each do |type|
         
     | 
| 
      
 1117 
     | 
    
         
            +
                        case type
         
     | 
| 
      
 1118 
     | 
    
         
            +
                        when "minute", "second"
         
     | 
| 
      
 1119 
     | 
    
         
            +
                          windows << Window.new(@context, @shard, @shard_range, :hour, 1)
         
     | 
| 
      
 1120 
     | 
    
         
            +
                        when "day", "hour"
         
     | 
| 
      
 1121 
     | 
    
         
            +
                          unless @shard_range.is_a?(LogicalEnumerator::DayShardRange)
         
     | 
| 
      
 1122 
     | 
    
         
            +
                            windows << Window.new(@context, @shard, @shard_range, :day, 1)
         
     | 
| 
      
 1123 
     | 
    
         
            +
                          end
         
     | 
| 
      
 1124 
     | 
    
         
            +
                        end
         
     | 
| 
      
 1125 
     | 
    
         
            +
                      end
         
     | 
| 
      
 1126 
     | 
    
         
            +
                      windows.max
         
     | 
| 
      
 1127 
     | 
    
         
            +
                    end
         
     | 
| 
       713 
1128 
     | 
    
         
             
                  end
         
     | 
| 
       714 
1129 
     | 
    
         
             
                end
         
     | 
| 
       715 
1130 
     | 
    
         
             
              end
         
     |