Skip to content

Commit 09929cb

Browse files
committed
Adds support for setting the table name of a model to a different database db.dbo.table_name fixes coluns and table quoting to handle this case [#2 state:resolved]
1 parent 2a96401 commit 09929cb

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

lib/active_record/connection_adapters/sqlserver_adapter.rb

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -337,8 +337,10 @@ def select_rows(sql, name = nil)
337337

338338
def columns(table_name, name = nil)
339339
return [] if table_name.blank?
340-
table_name = table_name.to_s.split('.')[-1]
340+
table_names = table_name.to_s.split('.')
341+
table_name = table_names[-1]
341342
table_name = table_name.gsub(/[\[\]]/, '')
343+
db_name = "#{table_names[0]}." if table_names.length==3
342344
sql = %{
343345
SELECT
344346
columns.COLUMN_NAME as name,
@@ -362,7 +364,7 @@ def columns(table_name, name = nil)
362364
WHEN COLUMNPROPERTY(OBJECT_ID(columns.TABLE_NAME), columns.COLUMN_NAME, 'IsIdentity') = 0 THEN NULL
363365
ELSE 1
364366
END is_identity
365-
FROM INFORMATION_SCHEMA.COLUMNS columns
367+
FROM #{db_name}INFORMATION_SCHEMA.COLUMNS columns
366368
LEFT OUTER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS primary_key_constraints ON (
367369
primary_key_constraints.table_name = columns.table_name
368370
AND primary_key_constraints.constraint_type = 'PRIMARY KEY'
@@ -467,6 +469,16 @@ def quote_string(string)
467469
string.gsub(/\'/, "''")
468470
end
469471

472+
def quote_table_name(name)
473+
if name.split(".").length == 3
474+
b=name.split(".")
475+
"[#{b[0]}].[#{b[1]}].[#{b[2]}]"
476+
else
477+
super(name)
478+
end
479+
480+
end
481+
470482
def quote_column_name(name)
471483
"[#{name}]"
472484
end

0 commit comments

Comments
 (0)