teradata-extractor 0.0.2-java → 1.0.0-java

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bb6b35ee85d2aba0a12ff988e734ba401a47b49b
4
- data.tar.gz: eac262cd69b0bb8edb41529471099c442d3bc147
3
+ metadata.gz: afc783b0c9181aa6ab5a5f075f13bc5ecc69c802
4
+ data.tar.gz: d35e6e4416dda314574703ce25068c5ae86fc5ae
5
5
  SHA512:
6
- metadata.gz: 83211e6ba11514d107799e5972c04b193034b2ec197f00ff48fdee22acb1623a09eee5d05157c964bfdf7a9fb33489dd1553b346d35bedd9df0a8030102e1d66
7
- data.tar.gz: 3bd4233db617cb4c79796656545a9377c44fc857a7e0df8e39c90b2594597829d1c96075bad0f2a8058998a3acd70a00b96eafb8381e494f45e8aa4dd045db49
6
+ metadata.gz: 2d80e3d4c91195f7cc4956f80e5cddfb3ad40b2b9554253ee0e94d584db8f357ea78b1dbc4979eac78ee359eb9d0a69082afceb6f5251aee5f404036a6f3b387
7
+ data.tar.gz: 773857b14c9c7bc468cc9fc93d540fc9d2c1c6a60b27abb8bccaa501f966c54eb81b7ebae66498eec69ef2801c26d05fbf75a895813d79ae67c76be6a9cecce1
@@ -1,5 +1,4 @@
1
1
  require 'rubygems'
2
2
  require 'teradata-extractor/connection'
3
3
  require 'teradata-extractor/query'
4
- require 'rails'
5
4
 
@@ -3,52 +3,65 @@ require 'csv'
3
3
  module TeradataExtractor
4
4
  class Query
5
5
 
6
- # @param [com.teradata.jdbc.jdk6.JDK6_SQL_Connection] Teradata connection
7
- # @param [#to_s] sql Sql query to execute
8
6
  def initialize(server_name, username, password)
9
-
10
7
  @connection = TeradataExtractor::Connection.instance.connection(server_name, username, password)
11
8
  @statement ||= @connection.create_statement
12
9
  end
13
10
 
14
- def to_enumerable(sql)
11
+ # returns an enumerable, each element of which is a hash in the format {column1: value1, column2: value2}
12
+ def enumerable(sql, fetch_size = 1000)
15
13
  results = @statement.execute_query(sql)
16
- #results = conn.execute_query("select TOP 10 country_id, sf_account_id, country_name from emea_analytics.eu_deal_flat")
17
- e = Enumerator.new do |y|
18
- column_count = results.getMetaData.getColumnCount;
14
+
15
+ Enumerator.new do |y|
16
+ column_count = results.get_meta_data.get_column_count
19
17
  while(results.next) do
20
18
  row = {}
21
19
  1.upto(column_count) do |i|
22
- column_name = results.getMetaData.getColumnName(i).to_sym
23
- row[column_name] = to_ruby_type(results.getObject(i))
20
+ column_name = results.get_meta_data.get_column_name(i).to_sym
21
+ row[column_name] = to_ruby_type(results.get_object(i))
24
22
  end
25
23
  y << row
26
24
  end
27
25
  end
28
26
  end
29
27
 
30
- def to_csv(sql)
28
+ # returns an array of column names, and an enumberator,
29
+ # each item of the enumerator contains a single StringIO object, the value
30
+ # of which is a CSV string containing [step] rows.
31
+ def csv_string_io(sql, fetch_size = 1000)
31
32
  results = @statement.execute_query(sql)
32
- #results = conn.execute_query("select TOP 10 country_id, sf_account_id, country_name from emea_analytics.eu_deal_flat")
33
- CSV.generate do |csv|
34
- column_count = results.getMetaData.getColumnCount;
35
- csv << 1.upto(column_count).map{|i| results.getMetaData.getColumnName(i)}
33
+ results.set_fetch_size(fetch_size)
36
34
 
37
- while(results.next) do
38
- row = []
39
- 1.upto(column_count) do |i|
40
- row << to_ruby_type(results.getObject(i))
35
+ column_count = results.get_meta_data.get_column_count
36
+ headers = 1.upto(column_count).map{|i| results.get_meta_data.get_column_name(i)}
37
+
38
+ enum = Enumerator.new do |y|
39
+ finished = false
40
+ while(!finished) do
41
+ rows = []
42
+ csv_string = CSV.generate do |csv|
43
+
44
+ fetch_size.times do
45
+ unless results.next
46
+ finished = true
47
+ break
48
+ end
49
+ values = 1.upto(column_count).map{|i| to_ruby_type(results.get_object(i)) }
50
+ csv << values
51
+ end
41
52
  end
42
- csv << row
53
+ y << StringIO.new(csv_string)
43
54
  end
44
55
  end
56
+
57
+ return [headers, enum]
45
58
  end
46
59
 
47
60
  protected
48
61
 
49
62
  def to_ruby_type(java_object)
50
63
  if java_object.is_a?(Java::JavaMath::BigDecimal)
51
- return java_object.to_string.to_i
64
+ return java_object.intValueExact rescue java_object.doubleValue
52
65
  elsif java_object.is_a?(Java::JavaSql::Date)
53
66
  return Date.parse(java_object.to_string)
54
67
  else
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: teradata-extractor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 1.0.0
5
5
  platform: java
6
6
  authors:
7
7
  - Steve Mitchell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-12 00:00:00.000000000 Z
11
+ date: 2015-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jdbc-teradata
@@ -24,6 +24,34 @@ dependencies:
24
24
  version: '0'
25
25
  prerelease: false
26
26
  type: :runtime
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ prerelease: false
40
+ type: :development
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ prerelease: false
54
+ type: :development
27
55
  description: Get your data from Teradata AND GET TO THE CHOPPER!
28
56
  email: thestevemitchell@gmail.com
29
57
  executables: []