activerecord-jdbcteradata-adapter 0.3.4 → 0.3.6

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.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- activerecord-jdbcteradata-adapter (0.3.3)
4
+ activerecord-jdbcteradata-adapter (0.3.4)
5
5
  activerecord
6
6
  activerecord-jdbc-adapter
7
7
  jdbc-teradata
@@ -1,19 +1,36 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "activerecord-jdbcteradata-adapter"
3
- s.version = "0.3.4"
3
+ s.version = "0.3.6"
4
4
  s.authors = ["Chris Parker"]
5
5
  s.email = [ "mrcsparker@gmail.com"]
6
6
  s.homepage = "https://github.com/mrcsparker/activerecord-jdbcteradata-adapter"
7
7
  s.summary = %q{Teradata JDBC driver for JRuby on Rails.}
8
8
  s.description = %q{Install this gem and require 'teradata' with JRuby on Rails.}
9
-
9
+
10
10
  s.rubyforge_project = "activerecord-jdbcteradata-adapter"
11
+
12
+ s.files = %w[
13
+ Gemfile
14
+ Gemfile.lock
15
+ LICENSE.txt
16
+ README.md
17
+ activerecord-jdbcteradata-adapter.gemspec
18
+ lib/active_record/connection_adapters/jdbcteradata_adapter.rb
19
+ lib/active_record/connection_adapters/teradata_adapter.rb
20
+ lib/activerecord-jdbcteradata-adapter.rb
21
+ lib/arel/engines/sql/compilers/teradata_compiler.rb
22
+ lib/arel/visitors/teradata.rb
23
+ lib/arjdbc/discover.rb
24
+ lib/arjdbc/teradata/adapter.rb
25
+ lib/arjdbc/teradata/connection_methods.rb
26
+ lib/arjdbc/teradata/teradata_java.jar
27
+ lib/arjdbc/teradata.rb
28
+ ]
11
29
 
12
- s.files = `git ls-files`.split("\n")
13
30
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
31
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
15
32
  s.require_paths = ["lib"]
16
-
33
+
17
34
  s.add_development_dependency 'rake'
18
35
  s.add_development_dependency 'rspec'
19
36
  s.add_dependency 'activerecord-jdbc-adapter'
@@ -10,6 +10,9 @@ module ::ArJdbc
10
10
  ## ActiveRecord::ConnectionAdapters::JdbcAdapter
11
11
 
12
12
  #- jdbc_connection_class
13
+ def self.jdbc_connection_class
14
+ ::ActiveRecord::ConnectionAdapters::TeradataJdbcConnection
15
+ end
13
16
 
14
17
  #- jdbc_column_class
15
18
 
@@ -41,8 +44,7 @@ module ::ArJdbc
41
44
 
42
45
  #+ self.arel2_visitors
43
46
  def self.arel2_visitors(config)
44
- require 'arel/visitors/teradata'
45
- {}.tap {|v| %w(teradata jdbcteradata).each {|x| v[x] = ::Arel::Visitors::Teradata } }
47
+ { 'teradata' => Arel::Visitors::Teradata, 'jdbcteradata' => Arel::Visitors::Teradata }
46
48
  end
47
49
 
48
50
  #- configure_arel2_visitors
@@ -124,26 +126,60 @@ module ::ArJdbc
124
126
 
125
127
  #- insert_sql
126
128
 
129
+ #= extract_schema_and_table (extra, taken from postgresql adapter)
130
+ # Extracts the table and schema name from +name+
131
+ def extract_schema_and_table(name)
132
+ schema, table = name.split('.', 2)
133
+
134
+ unless table # A table was provided without a schema
135
+ table = schema
136
+ schema = nil
137
+ end
138
+
139
+ if name =~ /^"/ # Handle quoted table names
140
+ table = name
141
+ schema = nil
142
+ end
143
+ [schema, table]
144
+ end
145
+
127
146
  #- tables
128
147
  def tables
129
- @connection.tables(nil, database_name, nil, %w(TABLE))
148
+ return false unless table_name
149
+ schema, table = extract_schema_and_table(table_name.to_s)
150
+ return false unless table
151
+
152
+ schema = database_name unless schema
153
+
154
+ @connection.tables(nil, schema, nil, %w(TABLE))
130
155
  end
131
156
 
132
157
  #- table_exists?
133
158
  def table_exists?(table_name)
134
159
  return false unless table_name
