mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Support collate and ctype on the PostgreSQL.
This commit is contained in:
parent
2596aeba5b
commit
138934fc81
4 changed files with 40 additions and 1 deletions
|
@ -916,7 +916,8 @@ module ActiveRecord
|
|||
end
|
||||
|
||||
# Create a new PostgreSQL database. Options include <tt>:owner</tt>, <tt>:template</tt>,
|
||||
# <tt>:encoding</tt>, <tt>:tablespace</tt>, and <tt>:connection_limit</tt> (note that MySQL uses
|
||||
# <tt>:encoding</tt>, <tt>:collate</tt>, <tt>:ctype</tt>,
|
||||
# <tt>:tablespace</tt>, and <tt>:connection_limit</tt> (note that MySQL uses
|
||||
# <tt>:charset</tt> while PostgreSQL uses <tt>:encoding</tt>).
|
||||
#
|
||||
# Example:
|
||||
|
@ -933,6 +934,10 @@ module ActiveRecord
|
|||
" TEMPLATE = \"#{value}\""
|
||||
when :encoding
|
||||
" ENCODING = '#{value}'"
|
||||
when :collate
|
||||
" LC_COLLATE = '#{value}'"
|
||||
when :ctype
|
||||
" LC_CTYPE = '#{value}'"
|
||||
when :tablespace
|
||||
" TABLESPACE = \"#{value}\""
|
||||
when :connection_limit
|
||||
|
@ -1059,6 +1064,20 @@ module ActiveRecord
|
|||
end_sql
|
||||
end
|
||||
|
||||
# Returns the current database collate.
|
||||
def collate
|
||||
query(<<-end_sql, 'SCHEMA')[0][0]
|
||||
SELECT pg_database.datcollate FROM pg_database WHERE pg_database.datname LIKE '#{current_database}'
|
||||
end_sql
|
||||
end
|
||||
|
||||
# Returns the current database ctype.
|
||||
def ctype
|
||||
query(<<-end_sql, 'SCHEMA')[0][0]
|
||||
SELECT pg_database.datctype FROM pg_database WHERE pg_database.datname LIKE '#{current_database}'
|
||||
end_sql
|
||||
end
|
||||
|
||||
# Returns an array of schema names.
|
||||
def schema_names
|
||||
query(<<-SQL, 'SCHEMA').flatten
|
||||
|
|
|
@ -21,6 +21,10 @@ class PostgresqlActiveSchemaTest < ActiveRecord::TestCase
|
|||
assert_equal %(CREATE DATABASE "aimonetti" ENCODING = 'latin1'), create_database(:aimonetti, :encoding => :latin1)
|
||||
end
|
||||
|
||||
def test_create_database_with_collate_and_ctype
|
||||
assert_equal %(CREATE DATABASE "aimonetti" ENCODING = 'UTF8' LC_COLLATE = 'ja_JP.UTF8' LC_CTYPE = 'ja_JP.UTF8'), create_database(:aimonetti, :encoding => :"UTF8", :collate => :"ja_JP.UTF8", :ctype => :"ja_JP.UTF8")
|
||||
end
|
||||
|
||||
def test_add_index
|
||||
# add_index calls index_name_exists? which can't work since execute is stubbed
|
||||
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.send(:define_method, :index_name_exists?) do |*|
|
||||
|
|
|
@ -21,6 +21,14 @@ module ActiveRecord
|
|||
assert_not_nil @connection.encoding
|
||||
end
|
||||
|
||||
def test_collate
|
||||
assert_not_nil @connection.collate
|
||||
end
|
||||
|
||||
def test_ctype
|
||||
assert_not_nil @connection.ctype
|
||||
end
|
||||
|
||||
def test_default_client_min_messages
|
||||
assert_equal "warning", @connection.client_min_messages
|
||||
end
|
||||
|
|
|
@ -38,6 +38,14 @@ module ActiveRecord
|
|||
merge('encoding' => 'latin')
|
||||
end
|
||||
|
||||
def test_creates_database_with_given_collate_and_ctype
|
||||
@connection.expects(:create_database).
|
||||
with('my-app-db', @configuration.merge('encoding' => 'utf8', 'collate' => 'ja_JP.UTF8', 'ctype' => 'ja_JP.UTF8'))
|
||||
|
||||
ActiveRecord::Tasks::DatabaseTasks.create @configuration.
|
||||
merge('collate' => 'ja_JP.UTF8', 'ctype' => 'ja_JP.UTF8')
|
||||
end
|
||||
|
||||
def test_establishes_connection_to_new_database
|
||||
ActiveRecord::Base.expects(:establish_connection).with(@configuration)
|
||||
|
||||
|
|
Loading…
Reference in a new issue