diff --git a/lib/active_record/connection_adapters/sqlserver/database_statements.rb b/lib/active_record/connection_adapters/sqlserver/database_statements.rb index 6185e5f1d..c5ebb342d 100644 --- a/lib/active_record/connection_adapters/sqlserver/database_statements.rb +++ b/lib/active_record/connection_adapters/sqlserver/database_statements.rb @@ -278,8 +278,12 @@ def drop_database(database) end end - def create_database(database) - do_execute "CREATE DATABASE #{quote_table_name(database)}" + def create_database(database, collation=@connection_options[:collation]) + if collation + do_execute "CREATE DATABASE #{quote_table_name(database)} COLLATE #{collation}" + else + do_execute "CREATE DATABASE #{quote_table_name(database)}" + end end def current_database diff --git a/test/cases/database_statements_test_sqlserver.rb b/test/cases/database_statements_test_sqlserver.rb new file mode 100644 index 000000000..3928b6c00 --- /dev/null +++ b/test/cases/database_statements_test_sqlserver.rb @@ -0,0 +1,48 @@ +require 'cases/sqlserver_helper' + +class DatabaseStatementsTestSqlserver < ActiveRecord::TestCase + + self.use_transactional_fixtures = false + + setup do + @connection = ActiveRecord::Base.connection + end + + should 'create database' do + @connection.create_database 'activerecord_unittest3' #, 'SQL_Latin1_General_CP1_CI_AS' + database_name = @connection.select_value "SELECT name FROM master.dbo.sysdatabases WHERE name = 'activerecord_unittest3'" + assert_equal 'activerecord_unittest3', database_name + end + + should 'drop database' do + @connection.drop_database 'activerecord_unittest3' + database_name = @connection.select_value "SELECT name FROM master.dbo.sysdatabases WHERE name = 'activerecord_unittest3'" + assert_equal nil, database_name + end + + context 'with collation' do + teardown do + @connection.drop_database 'activerecord_unittest3' + end + + should 'create database with default collation for the server' do + @connection.create_database 'activerecord_unittest3' + default_collation = @connection.select_value "SELECT SERVERPROPERTY('Collation')" + database_collation = @connection.select_value "SELECT DATABASEPROPERTYEX('activerecord_unittest3', 'Collation') SQLCollation" + assert_equal default_collation, database_collation + end + + should 'create database with collation set by the method' do + @connection.create_database 'activerecord_unittest3', 'SQL_Latin1_General_CP1_CI_AS' + collation = @connection.select_value "SELECT DATABASEPROPERTYEX('activerecord_unittest3', 'Collation') SQLCollation" + assert_equal 'SQL_Latin1_General_CP1_CI_AS', collation + end + + should 'create database with collation set by the config' do + @connection.instance_variable_get(:@connection_options)[:collation] = 'SQL_Latin1_General_CP1_CI_AS' + @connection.create_database 'activerecord_unittest3' + collation = @connection.select_value "SELECT DATABASEPROPERTYEX('activerecord_unittest3', 'Collation') SQLCollation" + assert_equal 'SQL_Latin1_General_CP1_CI_AS', collation + end + end +end diff --git a/test/config.yml b/test/config.yml index 553903d79..bd20e22f6 100644 --- a/test/config.yml +++ b/test/config.yml @@ -9,6 +9,7 @@ default_connection_info: &default_connection_info username: <%= ENV['ACTIVERECORD_UNITTEST_USER'] || 'rails' %> password: <%= ENV['ACTIVERECORD_UNITTEST_PASS'] || '' %> azure: <%= !ENV['ACTIVERECORD_UNITTEST_AZURE'].nil? %> + collation: <%= ENV['ACTIVERECORD_UNITTEST_COLLATION'] || nil %> connections: