activerecord-jdbcteradata-adapter 0.3.4 → 0.3.6

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