Skip to content

Commit 2754936

Browse files
author
Anna Carey
committed
2 parents f9b2c9a + 765e6c5 commit 2754936

File tree

3 files changed

+55
-2
lines changed

3 files changed

+55
-2
lines changed

lib/active_record/connection_adapters/sqlserver/database_statements.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,8 +282,12 @@ def drop_database(database)
282282
end
283283
end
284284

285-
def create_database(database)
286-
do_execute "CREATE DATABASE #{quote_table_name(database)}"
285+
def create_database(database, collation=@connection_options[:collation])
286+
if collation
287+
do_execute "CREATE DATABASE #{quote_table_name(database)} COLLATE #{collation}"
288+
else
289+
do_execute "CREATE DATABASE #{quote_table_name(database)}"
290+
end
287291
end
288292

289293
def current_database
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
require 'cases/sqlserver_helper'
2+
3+
class DatabaseStatementsTestSqlserver < ActiveRecord::TestCase
4+
5+
self.use_transactional_fixtures = false
6+
7+
setup do
8+
@connection = ActiveRecord::Base.connection
9+
end
10+
11+
should 'create database' do
12+
@connection.create_database 'activerecord_unittest3' #, 'SQL_Latin1_General_CP1_CI_AS'
13+
database_name = @connection.select_value "SELECT name FROM master.dbo.sysdatabases WHERE name = 'activerecord_unittest3'"
14+
assert_equal 'activerecord_unittest3', database_name
15+
end
16+
17+
should 'drop database' do
18+
@connection.drop_database 'activerecord_unittest3'
19+
database_name = @connection.select_value "SELECT name FROM master.dbo.sysdatabases WHERE name = 'activerecord_unittest3'"
20+
assert_equal nil, database_name
21+
end
22+
23+
context 'with collation' do
24+
teardown do
25+
@connection.drop_database 'activerecord_unittest3'
26+
end
27+
28+
should 'create database with default collation for the server' do
29+
@connection.create_database 'activerecord_unittest3'
30+
default_collation = @connection.select_value "SELECT SERVERPROPERTY('Collation')"
31+
database_collation = @connection.select_value "SELECT DATABASEPROPERTYEX('activerecord_unittest3', 'Collation') SQLCollation"
32+
assert_equal default_collation, database_collation
33+
end
34+
35+
should 'create database with collation set by the method' do
36+
@connection.create_database 'activerecord_unittest3', 'SQL_Latin1_General_CP1_CI_AS'
37+
collation = @connection.select_value "SELECT DATABASEPROPERTYEX('activerecord_unittest3', 'Collation') SQLCollation"
38+
assert_equal 'SQL_Latin1_General_CP1_CI_AS', collation
39+
end
40+
41+
should 'create database with collation set by the config' do
42+
@connection.instance_variable_get(:@connection_options)[:collation] = 'SQL_Latin1_General_CP1_CI_AS'
43+
@connection.create_database 'activerecord_unittest3'
44+
collation = @connection.select_value "SELECT DATABASEPROPERTYEX('activerecord_unittest3', 'Collation') SQLCollation"
45+
assert_equal 'SQL_Latin1_General_CP1_CI_AS', collation
46+
end
47+
end
48+
end

test/config.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ default_connection_info: &default_connection_info
99
username: <%= ENV['ACTIVERECORD_UNITTEST_USER'] || 'rails' %>
1010
password: <%= ENV['ACTIVERECORD_UNITTEST_PASS'] || '' %>
1111
azure: <%= !ENV['ACTIVERECORD_UNITTEST_AZURE'].nil? %>
12+
collation: <%= ENV['ACTIVERECORD_UNITTEST_COLLATION'] || nil %>
1213

1314
connections:
1415

0 commit comments

Comments
 (0)