135
- output = execute("SELECT count(*) as table_count FROM dbc.tables WHERE TableName = '#{table_name}' AND DatabaseName = '#{database_name}'")
136
- output.first['table_count'] > 0
160
+ schema, table = extract_schema_and_table(table_name.to_s)
161
+ return false unless table
162
+
163
+ schema = database_name unless schema
164
+
165
+ output = execute("SELECT count(*) as table_count FROM dbc.tables WHERE TableName = '#{table}' AND DatabaseName = '#{schema}'")
166
+ output.first['table_count'].to_i > 0
137
167
  end
138
168
 
139
169
  #+ indexes
140
170
  # TODO: Multiple indexes per column
141
171
  IndexDefinition = ::ActiveRecord::ConnectionAdapters::IndexDefinition # :nodoc:
142
172
  def indexes(table_name, name = nil, schema_name = nil)
173
+ return false unless table_name
174
+ schema, table = extract_schema_and_table(table_name.to_s)
175
+ return false unless table
176
+
177
+ schema = database_name unless schema
178
+
143
179
  result = select_rows('SELECT' <<
144
180
  ' DatabaseName, TableName, ColumnName, IndexType, IndexName, UniqueFlag' <<
145
181
  ' FROM DBC.Indices' <<
146
- " WHERE TableName = '#{table_name}' AND DatabaseName = '#{database_name}'")
182
+ " WHERE TableName = '#{table}' AND DatabaseName = '#{schema}'")
147
183
 
148
184
  result.map do |row|
149
185
  idx_database_name = row[0].to_s.strip
@@ -188,7 +224,13 @@ module ::ArJdbc
188
224
 
189
225
  #- columns
190
226
  def columns(table_name, name = nil)
191
- @connection.columns_internal(table_name.to_s, nil, database_name)
227
+ return false unless table_name
228
+ schema, table = extract_schema_and_table(table_name.to_s)
229
+ return false unless table
230
+
231
+ schema = database_name unless schema
232
+
233
+ @connection.columns_internal(table, nil, schema)
192
234
  end
193
235
 
194
236
  #- column_exists?
@@ -326,3 +368,63 @@ module ::ArJdbc
326
368
 
327
369
  end
328
370
  end
371
+
372
+ module ActiveRecord
373
+ module ConnectionAdapters
374
+ class TeradataColumn < JdbcColumn
375
+ include ::ArJdbc::Teradata::Column
376
+
377
+ def initialize(name, *args)
378
+ if Hash === name
379
+ super
380
+ else
381
+ super(nil, name, *args)
382
+ end
383
+ end
384
+
385
+ def call_discovered_column_callbacks(*)
386
+ end
387
+ end
388
+
389
+ class TeradataAdapter < JdbcAdapter
390
+ include ::ArJdbc::Teradata
391
+
392
+ def initialize(*args)
393
+ super
394
+ end
395
+
396
+ def jdbc_connection_class(spec)
397
+ ::ArJdbc::Teradata.jdbc_connection_class
398
+ end
399
+
400
+ def jdbc_column_class
401
+ TeradataColumn
402
+ end
403
+ alias_chained_method :columns, :query_cache, :jdbc_columns
404
+
405
+ # some QUOTING caching :
406
+
407
+ @@quoted_table_names = {}
408
+
409
+ def quote_table_name(name)
410
+ unless quoted = @@quoted_table_names[name]
411
+ quoted = super
412
+ @@quoted_table_names[name] = quoted.freeze
413
+ end
414
+ quoted
415
+ end
416
+
417
+ @@quoted_column_names = {}
418
+
419
+ def quote_column_name(name)
420
+ unless quoted = @@quoted_column_names[name]
421
+ quoted = super
422
+ @@quoted_column_names[name] = quoted.freeze
423
+ end
424
+ quoted
425
+ end
426
+ end
427
+
428
+ end
429
+ end
430
+
@@ -10,8 +10,10 @@ class ActiveRecord::Base
10
10
  config[:username] ||= Java::JavaLang::System.get_property('user.name')
11
11
  config[:host] ||= 'localhost'
12
12
  config[:port] ||= 1025
13
- config[:url] ||= "jdbc:teradata://#{config[:host]}/DATABASE=#{config[:database]},DBS_PORT=#{config[:port]},COP=OFF"
13
+ config[:url] ||= "jdbc:teradata://#{config[:host]}/DATABASE=#{config[:database]},DBS_PORT=#{config[:port]},COP=OFF,tmode=ANSI,charset=UTF8"
14
14
  config[:driver] ||= 'com.teradata.jdbc.TeraDriver'
15
+ config[:adapter_class] = ActiveRecord::ConnectionAdapters::TeradataAdapter
16
+ config[:adapter_spec] = ::ArJdbc::Teradata
15
17
  jdbc_connection(config)
16
18
  end
