activerecord-sqlserver-adapter 2.3.2 → 2.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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)
|