-
Notifications
You must be signed in to change notification settings - Fork 21.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
pg, extract schema definitions into separate file.
This mirrors the layout of abstract adapter and puts the definitions inside the `PostgreSQL` namespace (no longer under the adapter namespace). /cc @kares
- Loading branch information
Showing
2 changed files
with
141 additions
and
135 deletions.
There are no files selected for viewing
138 changes: 138 additions & 0 deletions
138
activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,138 @@ | ||
module ActiveRecord | ||
module ConnectionAdapters | ||
module PostgreSQL | ||
module ColumnMethods | ||
def xml(*args) | ||
options = args.extract_options! | ||
column(args[0], 'xml', options) | ||
end | ||
|
||
def tsvector(*args) | ||
options = args.extract_options! | ||
column(args[0], 'tsvector', options) | ||
end | ||
|
||
def int4range(name, options = {}) | ||
column(name, 'int4range', options) | ||
end | ||
|
||
def int8range(name, options = {}) | ||
column(name, 'int8range', options) | ||
end | ||
|
||
def tsrange(name, options = {}) | ||
column(name, 'tsrange', options) | ||
end | ||
|
||
def tstzrange(name, options = {}) | ||
column(name, 'tstzrange', options) | ||
end | ||
|
||
def numrange(name, options = {}) | ||
column(name, 'numrange', options) | ||
end | ||
|
||
def daterange(name, options = {}) | ||
column(name, 'daterange', options) | ||
end | ||
|
||
def hstore(name, options = {}) | ||
column(name, 'hstore', options) | ||
end | ||
|
||
def ltree(name, options = {}) | ||
column(name, 'ltree', options) | ||
end | ||
|
||
def inet(name, options = {}) | ||
column(name, 'inet', options) | ||
end | ||
|
||
def cidr(name, options = {}) | ||
column(name, 'cidr', options) | ||
end | ||
|
||
def macaddr(name, options = {}) | ||
column(name, 'macaddr', options) | ||
end | ||
|
||
def uuid(name, options = {}) | ||
column(name, 'uuid', options) | ||
end | ||
|
||
def json(name, options = {}) | ||
column(name, 'json', options) | ||
end | ||
|
||
def citext(name, options = {}) | ||
column(name, 'citext', options) | ||
end | ||
end | ||
|
||
class ColumnDefinition < ActiveRecord::ConnectionAdapters::ColumnDefinition | ||
attr_accessor :array | ||
end | ||
|
||
class TableDefinition < ActiveRecord::ConnectionAdapters::TableDefinition | ||
include ColumnMethods | ||
|
||
# Defines the primary key field. | ||
# Use of the native PostgreSQL UUID type is supported, and can be used | ||
# by defining your tables as such: | ||
# | ||
# create_table :stuffs, id: :uuid do |t| | ||
# t.string :content | ||
# t.timestamps | ||
# end | ||
# | ||
# By default, this will use the +uuid_generate_v4()+ function from the | ||
# +uuid-ossp+ extension, which MUST be enabled on your database. To enable | ||
# the +uuid-ossp+ extension, you can use the +enable_extension+ method in your | ||
# migrations. To use a UUID primary key without +uuid-ossp+ enabled, you can | ||
# set the +:default+ option to +nil+: | ||
# | ||
# create_table :stuffs, id: false do |t| | ||
# t.primary_key :id, :uuid, default: nil | ||
# t.uuid :foo_id | ||
# t.timestamps | ||
# end | ||
# | ||
# You may also pass a different UUID generation function from +uuid-ossp+ | ||
# or another library. | ||
# | ||
# Note that setting the UUID primary key default value to +nil+ will | ||
# require you to assure that you always provide a UUID value before saving | ||
# a record (as primary keys cannot be +nil+). This might be done via the | ||
# +SecureRandom.uuid+ method and a +before_save+ callback, for instance. | ||
def primary_key(name, type = :primary_key, options = {}) | ||
return super unless type == :uuid | ||
options[:default] = options.fetch(:default, 'uuid_generate_v4()') | ||
options[:primary_key] = true | ||
column name, type, options | ||
end | ||
|
||
def citext(name, options = {}) | ||
column(name, 'citext', options) | ||
end | ||
|
||
def column(name, type = nil, options = {}) | ||
super | ||
column = self[name] | ||
column.array = options[:array] | ||
|
||
self | ||
end | ||
|
||
private | ||
|
||
def create_column_definition(name, type) | ||
PostgreSQL::ColumnDefinition.new name, type | ||
end | ||
end | ||
|
||
class Table < ActiveRecord::ConnectionAdapters::Table | ||
include ColumnMethods | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cea4816
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
thanks @senny ... should be useful for AR-JDBC