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 +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
|