@@ -159,7 +159,7 @@ def simplified_datetime
159159 class SQLServerAdapter < AbstractAdapter
160160
161161 ADAPTER_NAME = 'SQLServer' . freeze
162- VERSION = '2.3.2 ' . freeze
162+ VERSION = '2.3.3 ' . freeze
163163 DATABASE_VERSION_REGEXP = /Microsoft SQL Server\s +(\d {4})/
164164 SUPPORTED_VERSIONS = [ 2000 , 2005 , 2008 ] . freeze
165165 LIMITABLE_TYPES = [ 'string' , 'integer' , 'float' , 'char' , 'nchar' , 'varchar' , 'nvarchar' ] . freeze
@@ -565,13 +565,13 @@ def tables(name = nil)
565565 end
566566
567567 def views ( name = nil )
568- @@ sqlserver_views_cache ||=
568+ @sqlserver_views_cache ||=
569569 info_schema_query { select_values ( "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME NOT IN ('sysconstraints','syssegments')" ) }
570570 end
571571
572572 def view_information ( table_name )
573573 table_name = unqualify_table_name ( table_name )
574- @@ sqlserver_view_information_cache [ table_name ] ||= begin
574+ @sqlserver_view_information_cache [ table_name ] ||= begin
575575 view_info = info_schema_query { select_one ( "SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = '#{ table_name } '" ) }
576576 if view_info
577577 if view_info [ 'VIEW_DEFINITION' ] . blank? || view_info [ 'VIEW_DEFINITION' ] . length == 4000
@@ -612,15 +612,15 @@ def indexes(table_name, name = nil)
612612 def columns ( table_name , name = nil )
613613 return [ ] if table_name . blank?
614614 cache_key = unqualify_table_name ( table_name )
615- @@ sqlserver_columns_cache [ cache_key ] ||= column_definitions ( table_name ) . collect do |ci |
615+ @sqlserver_columns_cache [ cache_key ] ||= column_definitions ( table_name ) . collect do |ci |
616616 sqlserver_options = ci . except ( :name , :default_value , :type , :null )
617617 SQLServerColumn . new ci [ :name ] , ci [ :default_value ] , ci [ :type ] , ci [ :null ] , sqlserver_options
618618 end
619619 end
620620
621621 def create_table ( table_name , options = { } )
622622 super
623- initialize_sqlserver_caches
623+ remove_sqlserver_columns_cache_for ( table_name )
624624 end
625625
626626 def rename_table ( table_name , new_name )
@@ -629,12 +629,12 @@ def rename_table(table_name, new_name)
629629
630630 def drop_table ( table_name , options = { } )
631631 super
632- initialize_sqlserver_caches
632+ remove_sqlserver_columns_cache_for ( table_name )
633633 end
634634
635635 def add_column ( table_name , column_name , type , options = { } )
636636 super
637- initialize_sqlserver_caches
637+ remove_sqlserver_columns_cache_for ( table_name )
638638 end
639639
640640 def remove_column ( table_name , *column_names )
@@ -644,7 +644,7 @@ def remove_column(table_name, *column_names)
644644 remove_indexes ( table_name , column_name )
645645 do_execute "ALTER TABLE #{ quote_table_name ( table_name ) } DROP COLUMN #{ quote_column_name ( column_name ) } "
646646 end
647- initialize_sqlserver_caches
647+ remove_sqlserver_columns_cache_for ( table_name )
648648 end
649649
650650 def change_column ( table_name , column_name , type , options = { } )
@@ -654,22 +654,23 @@ def change_column(table_name, column_name, type, options = {})
654654 change_column_sql << " NOT NULL" if options [ :null ] == false
655655 sql_commands << change_column_sql
656656 if options_include_default? ( options )
657+ remove_sqlserver_columns_cache_for ( table_name )
657658 sql_commands << "ALTER TABLE #{ quote_table_name ( table_name ) } ADD CONSTRAINT #{ default_name ( table_name , column_name ) } DEFAULT #{ quote ( options [ :default ] ) } FOR #{ quote_column_name ( column_name ) } "
658659 end
659660 sql_commands . each { |c | do_execute ( c ) }
660- initialize_sqlserver_caches
661+ remove_sqlserver_columns_cache_for ( table_name )
661662 end
662663
663664 def change_column_default ( table_name , column_name , default )
664665 remove_default_constraint ( table_name , column_name )
665666 do_execute "ALTER TABLE #{ quote_table_name ( table_name ) } ADD CONSTRAINT #{ default_name ( table_name , column_name ) } DEFAULT #{ quote ( default ) } FOR #{ quote_column_name ( column_name ) } "
666- initialize_sqlserver_caches
667+ remove_sqlserver_columns_cache_for ( table_name )
667668 end
668669
669670 def rename_column ( table_name , column_name , new_column_name )
670671 column_for ( table_name , column_name )
671672 do_execute "EXEC sp_rename '#{ table_name } .#{ column_name } ', '#{ new_column_name } ', 'COLUMN'"
672- initialize_sqlserver_caches
673+ remove_sqlserver_columns_cache_for ( table_name )
673674 end
674675
675676 def remove_index ( table_name , options = { } )
@@ -1016,10 +1017,16 @@ def sql_for_association_limiting?(sql)
10161017 end
10171018 end
10181019
1019- def initialize_sqlserver_caches
1020- @@sqlserver_columns_cache = { }
1021- @@sqlserver_views_cache = nil
1022- @@sqlserver_view_information_cache = { }
1020+ def remove_sqlserver_columns_cache_for ( table_name )
1021+ cache_key = unqualify_table_name ( table_name )
1022+ @sqlserver_columns_cache [ cache_key ] = nil
1023+ initialize_sqlserver_caches ( false )
1024+ end
1025+
1026+ def initialize_sqlserver_caches ( reset_columns = true )
1027+ @sqlserver_columns_cache = { } if reset_columns
1028+ @sqlserver_views_cache = nil
1029+ @sqlserver_view_information_cache = { }
10231030 end
10241031
10251032 def column_definitions ( table_name )
0 commit comments