Skip to content

Commit f16c519

Browse files
committed
Merge branch 'Altonymous/master'
2 parents 7c5acd7 + 54186e4 commit f16c519

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

lib/active_record/connection_adapters/sqlserver/schema_statements.rb

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ def column_definitions(table_name)
165165
columns.ordinal_position,
166166
CASE
167167
WHEN columns.DATA_TYPE IN ('nchar','nvarchar') THEN columns.CHARACTER_MAXIMUM_LENGTH
168-
ELSE COL_LENGTH(columns.TABLE_SCHEMA+'.'+columns.TABLE_NAME, columns.COLUMN_NAME)
168+
ELSE COL_LENGTH('#{db_name_with_period}'+columns.TABLE_SCHEMA+'.'+columns.TABLE_NAME, columns.COLUMN_NAME)
169169
END AS [length],
170170
CASE
171171
WHEN columns.IS_NULLABLE = 'YES' THEN 1
@@ -175,19 +175,27 @@ def column_definitions(table_name)
175175
WHEN KCU.COLUMN_NAME IS NOT NULL AND TC.CONSTRAINT_TYPE = N'PRIMARY KEY' THEN 1
176176
ELSE NULL
177177
END AS [is_primary],
178-
CASE
179-
WHEN COLUMNPROPERTY(OBJECT_ID(columns.TABLE_SCHEMA+'.'+columns.TABLE_NAME), columns.COLUMN_NAME, 'IsIdentity') = 1 THEN 1
180-
ELSE NULL
181-
END AS [is_identity]
178+
c.is_identity AS [is_identity]
182179
FROM #{db_name_with_period}INFORMATION_SCHEMA.COLUMNS columns
183-
LEFT OUTER JOIN #{db_name_with_period}INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC
184-
ON TC.TABLE_NAME = columns.TABLE_NAME
185-
AND TC.CONSTRAINT_TYPE = N'PRIMARY KEY'
180+
LEFT OUTER JOIN #{db_name_with_period}INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC
181+
ON TC.TABLE_NAME = columns.TABLE_NAME
182+
AND TC.CONSTRAINT_TYPE = N'PRIMARY KEY'
186183
LEFT OUTER JOIN #{db_name_with_period}INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU
187184
ON KCU.COLUMN_NAME = columns.COLUMN_NAME
188185
AND KCU.CONSTRAINT_NAME = TC.CONSTRAINT_NAME
189186
AND KCU.CONSTRAINT_CATALOG = TC.CONSTRAINT_CATALOG
190187
AND KCU.CONSTRAINT_SCHEMA = TC.CONSTRAINT_SCHEMA
188+
INNER JOIN #{db_name_with_period}.sys.schemas AS s
189+
ON s.name = columns.TABLE_SCHEMA
190+
AND s.schema_id = s.schema_id
191+
INNER JOIN #{db_name_with_period}.sys.objects AS o
192+
ON s.schema_id = o.schema_id
193+
AND o.is_ms_shipped = 0
194+
AND o.type IN ('U', 'V')
195+
AND o.name = columns.TABLE_NAME
196+
INNER JOIN #{db_name_with_period}.sys.columns AS c
197+
ON o.object_id = c.object_id
198+
AND c.name = columns.COLUMN_NAME
191199
WHERE columns.TABLE_NAME = @0
192200
AND columns.TABLE_SCHEMA = #{table_schema.blank? ? "schema_name()" : "@1"}
193201
ORDER BY columns.ordinal_position
@@ -227,7 +235,6 @@ def column_definitions(table_name)
227235
end
228236
ci[:null] = ci[:is_nullable].to_i == 1 ; ci.delete(:is_nullable)
229237
ci[:is_primary] = ci[:is_primary].to_i == 1
230-
ci[:is_identity] = ci[:is_identity].to_i == 1
231238
ci
232239
end
233240
end

0 commit comments

Comments
 (0)