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 +1 -1
- data/activerecord-jdbcteradata-adapter.gemspec +21 -4
- data/lib/arjdbc/teradata/adapter.rb +109 -7
- data/lib/arjdbc/teradata/connection_methods.rb +3 -1
- data/lib/arjdbc/teradata/teradata_java.jar +0 -0
- data/lib/arjdbc/teradata.rb +5 -1
- metadata +28 -42
- data/.gitignore +0 -18
- data/.rspec +0 -3
- data/examples/models.rb +0 -76
data/Gemfile.lock
CHANGED
@@ -1,19 +1,36 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "activerecord-jdbcteradata-adapter"
|
3
|
-
s.version = "0.3.
|
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
|
-
|
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
|
-
|
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
|
-
|
136
|
-
|
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 = '#{
|
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
|
-
|
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
|
Binary file
|
data/lib/arjdbc/teradata.rb
CHANGED
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
|
+
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-
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
156
|
-
MA==
|
142
|
+
version: '0'
|
157
143
|
none: false
|
158
144
|
requirements: []
|
159
145
|
rubyforge_project: activerecord-jdbcteradata-adapter
|
data/.gitignore
DELETED
data/.rspec
DELETED
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
|