17
19
  alias_method :jdbcteradata_connection, :teradata_connection
@@ -1,5 +1,9 @@
1
1
  require 'arjdbc'
2
2
  require 'arel/visitors/teradata'
3
- require 'arjdbc/teradata/adapter'
3
+
4
4
  require 'arjdbc/teradata/connection_methods'
5
+ require 'arjdbc/teradata/adapter'
6
+
7
+ # Load the java-specific parts
8
+ require 'arjdbc/teradata/teradata_java'
5
9
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-jdbcteradata-adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.3.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,23 +9,21 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-27 00:00:00.000000000 Z
12
+ date: 2013-05-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
16
  version_requirements: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ">="
18
+ - - '>='
19
19
  - !ruby/object:Gem::Version
20
- version: !binary |-
21
- MA==
20
+ version: '0'
22
21
  none: false
23
22
  requirement: !ruby/object:Gem::Requirement
24
23
  requirements:
25
- - - ">="
24
+ - - '>='
26
25
  - !ruby/object:Gem::Version
27
- version: !binary |-
28
- MA==
26
+ version: '0'
29
27
  none: false
30
28
  prerelease: false
31
29
  type: :development
@@ -33,17 +31,15 @@ dependencies:
33
31
  name: rspec
34
32
  version_requirements: !ruby/object:Gem::Requirement
35
33
  requirements:
36
- - - ">="
34
+ - - '>='
37
35
  - !ruby/object:Gem::Version
38
- version: !binary |-
39
- MA==
36
+ version: '0'
40
37
  none: false
41
38
  requirement: !ruby/object:Gem::Requirement
42
39
  requirements:
43
- - - ">="
40
+ - - '>='
44
41
  - !ruby/object:Gem::Version
45
- version: !binary |-
46
- MA==
42
+ version: '0'
47
43
  none: false
48
44
  prerelease: false
49
45
  type: :development
@@ -51,17 +47,15 @@ dependencies:
51
47
  name: activerecord-jdbc-adapter
52
48
  version_requirements: !ruby/object:Gem::Requirement
53
49
  requirements:
54
- - - ">="
50
+ - - '>='
55
51
  - !ruby/object:Gem::Version
56
- version: !binary |-
57
- MA==
52
+ version: '0'
58
53
  none: false
59
54
  requirement: !ruby/object:Gem::Requirement
60
55
  requirements:
61
- - - ">="
56
+ - - '>='
62
57
  - !ruby/object:Gem::Version
63
- version: !binary |-
64
- MA==
58
+ version: '0'
65
59
  none: false
66
60
  prerelease: false
67
61
  type: :runtime
@@ -69,17 +63,15 @@ dependencies:
69
63
  name: activerecord
70
64
  version_requirements: !ruby/object:Gem::Requirement
71
65
  requirements:
72
- - - ">="
66
+ - - '>='
73
67
  - !ruby/object:Gem::Version
74
- version: !binary |-
75
- MA==
68
+ version: '0'
76
69
  none: false
77
70
  requirement: !ruby/object:Gem::Requirement
78
71
  requirements:
79
- - - ">="
72
+ - - '>='
80
73
  - !ruby/object:Gem::Version
81
- version: !binary |-
82
- MA==
74
+ version: '0'
83
75
  none: false
84
76
  prerelease: false
85
77
  type: :runtime
@@ -87,17 +79,15 @@ dependencies:
87
79
  name: jdbc-teradata
88
80
  version_requirements: !ruby/object:Gem::Requirement
89
81
  requirements:
90
- - - ">="
82
+ - - '>='
91
83
  - !ruby/object:Gem::Version
92
- version: !binary |-
93
- MA==
84
+ version: '0'
94
85
  none: false
95
86
  requirement: !ruby/object:Gem::Requirement
96
87
  requirements:
97
- - - ">="
88
+ - - '>='
98
89
  - !ruby/object:Gem::Version
99
- version: !binary |-
100
- MA==
90
+ version: '0'
101
91
  none: false
102
92
  prerelease: false
103
93
  type: :runtime
@@ -108,23 +98,21 @@ executables: []
108
98
  extensions: []
109
99
  extra_rdoc_files: []
110
100
  files:
111
- - ".gitignore"
112
- - ".rspec"
113
101
  - Gemfile
114
102
  - Gemfile.lock
115
103
  - LICENSE.txt
116
104
  - README.md
117
105
  - activerecord-jdbcteradata-adapter.gemspec
118
- - examples/models.rb
119
106
  - lib/active_record/connection_adapters/jdbcteradata_adapter.rb
120
107
  - lib/active_record/connection_adapters/teradata_adapter.rb
