impala 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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