[Groonga-commit] groonga/groonga at 2ce930c [master] expression_tree: add IndexColumn

Back to archive index

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����������������������������...
다운로드 



More information about the Groonga-commit mailing list
Back to archive index