Naoya Murakami
null+****@clear*****
Sun Jun 26 01:12:48 JST 2016
Naoya Murakami 2016-06-26 01:12:48 +0900 (Sun, 26 Jun 2016) New Revision: 2ce930caa99b24ea1cd68a408d3722fb49123616 https://github.com/groonga/groonga/commit/2ce930caa99b24ea1cd68a408d3722fb49123616 Merged 91a1640: Merge pull request #565 from naoa/expression-tree-index-column Message: expression_tree: add IndexColumn Added files: lib/mrb/scripts/expression_tree/index_column.rb Modified files: lib/mrb/scripts/expression_tree.rb lib/mrb/scripts/expression_tree/sources.am lib/mrb/scripts/expression_tree_builder.rb test/mruby/suite/expression_rewriter/test_between.rb Modified: lib/mrb/scripts/expression_tree.rb (+1 -0) =================================================================== --- lib/mrb/scripts/expression_tree.rb 2016-06-25 23:13:03 +0900 (50c1c43) +++ lib/mrb/scripts/expression_tree.rb 2016-06-26 01:12:48 +0900 (05cde04) @@ -1,6 +1,7 @@ require "expression_tree/constant" require "expression_tree/binary_operation" require "expression_tree/function_call" +require "expression_tree/index_column" require "expression_tree/logical_operation" require "expression_tree/procedure" require "expression_tree/variable" Added: lib/mrb/scripts/expression_tree/index_column.rb (+14 -0) 100644 =================================================================== --- /dev/null +++ lib/mrb/scripts/expression_tree/index_column.rb 2016-06-26 01:12:48 +0900 (7081846) @@ -0,0 +1,14 @@ +module Groonga + module ExpressionTree + class IndexColumn + attr_reader :index_column + def initialize(index_column) + @index_column = index_column + end + + def build(expression) + expression.append_object(@index_column, Operator::PUSH, 1) + end + end + end +end Modified: lib/mrb/scripts/expression_tree/sources.am (+1 -0) =================================================================== --- lib/mrb/scripts/expression_tree/sources.am 2016-06-25 23:13:03 +0900 (9e0c3e1) +++ lib/mrb/scripts/expression_tree/sources.am 2016-06-26 01:12:48 +0900 (a02fe84) @@ -2,6 +2,7 @@ RUBY_SCRIPT_FILES = \ binary_operation.rb \ constant.rb \ function_call.rb \ + index_column.rb \ logical_operation.rb \ procedure.rb \ variable.rb Modified: lib/mrb/scripts/expression_tree_builder.rb (+2 -0) =================================================================== --- lib/mrb/scripts/expression_tree_builder.rb 2016-06-25 23:13:03 +0900 (c5f4e97) +++ lib/mrb/scripts/expression_tree_builder.rb 2016-06-26 01:12:48 +0900 (521640b) @@ -72,6 +72,8 @@ module Groonga when Operator::PUSH if code.value.is_a?(Procedure) node = ExpressionTree::Procedure.new(code.value) + elsif code.value.is_a?(IndexColumn) + node = ExpressionTree::IndexColumn.new(code.value) else node = ExpressionTree::Constant.new(code.value.value) end Modified: test/mruby/suite/expression_rewriter/test_between.rb (+33 -0) =================================================================== --- test/mruby/suite/expression_rewriter/test_between.rb 2016-06-25 23:13:03 +0900 (6cbf728) +++ test/mruby/suite/expression_rewriter/test_between.rb 2016-06-26 01:12:48 +0900 (8cfeef4) @@ -9,6 +9,14 @@ class TestBetween < ExpressionRewriterTestCase schema.create_table("Logs") do |table| table.time("timestamp") + table.text("message") + end + + schema.create_table("Terms", + :type => :patricia_trie, + :default_tokenizer => "TokenBigram", + :normalizer => "NormalizerAuto") do |table| + table.index("Logs", "message") end end @@ -102,4 +110,29 @@ class TestBetween < ExpressionRewriterTestCase expr: <7..13> DUMP end + + def test_with_index_column + code = + "Terms.Logs_message @ 'Groonga' && " + + "timestamp >= '2015-10-01 00:00:00' && " + + "timestamp < '2015-11-00 00:00:00'" + assert_equal(<<-DUMP, dump_rewritten_plan(code)) +[0] + op: <match> + logical_op: <or> + index: <[#<column:index Terms.Logs_message range:Logs sources:[Logs.message] flags:POSITION>]> + query: <\"Groonga\"> + expr: <0..2> +[1] + op: <call> + logical_op: <and> + args[0]: <#<proc:function between arguments:[]>> + args[1]: <#<column:fix_size Logs.timestamp range:Time type:scalar compress:none>> + args[2]: <\"2015-10-01 00:00:00\"> + args[3]: <\"include\"> + args[4]: <\"2015-11-00 00:00:00\"> + args[5]: <\"exclude\"> + expr: <3..9> + DUMP + end end -------------- next part -------------- HTML����������������������������...다운로드