Skip to content

Commit 4630a39

Browse files
authored
Merge pull request rsim#1668 from yahonda/drop_dblink_support
Drop db link support
2 parents a71e929 + 2a89b04 commit 4630a39

File tree

8 files changed

+43
-115
lines changed

8 files changed

+43
-115
lines changed

lib/active_record/connection_adapters/oracle_enhanced/connection.rb

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,8 @@ def self.create(config)
2424
def describe(name)
2525
name = name.to_s
2626
if name.include?("@")
27-
name, db_link = name.split("@")
28-
default_owner = _select_value("SELECT username FROM all_db_links WHERE db_link = '#{db_link.upcase}'")
29-
db_link = "@#{db_link}"
27+
raise ArgumentError "db link is not supported"
3028
else
31-
db_link = nil
3229
default_owner = @owner
3330
end
3431
real_name = OracleEnhanced::Quoting.valid_table_name?(name) ? name.upcase : name
@@ -39,31 +36,31 @@ def describe(name)
3936
end
4037
sql = <<-SQL.strip.gsub(/\s+/, " ")
4138
SELECT owner, table_name, 'TABLE' name_type
42-
FROM all_tables#{db_link}
39+
FROM all_tables
4340
WHERE owner = '#{table_owner}'
4441
AND table_name = '#{table_name}'
4542
UNION ALL
4643
SELECT owner, view_name table_name, 'VIEW' name_type
47-
FROM all_views#{db_link}
44+
FROM all_views
4845
WHERE owner = '#{table_owner}'
4946
AND view_name = '#{table_name}'
5047
UNION ALL
51-
SELECT table_owner, DECODE(db_link, NULL, table_name, table_name||'@'||db_link), 'SYNONYM' name_type
52-
FROM all_synonyms#{db_link}
48+
SELECT table_owner, table_name, 'SYNONYM' name_type
49+
FROM all_synonyms
5350
WHERE owner = '#{table_owner}'
5451
AND synonym_name = '#{table_name}'
5552
UNION ALL
56-
SELECT table_owner, DECODE(db_link, NULL, table_name, table_name||'@'||db_link), 'SYNONYM' name_type
57-
FROM all_synonyms#{db_link}
53+
SELECT table_owner, table_name, 'SYNONYM' name_type
54+
FROM all_synonyms
5855
WHERE owner = 'PUBLIC'
5956
AND synonym_name = '#{real_name}'
6057
SQL
6158
if result = _select_one(sql)
6259
case result["name_type"]
6360
when "SYNONYM"
64-
describe("#{result['owner'] && "#{result['owner']}."}#{result['table_name']}#{db_link}")
61+
describe("#{result['owner'] && "#{result['owner']}."}#{result['table_name']}")
6562
else
66-
db_link ? [result["owner"], result["table_name"], db_link] : [result["owner"], result["table_name"]]
63+
[result["owner"], result["table_name"]]
6764
end
6865
else
6966
raise OracleEnhanced::ConnectionException, %Q{"DESC #{name}" failed; does it exist?}

lib/active_record/connection_adapters/oracle_enhanced/schema_definitions.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def initialize(
3535
end
3636
end
3737

38-
class SynonymDefinition < Struct.new(:name, :table_owner, :table_name, :db_link) #:nodoc:
38+
class SynonymDefinition < Struct.new(:name, :table_owner, :table_name) #:nodoc:
3939
end
4040

4141
class IndexDefinition < ActiveRecord::ConnectionAdapters::IndexDefinition

lib/active_record/connection_adapters/oracle_enhanced/schema_dumper.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ def synonyms(stream)
4242
next if ignored? syn.name
4343
table_name = syn.table_name
4444
table_name = "#{syn.table_owner}.#{table_name}" if syn.table_owner
45-
table_name = "#{table_name}@#{syn.db_link}" if syn.db_link
4645
stream.print " add_synonym #{syn.name.inspect}, #{table_name.inspect}, force: true"
4746
stream.puts
4847
end

lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def table_exists?(table_name)
4848
end
4949

5050
def data_source_exists?(table_name)
51-
(_owner, table_name, _db_link) = @connection.describe(table_name)
51+
(_owner, table_name) = @connection.describe(table_name)
5252
true
5353
rescue
5454
false
@@ -69,18 +69,18 @@ def materialized_views #:nodoc:
6969
# get synonyms for schema dump
7070
def synonyms
7171
result = select_all(<<-SQL.strip.gsub(/\s+/, " "), "synonyms")
72-
SELECT synonym_name, table_owner, table_name, db_link
72+
SELECT synonym_name, table_owner, table_name
7373
FROM all_synonyms where owner = SYS_CONTEXT('userenv', 'session_user')
7474
SQL
7575

7676
result.collect do |row|
7777
OracleEnhanced::SynonymDefinition.new(oracle_downcase(row["synonym_name"]),
78-
oracle_downcase(row["table_owner"]), oracle_downcase(row["table_name"]), oracle_downcase(row["db_link"]))
78+
oracle_downcase(row["table_owner"]), oracle_downcase(row["table_name"]))
7979
end
8080
end
8181

8282
def indexes(table_name) #:nodoc:
83-
(owner, table_name, db_link) = @connection.describe(table_name)
83+
(owner, table_name) = @connection.describe(table_name)
8484
default_tablespace_name = default_tablespace
8585

8686
result = select_all(<<-SQL.strip.gsub(/\s+/, " "), "indexes", [bind_string("owner", owner), bind_string("owner", owner)])
@@ -89,11 +89,11 @@ def indexes(table_name) #:nodoc:
8989
LOWER(i.tablespace_name) AS tablespace_name,
9090
LOWER(c.column_name) AS column_name, e.column_expression,
9191
atc.virtual_column
92-
FROM all_indexes#{db_link} i
93-
JOIN all_ind_columns#{db_link} c ON c.index_name = i.index_name AND c.index_owner = i.owner
94-
LEFT OUTER JOIN all_ind_expressions#{db_link} e ON e.index_name = i.index_name AND
92+
FROM all_indexes i
93+
JOIN all_ind_columns c ON c.index_name = i.index_name AND c.index_owner = i.owner
94+
LEFT OUTER JOIN all_ind_expressions e ON e.index_name = i.index_name AND
9595
e.index_owner = i.owner AND e.column_position = c.column_position
96-
LEFT OUTER JOIN all_tab_cols#{db_link} atc ON i.table_name = atc.table_name AND
96+
LEFT OUTER JOIN all_tab_cols atc ON i.table_name = atc.table_name AND
9797
c.column_name = atc.column_name AND i.owner = atc.owner AND atc.hidden_column = 'NO'
9898
WHERE i.owner = :owner
9999
AND i.table_owner = :owner
@@ -114,7 +114,7 @@ def indexes(table_name) #:nodoc:
114114
procedure_name = default_datastore_procedure(row["index_name"])
115115
source = select_values(<<-SQL.strip.gsub(/\s+/, " "), "procedure", [bind_string("owner", owner), bind_string("procedure_name", procedure_name.upcase)]).join
116116
SELECT text
117-
FROM all_source#{db_link}
117+
FROM all_source
118118
WHERE owner = :owner
119119
AND name = :procedure_name
120120
ORDER BY line
@@ -343,9 +343,9 @@ def index_name(table_name, options) #:nodoc:
343343
#
344344
# Will always query database and not index cache.
345345
def index_name_exists?(table_name, index_name)
346-
(owner, table_name, db_link) = @connection.describe(table_name)
346+
(owner, table_name) = @connection.describe(table_name)
347347
result = select_value(<<-SQL.strip.gsub(/\s+/, " "), "index name exists")
348-
SELECT 1 FROM all_indexes#{db_link} i
348+
SELECT 1 FROM all_indexes i
349349
WHERE i.owner = '#{owner}'
350350
AND i.table_owner = '#{owner}'
351351
AND i.table_name = '#{table_name}'
@@ -465,9 +465,9 @@ def change_column_comment(table_name, column_name, comment) #:nodoc:
465465
end
466466

467467
def table_comment(table_name) #:nodoc:
468-
(owner, table_name, db_link) = @connection.describe(table_name)
468+
(owner, table_name) = @connection.describe(table_name)
469469
select_value(<<-SQL.strip.gsub(/\s+/, " "), "Table comment", [bind_string("owner", owner), bind_string("table_name", table_name)])
470-
SELECT comments FROM all_tab_comments#{db_link}
470+
SELECT comments FROM all_tab_comments
471471
WHERE owner = :owner
472472
AND table_name = :table_name
473473
SQL
@@ -481,9 +481,9 @@ def table_options(table_name) # :nodoc:
481481

482482
def column_comment(table_name, column_name) #:nodoc:
483483
# TODO: it does not exist in Abstract adapter
484-
(owner, table_name, db_link) = @connection.describe(table_name)
484+
(owner, table_name) = @connection.describe(table_name)
485485
select_value(<<-SQL.strip.gsub(/\s+/, " "), "Column comment", [bind_string("owner", owner), bind_string("table_name", table_name), bind_string("column_name", column_name.upcase)])
486-
SELECT comments FROM all_col_comments#{db_link}
486+
SELECT comments FROM all_col_comments
487487
WHERE owner = :owner
488488
AND table_name = :table_name
489489
AND column_name = :column_name
@@ -509,16 +509,16 @@ def tablespace(table_name)
509509

510510
# get table foreign keys for schema dump
511511
def foreign_keys(table_name) #:nodoc:
512-
(owner, desc_table_name, db_link) = @connection.describe(table_name)
512+
(owner, desc_table_name) = @connection.describe(table_name)
513513

514514
fk_info = select_all(<<-SQL.strip.gsub(/\s+/, " "), "Foreign Keys", [bind_string("owner", owner), bind_string("desc_table_name", desc_table_name)])
515515
SELECT r.table_name to_table
516516
,rc.column_name references_column
517517
,cc.column_name
518518
,c.constraint_name name
519519
,c.delete_rule
520-
FROM all_constraints#{db_link} c, all_cons_columns#{db_link} cc,
521-
all_constraints#{db_link} r, all_cons_columns#{db_link} rc
520+
FROM all_constraints c, all_cons_columns cc,
521+
all_constraints r, all_cons_columns rc
522522
WHERE c.owner = :owner
523523
AND c.table_name = :desc_table_name
524524
AND c.constraint_type = 'R'

lib/active_record/connection_adapters/oracle_enhanced_adapter.rb

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -427,8 +427,8 @@ def next_sequence_value(sequence_name)
427427
def prefetch_primary_key?(table_name = nil)
428428
return true if table_name.nil?
429429
table_name = table_name.to_s
430-
owner, desc_table_name, db_link = @connection.describe(table_name)
431-
do_not_prefetch = !has_primary_key?(table_name, owner, desc_table_name, db_link) || has_primary_key_trigger?(table_name, owner, desc_table_name, db_link)
430+
owner, desc_table_name = @connection.describe(table_name)
431+
do_not_prefetch = !has_primary_key?(table_name, owner, desc_table_name) || has_primary_key_trigger?(table_name, owner, desc_table_name)
432432
!do_not_prefetch
433433
end
434434

@@ -495,14 +495,14 @@ def default_tablespace
495495
end
496496

497497
# check if table has primary key trigger with _pkt suffix
498-
def has_primary_key_trigger?(table_name, owner = nil, desc_table_name = nil, db_link = nil)
499-
(owner, desc_table_name, db_link) = @connection.describe(table_name) unless owner
498+
def has_primary_key_trigger?(table_name, owner = nil, desc_table_name = nil)
499+
(owner, desc_table_name) = @connection.describe(table_name) unless owner
500500

501501
trigger_name = default_trigger_name(table_name).upcase
502502

503503
!!select_value(<<-SQL.strip.gsub(/\s+/, " "), "Primary Key Trigger", [bind_string("owner", owner), bind_string("trigger_name", trigger_name), bind_string("owner", owner), bind_string("table_name", desc_table_name)])
504504
SELECT trigger_name
505-
FROM all_triggers#{db_link}
505+
FROM all_triggers
506506
WHERE owner = :owner
507507
AND trigger_name = :trigger_name
508508
AND table_owner = :owner
@@ -512,7 +512,7 @@ def has_primary_key_trigger?(table_name, owner = nil, desc_table_name = nil, db_
512512
end
513513

514514
def column_definitions(table_name)
515-
(owner, desc_table_name, db_link) = @connection.describe(table_name)
515+
(owner, desc_table_name) = @connection.describe(table_name)
516516

517517
select_all(<<-SQL.strip.gsub(/\s+/, " "), "Column definitions", [bind_string("owner", owner), bind_string("table_name", desc_table_name)])
518518
SELECT cols.column_name AS name, cols.data_type AS sql_type,
@@ -526,7 +526,7 @@ def column_definitions(table_name)
526526
NULL) AS limit,
527527
DECODE(data_type, 'NUMBER', data_scale, NULL) AS scale,
528528
comments.comments as column_comment
529-
FROM all_tab_cols#{db_link} cols, all_col_comments#{db_link} comments
529+
FROM all_tab_cols cols, all_col_comments comments
530530
WHERE cols.owner = :owner
531531
AND cols.table_name = :table_name
532532
AND cols.hidden_column = 'NO'
@@ -539,20 +539,20 @@ def column_definitions(table_name)
539539

540540
# Find a table's primary key and sequence.
541541
# *Note*: Only primary key is implemented - sequence will be nil.
542-
def pk_and_sequence_for(table_name, owner = nil, desc_table_name = nil, db_link = nil) #:nodoc:
543-
(owner, desc_table_name, db_link) = @connection.describe(table_name) unless owner
542+
def pk_and_sequence_for(table_name, owner = nil, desc_table_name = nil) #:nodoc:
543+
(owner, desc_table_name) = @connection.describe(table_name) unless owner
544544

545545
seqs = select_values(<<-SQL.strip.gsub(/\s+/, " "), "Sequence", [bind_string("owner", owner), bind_string("sequence_name", default_sequence_name(desc_table_name).upcase)])
546546
select us.sequence_name
547-
from all_sequences#{db_link} us
547+
from all_sequences us
548548
where us.sequence_owner = :owner
549549
and us.sequence_name = :sequence_name
550550
SQL
551551

552552
# changed back from user_constraints to all_constraints for consistency
553553
pks = select_values(<<-SQL.strip.gsub(/\s+/, " "), "Primary Key", [bind_string("owner", owner), bind_string("table_name", desc_table_name)])
554554
SELECT cc.column_name
555-
FROM all_constraints#{db_link} c, all_cons_columns#{db_link} cc
555+
FROM all_constraints c, all_cons_columns cc
556556
WHERE c.owner = :owner
557557
AND c.table_name = :table_name
558558
AND c.constraint_type = 'P'
@@ -577,16 +577,16 @@ def primary_key(table_name)
577577
pk_and_sequence && pk_and_sequence.first
578578
end
579579

580-
def has_primary_key?(table_name, owner = nil, desc_table_name = nil, db_link = nil) #:nodoc:
581-
!pk_and_sequence_for(table_name, owner, desc_table_name, db_link).nil?
580+
def has_primary_key?(table_name, owner = nil, desc_table_name = nil) #:nodoc:
581+
!pk_and_sequence_for(table_name, owner, desc_table_name).nil?
582582
end
583583

584584
def primary_keys(table_name) # :nodoc:
585-
(owner, desc_table_name, db_link) = @connection.describe(table_name) unless owner
585+
(owner, desc_table_name) = @connection.describe(table_name) unless owner
586586

587587
pks = select_values(<<-SQL.strip.gsub(/\s+/, " "), "Primary Keys", [bind_string("owner", owner), bind_string("table_name", desc_table_name)])
588588
SELECT cc.column_name
589-
FROM all_constraints#{db_link} c, all_cons_columns#{db_link} cc
589+
FROM all_constraints c, all_cons_columns cc
590590
WHERE c.owner = :owner
591591
AND c.table_name = :table_name
592592
AND c.constraint_type = 'P'

spec/active_record/connection_adapters/oracle_enhanced/schema_dumper_spec.rb

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -252,13 +252,6 @@ def drop_test_posts_table
252252
expect(standard_dump).to match(/add_synonym "test_synonym", "schema_name.table_name", force: true/)
253253
end
254254

255-
it "should include synonym to other database table in schema dump" do
256-
schema_define do
257-
add_synonym :test_synonym, "table_name@link_name", force: true
258-
end
259-
expect(standard_dump).to match(/add_synonym "test_synonym", "table_name@link_name(\.[-A-Za-z0-9_]+)*", force: true/)
260-
end
261-
262255
it "should not include ignored table names in schema dump" do
263256
schema_define do
264257
add_synonym :test_synonym, "schema_name.table_name", force: true

spec/active_record/connection_adapters/oracle_enhanced/schema_statements_spec.rb

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1028,18 +1028,6 @@ class ::TestPost < ActiveRecord::Base
10281028
TestPost.create(title: "test")
10291029
end.not_to raise_error
10301030
end
1031-
1032-
it "should create synonym to table over database link" do
1033-
db_link = @db_link
1034-
schema_define do
1035-
add_synonym :synonym_to_posts, "test_posts@#{db_link}", force: true
1036-
add_synonym :synonym_to_posts_seq, "test_posts_seq@#{db_link}", force: true
1037-
end
1038-
expect do
1039-
TestPost.create(title: "test")
1040-
end.not_to raise_error
1041-
end
1042-
10431031
end
10441032

10451033
describe "alter columns with column cache" do

spec/active_record/connection_adapters/oracle_enhanced_adapter_spec.rb

Lines changed: 0 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -99,55 +99,6 @@ class ::TestEmployee2 < ActiveRecord::Base
9999
end
100100
end
101101

102-
describe "access table over database link" do
103-
before(:all) do
104-
@conn = ActiveRecord::Base.connection
105-
@db_link = "db_link"
106-
@sys_conn = ActiveRecord::Base.oracle_enhanced_connection(SYSTEM_CONNECTION_PARAMS)
107-
@sys_conn.drop_table :test_posts, if_exists: true
108-
@sys_conn.create_table :test_posts do |t|
109-
t.string :title
110-
# cannot update LOBs over database link
111-
t.string :body
112-
t.timestamps null: true
113-
end
114-
@db_link_username = SYSTEM_CONNECTION_PARAMS[:username]
115-
@db_link_password = SYSTEM_CONNECTION_PARAMS[:password]
116-
@db_link_database = SYSTEM_CONNECTION_PARAMS[:database]
117-
@conn.execute "DROP DATABASE LINK #{@db_link}" rescue nil
118-
@conn.execute "CREATE DATABASE LINK #{@db_link} CONNECT TO #{@db_link_username} IDENTIFIED BY \"#{@db_link_password}\" USING '#{@db_link_database}'"
119-
@conn.execute "CREATE OR REPLACE SYNONYM test_posts FOR test_posts@#{@db_link}"
120-
@conn.execute "CREATE OR REPLACE SYNONYM test_posts_seq FOR test_posts_seq@#{@db_link}"
121-
class ::TestPost < ActiveRecord::Base
122-
end
123-
TestPost.table_name = "test_posts"
124-
end
125-
126-
after(:all) do
127-
@conn.execute "DROP SYNONYM test_posts"
128-
@conn.execute "DROP SYNONYM test_posts_seq"
129-
@conn.execute "DROP DATABASE LINK #{@db_link}" rescue nil
130-
@sys_conn.drop_table :test_posts, if_exists: true
131-
Object.send(:remove_const, "TestPost") rescue nil
132-
ActiveRecord::Base.clear_cache!
133-
end
134-
135-
it "should verify database link" do
136-
@conn.select_value("select * from dual@#{@db_link}") == "X"
137-
end
138-
139-
it "should get column names" do
140-
expect(TestPost.column_names).to eq(["id", "title", "body", "created_at", "updated_at"])
141-
end
142-
143-
it "should create record" do
144-
p = TestPost.create(title: "Title", body: "Body")
145-
expect(p.id).not_to be_nil
146-
expect(TestPost.find(p.id)).not_to be_nil
147-
end
148-
149-
end
150-
151102
describe "session information" do
152103
before(:all) do
153104
@conn = ActiveRecord::Base.connection

0 commit comments

Comments
 (0)