impala 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,12 +13,14 @@ Gem::Specification.new do |gem|
13
13
  gem.homepage = "https://github.com/colinmarc/impala-ruby"
14
14
 
15
15
  gem.add_dependency('thrift', '~> 0.9')
16
+ gem.add_dependency('ripl', '~> 0.7')
17
+ gem.add_dependency('hirb', '~> 0.7')
16
18
 
17
19
  gem.add_development_dependency('rake')
18
20
  gem.add_development_dependency('eden')
19
21
  gem.add_development_dependency('pry')
20
22
 
21
- gem.add_development_dependency('minitest', '~> 4.5')
23
+ gem.add_development_dependency('minitest')
22
24
  gem.add_development_dependency('mocha')
23
25
 
24
26
  gem.add_development_dependency('yard')
@@ -8,6 +8,7 @@ $LOAD_PATH.push(gen_dir) unless $LOAD_PATH.include?(gen_dir)
8
8
  require 'impala/version'
9
9
 
10
10
  require 'thrift'
11
+ require 'time'
11
12
  require 'impala/protocol'
12
13
  require 'impala/cursor'
13
14
  require 'impala/connection'
@@ -22,7 +23,7 @@ module Impala
22
23
  class ParsingError < StandardError; end
23
24
 
24
25
  # Connect to an Impala server. If a block is given, it will close the
25
- # connection after calling the block with the collection.
26
+ # connection after yielding the connection to the block.
26
27
  # @param [String] host the hostname or IP address of the Impala server
27
28
  # @param [int] port the port that the Impala server is listening on
28
29
  # @yieldparam [Connection] conn the open connection. Will be closed once the block
@@ -8,7 +8,6 @@ module Impala
8
8
  def initialize(handle, service, buffer_length=1024)
9
9
  @handle = handle
10
10
  @service = service
11
- @metadata = @service.get_results_metadata(@handle)
12
11
 
13
12
  @buffer_length = buffer_length
14
13
  @row_buffer = []
@@ -71,6 +70,10 @@ module Impala
71
70
 
72
71
  private
73
72
 
73
+ def metadata
74
+ @metadata ||= @service.get_results_metadata(@handle)
75
+ end
76
+
74
77
  def fetch_more
75
78
  return if @done
76
79
 
@@ -88,9 +91,9 @@ module Impala
88
91
 
89
92
  def parse_row(raw)
90
93
  row = {}
91
- fields = raw.split(@metadata.delim)
94
+ fields = raw.split(metadata.delim)
92
95
 
93
- fields.zip(@metadata.schema.fieldSchemas).each do |raw_value, schema|
96
+ fields.zip(metadata.schema.fieldSchemas).each do |raw_value, schema|
94
97
  value = convert_raw_value(raw_value, schema)
95
98
  row[schema.name.to_sym] = value
96
99
  end
@@ -114,11 +117,13 @@ module Impala
114
117
  end
115
118
  when 'tinyint', 'int', 'bigint'
116
119
  value.to_i
117
- when 'double'
120
+ when 'double', 'float'
118
121
  value.to_f
122
+ when "timestamp"
123
+ Time.parse(value)
119
124
  else
120
125
  raise ParsingError.new("Unknown type: #{schema.type}")
121
126
  end
122
127
  end
123
128
  end
124
- end
129
+ end
@@ -1,3 +1,3 @@
1
1
  module Impala
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -28,8 +28,28 @@ describe 'connected tests' do
28
28
  end
29
29
 
30
30
  it 'can run a basic query' do
31
- ret = @connection.query('SELECT 1 AS a')
32
- assert_equal([{:a=>1}], ret, "the result should be a list of hashes")
31
+ ret = @connection.query('SELECT "foo" AS foo')
32
+ assert_equal([{:foo=>'foo'}], ret, "the result should be a list of hashes")
33
+ end
34
+
35
+ it 'can handle boolean values' do
36
+ ret = @connection.query('SELECT TRUE AS foo')
37
+ assert_equal([{:foo=>true}], ret, "the result should be a bool")
38
+ end
39
+
40
+ it 'can handle double values' do
41
+ ret = @connection.query("SELECT 1.23 AS foo")
42
+ assert_equal([{:foo=>1.23}], ret, "the result should be a float")
43
+ end
44
+
45
+ it 'can handle float values' do
46
+ ret = @connection.query("SELECT CAST(1.23 AS float) as foo")
47
+ assert_instance_of(Float, ret.first[:foo], "the result should be a float")
48
+ end
49
+
50
+ it 'can handle timestamp values' do
51
+ ret = @connection.query("SELECT NOW() AS foo")
52
+ assert_instance_of(Time, ret.first[:foo])
33
53
  end
34
54
 
35
55
  # TODO: this test sucks because there's no way to get multiple records
@@ -44,4 +64,8 @@ describe 'connected tests' do
44
64
  assert_equal(false, cursor.has_more?, "has_more? should be false")
45
65
  assert_nil(cursor.fetch_row, "subsequent calls to fetch_row should be nil")
46
66
  end
67
+
68
+ it 'can successfully run a "use" query' do
69
+ @connection.query('USE foo')
70
+ end
47
71
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: impala
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-26 00:00:00.000000000 Z
12
+ date: 2013-03-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thrift
@@ -27,6 +27,38 @@ dependencies:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0.9'
30
+ - !ruby/object:Gem::Dependency
31
+ name: ripl
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '0.7'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '0.7'
46
+ - !ruby/object:Gem::Dependency
47
+ name: hirb
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '0.7'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '0.7'
30
62
  - !ruby/object:Gem::Dependency
31
63
  name: rake
32
64
  requirement: !ruby/object:Gem::Requirement
@@ -80,17 +112,17 @@ dependencies:
80
112
  requirement: !ruby/object:Gem::Requirement
81
113
  none: false
82
114
  requirements:
83
- - - ~>
115
+ - - ! '>='
84
116
  - !ruby/object:Gem::Version
85
- version: '4.5'
117
+ version: '0'
86
118
  type: :development
87
119
  prerelease: false
88
120
  version_requirements: !ruby/object:Gem::Requirement
89
121
  none: false
90
122
  requirements:
91
- - - ~>
123
+ - - ! '>='
92
124
  - !ruby/object:Gem::Version
93
- version: '4.5'
125
+ version: '0'
94
126
  - !ruby/object:Gem::Dependency
95
127
  name: mocha
96
128
  requirement: !ruby/object:Gem::Requirement