Class: GroongaDelta::Writer

Inherits:
Object
  • Object
show all
Defined in:
lib/groonga-delta/writer.rb

Instance Method Summary collapse

Constructor Details

#initialize(logger, dir) ⇒ Writer

Returns a new instance of Writer.



24
25
26
27
# File 'lib/groonga-delta/writer.rb', line 24

def initialize(logger, dir)
  @logger = logger
  @dir = dir
end

Instance Method Details

#write_deletes(table, keys) ⇒ Object



72
73
74
75
76
77
78
79
80
81
# File 'lib/groonga-delta/writer.rb', line 72

def write_deletes(table, keys)
  write_data(table, "delete", ".grn") do |output|
    delete = Groonga::Command::Delete.new
    delete[:table] = table
    keys.each do |key|
      delete[:key] = key
      output.puts(delete.to_command_format)
    end
  end
end

#write_schema(command) ⇒ Object



83
84
85
86
87
# File 'lib/groonga-delta/writer.rb', line 83

def write_schema(command)
  write_entry("schema", ".grn") do |output|
    output.puts(command.to_command_format)
  end
end

#write_upserts(table, records, packed: false) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/groonga-delta/writer.rb', line 29

def write_upserts(table, records, packed: false)
  if records.is_a?(Arrow::Table)
    write_data(table,
               "upsert",
               ".parquet",
               packed: packed,
               open_output: false) do |output|
      records.save(output, format: :parquet)
    end
  else
    write_data(table, "upsert", ".grn", packed: packed) do |output|
      first_record = true
      records.each do |record|
        if first_record
          output.puts("load --table #{table}")
          output.print("[")
          first_record = false
        else
          output.print(",")
        end
        output.puts
        json = "{"
        record.each_with_index do |(key, value), i|
          json << "," unless i.zero?
          json << "#{key.to_s.to_json}:"
          case value
          when Time
            json << value.dup.localtime.strftime("%Y-%m-%d %H:%M:%S").to_json
          else
            json << value.to_json
          end
        end
        json << "}"
        output.print(json)
      end
      unless first_record
        output.puts()
        output.puts("]")
      end
    end
  end
end