Skip to content

Instantly share code, notes, and snippets.

@gnarfle
Created October 28, 2011 14:01
Show Gist options
  • Save gnarfle/1322335 to your computer and use it in GitHub Desktop.
Save gnarfle/1322335 to your computer and use it in GitHub Desktop.
primary key support for sqlserver adapter
diff --git a/lib/active_record/connection_adapters/sqlserver/schema_statements.rb b/lib/active_record/connection_adapters/sqlserver/schema_statements.rb
index 2e490a1..b2b6a87 100644
--- a/lib/active_record/connection_adapters/sqlserver/schema_statements.rb
+++ b/lib/active_record/connection_adapters/sqlserver/schema_statements.rb
@@ -193,10 +193,13 @@ module ActiveRecord
ELSE NULL
END AS [is_nullable],
CASE
- WHEN CCU.COLUMN_NAME IS NOT NULL AND TC.CONSTRAINT_TYPE = N'PRIMARY KEY' THEN 1
WHEN COLUMNPROPERTY(OBJECT_ID(columns.TABLE_SCHEMA+'.'+columns.TABLE_NAME), columns.COLUMN_NAME, 'IsIdentity') = 1 THEN 1
ELSE NULL
- END AS [is_identity]
+ END AS [is_identity],
+ CASE
+ WHEN CCU.COLUMN_NAME IS NOT NULL AND TC.CONSTRAINT_TYPE = N'PRIMARY KEY' THEN 1
+ ELSE NULL
+ END AS [is_primary_key]
FROM #{db_name_with_period}INFORMATION_SCHEMA.COLUMNS columns
LEFT OUTER JOIN #{db_name_with_period}INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC ON TC.TABLE_NAME = columns.TABLE_NAME AND TC.CONSTRAINT_TYPE = N'PRIMARY KEY'
LEFT OUTER JOIN #{db_name_with_period}INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS CCU ON TC.CONSTRAINT_NAME = CCU.CONSTRAINT_NAME AND CCU.COLUMN_NAME = columns.COLUMN_NAME
@@ -240,6 +243,7 @@ module ActiveRecord
end
ci[:null] = ci[:is_nullable].to_i == 1 ; ci.delete(:is_nullable)
ci[:is_identity] = ci[:is_identity].to_i == 1
+ ci[:is_primary_key] = ci[:is_primary_key].to_i == 1
ci
end
end
@@ -389,7 +393,7 @@ module ActiveRecord
end
def identity_column(table_name)
- columns(table_name).detect(&:primary) || columns(table_name).detect(&:is_identity?)
+ columns(table_name).detect(&:is_identity?)
end
end
diff --git a/lib/active_record/connection_adapters/sqlserver/version.rb b/lib/active_record/connection_adapters/sqlserver/version.rb
index ac48b9c..4ab2d25 100644
--- a/lib/active_record/connection_adapters/sqlserver/version.rb
+++ b/lib/active_record/connection_adapters/sqlserver/version.rb
@@ -3,7 +3,7 @@ module ActiveRecord
module Sqlserver
module Version
- VERSION = '3.1.2'.freeze
+ VERSION = '3.1.2'
end
end
diff --git a/lib/active_record/connection_adapters/sqlserver_adapter.rb b/lib/active_record/connection_adapters/sqlserver_adapter.rb
index f47f78c..f9f74de 100644
--- a/lib/active_record/connection_adapters/sqlserver_adapter.rb
+++ b/lib/active_record/connection_adapters/sqlserver_adapter.rb
@@ -53,7 +53,7 @@ module ActiveRecord
def initialize(name, default, sql_type = nil, null = true, sqlserver_options = {})
@sqlserver_options = sqlserver_options.symbolize_keys
super(name, default, sql_type, null)
- @primary = @sqlserver_options[:is_identity]
+ @primary = @sqlserver_options[:is_primary_key]
end
class << self
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment