Skip to content

Commit 55d7a18

Browse files
committed
Revert #ad83df82 and again cache column information at the connection's instance. The previous commit was causing all sorts of view and schema reflection problems.
1 parent 99f94d1 commit 55d7a18

File tree

3 files changed

+29
-16
lines changed

3 files changed

+29
-16
lines changed

CHANGELOG

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11

22
MASTER
33

4+
2.3.3
5+
6+
* Revert #ad83df82 and again cache column information at the connection's instance. The
7+
previous commit was causing all sorts of view and schema reflection problems. [Ken Collins]
8+
9+
410
2.3.2
511

612
* Insert queries that include the word "insert" as a partial column name with the word

activerecord-sqlserver-adapter.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Gem::Specification.new do |s|
22
s.name = "activerecord-sqlserver-adapter"
3-
s.version = "2.3.2"
3+
s.version = "2.3.3"
44
s.date = "2010-02-15"
55
s.summary = "SQL Server 2000, 2005 and 2008 Adapter For Rails."
66
s.email = "ken@metaskills.net"

lib/active_record/connection_adapters/sqlserver_adapter.rb

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)