Skip to content

Commit 6f9d63e

Browse files
jonbellmetaskills
authored andcommitted
Filter table constraints with matching table schema to column.
1 parent b4d5992 commit 6f9d63e

File tree

3 files changed

+25
-0
lines changed

3 files changed

+25
-0
lines changed

lib/active_record/connection_adapters/sqlserver/schema_statements.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,7 @@ def column_definitions(table_name)
326326
FROM #{database}.INFORMATION_SCHEMA.COLUMNS columns
327327
LEFT OUTER JOIN #{database}.INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC
328328
ON TC.TABLE_NAME = columns.TABLE_NAME
329+
AND TC.TABLE_SCHEMA = columns.TABLE_SCHEMA
329330
AND TC.CONSTRAINT_TYPE = N'PRIMARY KEY'
330331
LEFT OUTER JOIN #{database}.INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU
331332
ON KCU.COLUMN_NAME = columns.COLUMN_NAME

test/cases/specific_schema_test_sqlserver.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,4 +165,12 @@ def quoted_id
165165
db_uuid.must_match(acceptable_uuid)
166166
end
167167

168+
# with similar table definition in two schemas
169+
170+
it 'returns the correct primary columns' do
171+
connection = ActiveRecord::Base.connection
172+
assert_equal 'field_1', connection.columns('test.sst_schema_test_mulitple_schema').detect(&:is_primary?).name
173+
assert_equal 'field_2', connection.columns('test2.sst_schema_test_mulitple_schema').detect(&:is_primary?).name
174+
end
175+
168176
end

test/schema/sqlserver_specific_schema.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,4 +204,20 @@
204204
)
205205
NATURALPKTABLESQLINOTHERSCHEMA
206206

207+
execute "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'sst_schema_test_mulitple_schema' and TABLE_SCHEMA = 'test') DROP TABLE test.sst_schema_test_mulitple_schema"
208+
execute <<-SCHEMATESTMULTIPLESCHEMA
209+
CREATE TABLE test.sst_schema_test_mulitple_schema(
210+
field_1 int NOT NULL PRIMARY KEY,
211+
field_2 int,
212+
)
213+
SCHEMATESTMULTIPLESCHEMA
214+
execute "IF NOT EXISTS(SELECT * FROM sys.schemas WHERE name = 'test2') EXEC sp_executesql N'CREATE SCHEMA test2'"
215+
execute "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'sst_schema_test_mulitple_schema' and TABLE_SCHEMA = 'test2') DROP TABLE test2.sst_schema_test_mulitple_schema"
216+
execute <<-SCHEMATESTMULTIPLESCHEMA
217+
CREATE TABLE test2.sst_schema_test_mulitple_schema(
218+
field_1 int,
219+
field_2 int NOT NULL PRIMARY KEY,
220+
)
221+
SCHEMATESTMULTIPLESCHEMA
222+
207223
end

0 commit comments

Comments
 (0)