Module: MonetDB::Connection::Query::Table

Defined in:
lib/monetdb/connection/query/table.rb

Instance Method Summary collapse

Instance Method Details

#parse_boolean_value(value) ⇒ Object



78
79
80
# File 'lib/monetdb/connection/query/table.rb', line 78

def parse_boolean_value(value)
  value == "1"
end

#parse_date_time_value(value) ⇒ Object



73
74
75
76
# File 'lib/monetdb/connection/query/table.rb', line 73

def parse_date_time_value(value)
  date, time = value.split(" ")
  Time.new *(date.split("-") + time.split(":")).collect(&:to_i)
end

#parse_date_value(value) ⇒ Object



69
70
71
# File 'lib/monetdb/connection/query/table.rb', line 69

def parse_date_value(value)
  Date.new *value.split("-").collect(&:to_i)
end

#parse_float_value(value) ⇒ Object



65
66
67
# File 'lib/monetdb/connection/query/table.rb', line 65

def parse_float_value(value)
  value.to_f
end

#parse_integer_value(value) ⇒ Object



61
62
63
# File 'lib/monetdb/connection/query/table.rb', line 61

def parse_integer_value(value)
  value.to_i
end

#parse_row(column_types, row) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/monetdb/connection/query/table.rb', line 28

def parse_row(column_types, row)
  [].tap do |parsed|
    row.slice(1..-1).split(",\t").each_with_index do |value, index|
      parsed << parse_value(column_types[index], value.strip)
    end
  end
end

#parse_rows(table_header, rows) ⇒ Object



21
22
23
24
25
26
# File 'lib/monetdb/connection/query/table.rb', line 21

def parse_rows(table_header, rows)
  column_types = table_header[:column_types]
  rows.collect do |row|
    parse_row column_types, row
  end
end

#parse_string_value(value) ⇒ Object



57
58
59
# File 'lib/monetdb/connection/query/table.rb', line 57

def parse_string_value(value)
  value.slice(1..-2).force_encoding("UTF-8")
end

#parse_table_response(query_header, table_header, response) ⇒ Object



6
7
8
9
10
11
# File 'lib/monetdb/connection/query/table.rb', line 6

def parse_table_response(query_header, table_header, response)
  unless query_header[:rows] == response.size
    raise QueryError, "Amount of fetched rows does not match header value (#{response.size} instead of #{query_header[:rows]})"
  end
  parse_table_rows query_header, table_header, response.join("\n")
end

#parse_table_rows(query_header, table_header, response) ⇒ Object



13
14
15
16
17
18
19
# File 'lib/monetdb/connection/query/table.rb', line 13

def parse_table_rows(query_header, table_header, response)
  start = Time.now
  rows = response.slice(0..-3).split("\t]\n")
  parse_rows(table_header, rows).tap do
    log :info, "  RUBY (#{((Time.now - start) * 1000).round(1)}ms) [ Rows: #{query_header[:rows]}, Bytesize: #{response.bytesize} bytes ]"
  end
end

#parse_value(type, value) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/monetdb/connection/query/table.rb', line 36

def parse_value(type, value)
  unless value == "NULL"
    case type
    when :varchar, :text, :string, :clob
      parse_string_value value
    when :int, :smallint, :bigint, :serial, :wrd
      parse_integer_value value
    when :double, :float, :real
      parse_float_value value
    when :date
      parse_date_value value
    when :timestamp
      parse_date_time_value value
    when :tinyint, :boolean
      parse_boolean_value value
    else
      raise NotImplementedError, "Cannot parse value of type #{type.inspect}"
    end
  end
end