activerecord-sqlserver-adapter 2.3.2 → 2.3.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +6 -0
- data/lib/active_record/connection_adapters/sqlserver_adapter.rb +22 -15
- metadata +1 -1
data/CHANGELOG
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
|
2
2
|
MASTER
|
3
3
|
|
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
|
+
|
4
10
|
2.3.2
|
5
11
|
|
6
12
|
* Insert queries that include the word "insert" as a partial column name with the word
|
@@ -159,7 +159,7 @@ module ActiveRecord
|
|
159
159
|
class SQLServerAdapter < AbstractAdapter
|
160
160
|
|
161
161
|
ADAPTER_NAME = 'SQLServer'.freeze
|
162
|
-
VERSION = '2.3.
|
162
|
+
VERSION = '2.3.3'.freeze
|
163
163
|
DATABASE_VERSION_REGEXP = /Microsoft SQL Server\s+(\d{4})/
|
164
164
|
SUPPORTED_VERSIONS = [2000,2005,2008].freeze
|
165
165
|
LIMITABLE_TYPES = ['string','integer','float','char','nchar','varchar','nvarchar'].freeze
|
@@ -565,13 +565,13 @@ module ActiveRecord
|
|
565
565
|
end
|
566
566
|
|
567
567
|
def views(name = nil)
|
568
|
-
|
568
|
+
@sqlserver_views_cache ||=
|
569
569
|
info_schema_query { select_values("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME NOT IN ('sysconstraints','syssegments')") }
|
570
570
|
end
|
571
571
|
|
572
572
|
def view_information(table_name)
|
573
573
|
table_name = unqualify_table_name(table_name)
|
574
|
-
|
574
|
+
@sqlserver_view_information_cache[table_name] ||= begin
|
575
575
|
view_info = info_schema_query { select_one("SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = '#{table_name}'") }
|
576
576
|
if view_info
|
577
577
|
if view_info['VIEW_DEFINITION'].blank? || view_info['VIEW_DEFINITION'].length == 4000
|
@@ -612,7 +612,7 @@ module ActiveRecord
|
|
612
612
|
def columns(table_name, name = nil)
|
613
613
|
return [] if table_name.blank?
|
614
614
|
cache_key = unqualify_table_name(table_name)
|
615
|
-
|
615
|
+
@sqlserver_columns_cache[cache_key] ||= column_definitions(table_name).collect do |ci|
|
616
616
|
sqlserver_options = ci.except(:name,:default_value,:type,:null)
|
617
617
|
SQLServerColumn.new ci[:name], ci[:default_value], ci[:type], ci[:null], sqlserver_options
|
618
618
|
end
|
@@ -620,7 +620,7 @@ module ActiveRecord
|
|
620
620
|
|
621
621
|
def create_table(table_name, options = {})
|
622
622
|
super
|
623
|
-
|
623
|
+
remove_sqlserver_columns_cache_for(table_name)
|
624
624
|
end
|
625
625
|
|
626
626
|
def rename_table(table_name, new_name)
|
@@ -629,12 +629,12 @@ module ActiveRecord
|
|
629
629
|
|
630
630
|
def drop_table(table_name, options = {})
|
631
631
|
super
|
632
|
-
|
632
|
+
remove_sqlserver_columns_cache_for(table_name)
|
633
633
|
end
|
634
634
|
|
635
635
|
def add_column(table_name, column_name, type, options = {})
|
636
636
|
super
|
637
|
-
|
637
|
+
remove_sqlserver_columns_cache_for(table_name)
|
638
638
|
end
|
639
639
|
|
640
640
|
def remove_column(table_name, *column_names)
|
@@ -644,7 +644,7 @@ module ActiveRecord
|
|
644
644
|
remove_indexes(table_name, column_name)
|
645
645
|
do_execute "ALTER TABLE #{quote_table_name(table_name)} DROP COLUMN #{quote_column_name(column_name)}"
|
646
646
|
end
|
647
|
-
|
647
|
+
remove_sqlserver_columns_cache_for(table_name)
|
648
648
|
end
|
649
649
|
|
650
650
|
def change_column(table_name, column_name, type, options = {})
|
@@ -654,22 +654,23 @@ module ActiveRecord
|
|
654
654
|
change_column_sql << " NOT NULL" if options[:null] == false
|
655
655
|
sql_commands << change_column_sql
|
656
656
|
if options_include_default?(options)
|
657
|
+
remove_sqlserver_columns_cache_for(table_name)
|
657
658
|
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)}"
|
658
659
|
end
|
659
660
|
sql_commands.each { |c| do_execute(c) }
|
660
|
-
|
661
|
+
remove_sqlserver_columns_cache_for(table_name)
|
661
662
|
end
|
662
663
|
|
663
664
|
def change_column_default(table_name, column_name, default)
|
664
665
|
remove_default_constraint(table_name, column_name)
|
665
666
|
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
|
-
|
667
|
+
remove_sqlserver_columns_cache_for(table_name)
|
667
668
|
end
|
668
669
|
|
669
670
|
def rename_column(table_name, column_name, new_column_name)
|
670
671
|
column_for(table_name,column_name)
|
671
672
|
do_execute "EXEC sp_rename '#{table_name}.#{column_name}', '#{new_column_name}', 'COLUMN'"
|
672
|
-
|
673
|
+
remove_sqlserver_columns_cache_for(table_name)
|
673
674
|
end
|
674
675
|
|
675
676
|
def remove_index(table_name, options = {})
|
@@ -1016,10 +1017,16 @@ module ActiveRecord
|
|
1016
1017
|
end
|
1017
1018
|
end
|
1018
1019
|
|
1019
|
-
def
|
1020
|
-
|
1021
|
-
|
1022
|
-
|
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 = {}
|
1023
1030
|
end
|
1024
1031
|
|
1025
1032
|
def column_definitions(table_name)
|