Skip to content

Commit 76973a6

Browse files
committed
Fix rake task to work with 0.9. Schema reflection changes for better schema support.
1 parent 9e3c468 commit 76973a6

File tree

6 files changed

+13
-19
lines changed

6 files changed

+13
-19
lines changed

Rakefile

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
require 'rake'
22
require 'rake/testtask'
3-
require 'rake/rdoctask'
43

54
# Notes for cross compile:
65
# $ gcla ; bundle install ; rake compile ; rake cross compile ; rake cross native gem
@@ -17,7 +16,7 @@ def test_files
1716
unless ENV['ACTIVERECORD_UNITTEST_SKIP']
1817
ar_cases = Dir.glob("#{ENV['RAILS_SOURCE']}/activerecord/test/cases/**/*_test.rb")
1918
adapter_cases = Dir.glob("#{ENV['RAILS_SOURCE']}/activerecord/test/cases/adapters/**/*_test.rb")
20-
files << (ar_cases-adapter_cases).sort
19+
files += (ar_cases-adapter_cases).sort
2120
end
2221
files
2322
end

lib/active_record/connection_adapters/sqlserver/database_statements.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ def do_exec_query(sql, name, binds)
237237
next if ar_column && column.sql_type == 'timestamp'
238238
v = value
239239
names_and_types << if ar_column
240-
v = value.to_i if column.is_integer?
240+
v = value.to_i if column.is_integer? && value.present?
241241
"@#{index} #{column.sql_type_for_statement}"
242242
elsif column.acts_like?(:string)
243243
"@#{index} nvarchar(max)"

lib/active_record/connection_adapters/sqlserver/quoting.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ module Quoting
88
def quote(value, column = nil)
99
case value
1010
when String, ActiveSupport::Multibyte::Chars
11-
if column && column.type == :binary
11+
if column && column.type == :integer && value.blank?
12+
nil
13+
elsif column && column.type == :binary
1214
column.class.string_to_binary(value)
1315
elsif value.is_utf8? || (column && column.type == :string)
1416
"N'#{quote_string(value)}'"

lib/active_record/connection_adapters/sqlserver/schema_statements.rb

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,20 @@ def native_database_types
77
@native_database_types ||= initialize_native_database_types.freeze
88
end
99

10-
def tables(name = nil, schema = nil)
10+
def tables(name = nil, table_type = 'BASE TABLE')
1111
info_schema_query do
12-
select_values "SELECT #{lowercase_schema_reflection_sql('TABLE_NAME')} FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME <> 'dtproperties' AND TABLE_SCHEMA = #{schema.blank? ? "schema_name()" : "#{quote(schema)}"}"
12+
select_values "SELECT #{lowercase_schema_reflection_sql('TABLE_NAME')} FROM INFORMATION_SCHEMA.TABLES #{"WHERE TABLE_TYPE = '#{table_type}'" if table_type} ORDER BY TABLE_NAME"
1313
end
1414
end
15-
16-
def tables_in_schema(table_schema)
17-
table_schema.blank? ? [] : tables(nil,table_schema)
18-
end
1915

2016
def table_exists?(table_name)
21-
table_schema = unqualify_table_schema(table_name)
2217
unquoted_table_name = unqualify_table_name(table_name)
23-
super || tables.include?(unquoted_table_name) || views.include?(unquoted_table_name) || tables_in_schema(table_schema).include?(unquoted_table_name)
18+
super || tables.include?(unquoted_table_name) || views.include?(unquoted_table_name)
2419
end
2520

2621
def indexes(table_name, name = nil)
27-
unquoted_table_name = unqualify_table_name(table_name)
28-
select("EXEC sp_helpindex #{quote_table_name(unquoted_table_name)}",name).inject([]) do |indexes,index|
22+
data = select("EXEC sp_helpindex #{quote(table_name)}",name) rescue []
23+
data.inject([]) do |indexes,index|
2924
index = index.with_indifferent_access
3025
if index[:index_description] =~ /primary key/
3126
indexes
@@ -141,8 +136,7 @@ def change_column_null(table_name, column_name, null, default = nil)
141136
# === SQLServer Specific ======================================== #
142137

143138
def views(name = nil)
144-
@sqlserver_views_cache ||=
145-
info_schema_query { select_values("SELECT #{lowercase_schema_reflection_sql('TABLE_NAME')} FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME NOT IN ('sysconstraints','syssegments')") }
139+
@sqlserver_views_cache ||= tables(name,'VIEW')
146140
end
147141

148142

lib/active_record/connection_adapters/sqlserver_adapter.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,11 @@ def is_identity?
7272
end
7373

7474
def is_utf8?
75-
@sql_type =~ /nvarchar|ntext|nchar/i
75+
!!(@sql_type =~ /nvarchar|ntext|nchar/i)
7676
end
7777

7878
def is_integer?
79-
@sql_type =~ /int/i
79+
!!(@sql_type =~ /int/i)
8080
end
8181

8282
def sql_type_for_statement

test/cases/schema_test_sqlserver.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ def read_schema_name(table_name)
2222
context 'When table is in non-dbo schema' do
2323

2424
should 'work with #table_exists?' do
25-
assert @connection.tables_in_schema('test').include?('sql_server_schema_natural_id')
2625
assert @connection.table_exists?('test.sql_server_schema_natural_id')
2726
end
2827

0 commit comments

Comments
 (0)