class GrnMini::Table

Attributes

grn[RW]

Public Class Methods

new(name, grn) click to toggle source
# File lib/grn_mini/table.rb, line 11
def initialize(name, grn)
  @name = name
  @grn  = grn
  @terms = Groonga["Terms"] || Groonga::PatriciaTrie.create(name: "Terms", key_normalize: true, default_tokenizer: GrnMini::default_tokenizer)
  @setup_columns_once = false
end

Public Instance Methods

each() { |record| ... } click to toggle source
# File lib/grn_mini/table.rb, line 102
def each
  @grn.each do |record|
    yield record
  end
end
empty?() click to toggle source
# File lib/grn_mini/table.rb, line 98
def empty?
  size == 0
end
group(key, options = {}) click to toggle source
# File lib/grn_mini/table.rb, line 112
def group(key, options = {})
  @grn.group(key, options)
end
need_setup_columns?() click to toggle source
# File lib/grn_mini/table.rb, line 18
def need_setup_columns?
  !@setup_columns_once && empty?
end
select(*args, &block) click to toggle source
# File lib/grn_mini/table.rb, line 90
def select(*args, &block)
  @grn.select(*args, &block)
end
setup_columns(hash) click to toggle source
# File lib/grn_mini/table.rb, line 22
def setup_columns(hash)
  Groonga::Schema.define do |schema|
    schema.change_table(@name) do |table|
      hash.each do |key, value|
        column = key.to_s

        if value.is_a?(::Array)
          table.column(column, value_type(value), type: :vector)
        else
          table.column(column, value_type(value))
        end
      end
    end

    schema.change_table("Terms") do |table|
      hash.each do |key, value|
        column = key.to_s

        if value.is_a?(String)
          table.index("#{@name}.#{column}", with_position: true)
        end
      end
    end

    hash.each do |key, value|
      column = key.to_s
      
      if value.is_a?(::Array)
        elem = value.first
        
        if elem.is_a?(GrnMini::Table)
          schema.change_table(elem.grn.name) do |table|
            table.index("#{@grn.name}.#{column}")
          end
        elsif elem.is_a?(Groonga::Table)
          schema.change_table(elem.name) do |table|
            table.index("#{@grn.name}.#{column}")
          end
        end
      end
    end
  end

  @setup_columns_once = true
end
size() click to toggle source
# File lib/grn_mini/table.rb, line 94
def size
  @grn.size
end
sort(keys, options = {}) click to toggle source
# File lib/grn_mini/table.rb, line 108
def sort(keys, options = {})
  @grn.sort(keys, options)
end
value_type(value) click to toggle source
# File lib/grn_mini/table.rb, line 68
def value_type(value)
  if value.is_a?(TrueClass) || value.is_a?(FalseClass)
    "Bool"
  elsif value.is_a?(Integer)
    "Int32"
  elsif value.is_a?(Float)
    "Float"
  elsif value.is_a?(Time)
    "Time"
  elsif value.is_a?(String)
    "ShortText"
  elsif value.is_a?(GrnMini::Table)
    value.grn.name
  elsif value.is_a?(Groonga::Table)
    value.name
  elsif value.is_a?(::Array)
    value_type(value.first)
  else
    raise NotSupportColumnType, value
  end
end