Module: MonetDB::Connection::Query::Table
- Defined in:
- lib/monetdb/connection/query/table.rb
Instance Method Summary collapse
- #parse_boolean_value(value) ⇒ Object
- #parse_date_time_value(value) ⇒ Object
- #parse_date_value(value) ⇒ Object
- #parse_float_value(value) ⇒ Object
- #parse_integer_value(value) ⇒ Object
- #parse_row(column_types, row) ⇒ Object
- #parse_rows(table_header, rows) ⇒ Object
- #parse_string_value(value) ⇒ Object
- #parse_table_response(query_header, table_header, response) ⇒ Object
- #parse_table_rows(query_header, table_header, response) ⇒ Object
- #parse_value(type, value) ⇒ Object
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, " [1m[36mRUBY (#{((Time.now - start) * 1000).round(1)}ms)[0m [ Rows: #{query_header[:rows]}, Bytesize: #{response.bytesize} bytes ][0m" 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 |