121
108
  - lib/activerecord-jdbcteradata-adapter.rb
122
109
  - lib/arel/engines/sql/compilers/teradata_compiler.rb
123
110
  - lib/arel/visitors/teradata.rb
124
111
  - lib/arjdbc/discover.rb
125
- - lib/arjdbc/teradata.rb
126
112
  - lib/arjdbc/teradata/adapter.rb
127
113
  - lib/arjdbc/teradata/connection_methods.rb
114
+ - lib/arjdbc/teradata/teradata_java.jar
115
+ - lib/arjdbc/teradata.rb
128
116
  - spec/active_record_schema_spec.rb
129
117
  - spec/adapter_spec.rb
130
118
  - spec/associations_spec.rb
@@ -143,17 +131,15 @@ require_paths:
143
131
  - lib
144
132
  required_ruby_version: !ruby/object:Gem::Requirement
145
133
  requirements:
146
- - - ">="
134
+ - - '>='
147
135
  - !ruby/object:Gem::Version
148
- version: !binary |-
149
- MA==
136
+ version: '0'
150
137
  none: false
151
138
  required_rubygems_version: !ruby/object:Gem::Requirement
152
139
  requirements:
153
- - - ">="
140
+ - - '>='
154
141
  - !ruby/object:Gem::Version
155
- version: !binary |-
156
- MA==
142
+ version: '0'
157
143
  none: false
158
144
  requirements: []
159
145
  rubyforge_project: activerecord-jdbcteradata-adapter
data/.gitignore DELETED
@@ -1,18 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- coverage
6
- InstalledFiles
7
- lib/bundler/man
8
- pkg
9
- rdoc
10
- spec/reports
11
- test/tmp
12
- test/version_tmp
13
- tmp
14
-
15
- # YARD artifacts
16
- .yardoc
17
- _yardoc
18
- doc/
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --colour --profile
2
- --format documentation
3
- --format progress
data/examples/models.rb DELETED
@@ -1,76 +0,0 @@
1
- require 'rubygems'
2
- require 'active_record'
3
-
4
- CONFIG = {
5
- :username => 'dbc',
6
- :password => 'dbc',
7
- :adapter => 'teradata',
8
- :host => '192.168.5.130',
9
- :database => 'DBC'
10
- }
11
-
12
- ActiveRecord::Base.establish_connection(CONFIG)
13
-
14
- class Acct < ActiveRecord::Base
15
- self.table_name = 'financial.accts'
16
-
17
- belongs_to :customer, :foreign_key => 'cust_id'
18
- end
19
-
20
- class CheckingAcct < ActiveRecord::Base
21
- self.table_name = 'financial.checking_acct'
22
- self.primary_key = 'cust_id'
23
-
24
- belongs_to :customer, :foreign_key => 'cust_id'
25
- end
26
-
27
- class CheckingTran < ActiveRecord::Base
28
- self.table_name = 'financial.checking_tran'
29
- self.primary_key = 'Tran_Id'
30
-
31
- belongs_to :customer, :foreign_key => 'Cust_Id'
32
- end
33
-
34
- class CreditAcct < ActiveRecord::Base
35
- self.table_name = 'financial.credit_acct'
36
- self.primary_key = 'cust_id'
37
-
38
- belongs_to :customer, :foreign_key => 'cust_id'
39
- end
40
-
41
- class CreditTran < ActiveRecord::Base
42
- self.table_name ='financial.credit_tran'
43
- self.primary_key = 'Tran_Id'
44
-
45
- belongs_to :customer, :foreign_key => 'Cust_Id'
46
- end
47
-
48
- class Customer < ActiveRecord::Base
49
- self.table_name = 'financial.customer'
50
- self.primary_key = 'cust_id'
51
- end
52
-
53
- class CustomerName < ActiveRecord::Base
54
- self.table_name = 'financial.customer_name'
55
- self.primary_key = 'cust_id'
56
-
57
- belongs_to :customer, :foreign_key => 'cust_id'
58
- end
59
-
60
- class SavingsAcct < ActiveRecord::Base
61
- self.table_name = 'financial.savings_acct'
62
- self.primary_key = 'cust_id'
63
-
64
- belongs_to :customer, :foreign_key => 'cust_id'
65
- end
66
-
67
- class SavingsTran < ActiveRecord::Base
68
- self.table_name = 'financial.savings_tran'
69
- self.primary_key = 'Tran_Id'
70
-
71
- belongs_to :customer, :foreign_key => 'Cust_Id'
72
- end
73
-
74
- class Tran < ActiveRecord::Base
75
- self.table_name = 'financial.trans'
76
- end