@@ -44,16 +44,31 @@ def indexes(table_name, name = nil)
4444
4545 def columns ( table_name , name = nil )
4646 return [ ] if table_name . blank?
47- column_definitions ( table_name ) . collect do |ci |
47+ @sqlserver_columns_cache [ table_name ] ||= column_definitions ( table_name ) . collect do |ci |
4848 sqlserver_options = ci . except ( :name , :default_value , :type , :null ) . merge ( :database_year => database_year )
4949 SQLServerColumn . new ci [ :name ] , ci [ :default_value ] , ci [ :type ] , ci [ :null ] , sqlserver_options
5050 end
5151 end
5252
53+ def create_table ( table_name , options = { } )
54+ super
55+ clear_cache!
56+ end
57+
5358 def rename_table ( table_name , new_name )
5459 do_execute "EXEC sp_rename '#{ table_name } ', '#{ new_name } '"
5560 end
61+
62+ def drop_table ( table_name , options = { } )
63+ super
64+ clear_cache!
65+ end
5666
67+ def add_column ( table_name , column_name , type , options = { } )
68+ super
69+ clear_cache!
70+ end
71+
5772 def remove_column ( table_name , *column_names )
5873 raise ArgumentError . new ( "You must specify at least one column name. Example: remove_column(:people, :first_name)" ) if column_names . empty?
5974 column_names . flatten . each do |column_name |
@@ -62,6 +77,7 @@ def remove_column(table_name, *column_names)
6277 remove_indexes ( table_name , column_name )
6378 do_execute "ALTER TABLE #{ quote_table_name ( table_name ) } DROP COLUMN #{ quote_column_name ( column_name ) } "
6479 end
80+ clear_cache!
6581 end
6682
6783 def change_column ( table_name , column_name , type , options = { } )
@@ -77,16 +93,19 @@ def change_column(table_name, column_name, type, options = {})
7793 sql_commands << "ALTER TABLE #{ quote_table_name ( table_name ) } ADD CONSTRAINT #{ default_constraint_name ( table_name , column_name ) } DEFAULT #{ quote ( options [ :default ] ) } FOR #{ quote_column_name ( column_name ) } "
7894 end
7995 sql_commands . each { |c | do_execute ( c ) }
96+ clear_cache!
8097 end
8198
8299 def change_column_default ( table_name , column_name , default )
83100 remove_default_constraint ( table_name , column_name )
84101 do_execute "ALTER TABLE #{ quote_table_name ( table_name ) } ADD CONSTRAINT #{ default_constraint_name ( table_name , column_name ) } DEFAULT #{ quote ( default ) } FOR #{ quote_column_name ( column_name ) } "
102+ clear_cache!
85103 end
86104
87105 def rename_column ( table_name , column_name , new_column_name )
88106 detect_column_for! ( table_name , column_name )
89107 do_execute "EXEC sp_rename '#{ table_name } .#{ column_name } ', '#{ new_column_name } ', 'COLUMN'"
108+ clear_cache!
90109 end
91110
92111 def remove_index! ( table_name , index_name )
@@ -335,6 +354,7 @@ def views_real_column_name(table_name,column_name)
335354 # === SQLServer Specific (Column/View Caches) =================== #
336355
337356 def initialize_sqlserver_caches
357+ @sqlserver_columns_cache = { }
338358 @sqlserver_views_cache = nil
339359 @sqlserver_view_information_cache = { }
340360 @sqlserver_quoted_column_and_table_names = { }
0 commit comments