I don't think this is a good fit for the core.

You are able to use SQL statements inside your migrations, so we already
support this.

Rafael Mendonça França
http://twitter.com/rafaelfranca
https://github.com/rafaelfranca



On Wed, Nov 28, 2012 at 5:06 PM, Gary Weaver <garyswea...@gmail.com> wrote:

> Jeremy,
>
> I looked at the postgres documentation and it looked like it is both
> column level and table level, but maybe I misread it- could you look?
>
> http://www.postgresql.org/docs/9.1/static/sql-createtable.html
>
>
> CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT 
> EXISTS ] table_name
>>     OF type_name [ (
>>   { column_name WITH OPTIONS [ column_constraint [ ... ] ]
>>     | table_constraint }
>>     [, ... ]
>> ) ]
>> [ WITH ( storage_parameter [= value] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]
>> [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
>> [ TABLESPACE tablespace ]
>> where column_constraint is:
>>
>> [ CONSTRAINT constraint_name ]
>> { NOT NULL |
>>   NULL |
>>   CHECK ( expression ) |
>>   DEFAULT default_expr |
>>   UNIQUE index_parameters |
>>   PRIMARY KEY index_parameters |
>>   REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH 
>> SIMPLE ]
>>     [ ON DELETE action ] [ ON UPDATE action ] }
>> [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
>> and table_constraint is:
>>
>> [ CONSTRAINT constraint_name ]
>> { CHECK ( expression ) |
>>   UNIQUE ( column_name [, ... ] ) index_parameters |
>>   PRIMARY KEY ( column_name [, ... ] ) index_parameters |
>>   EXCLUDE [ USING index_method ] ( exclude_element WITH operator [, ... ] ) 
>> index_parameters [ WHERE ( predicate ) ] |
>>   FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, 
>> ... ] ) ]
>>     [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON 
>> UPDATE action ] }
>> [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
>>
>>
>
>
> On Wednesday, November 28, 2012 2:02:04 PM UTC-5, Jeremy Evans wrote:
>
>> On Wed, Nov 28, 2012 at 9:45 AM, Gary Weaver <garys...@gmail.com> wrote:
>>
>>> So proposal would be in activerecord/lib/active_**
>>> record/connection_adapters/**abstract/schema_statements.rb
>>>
>>> You would add :column_options support, like:
>>>
>>>       def create_table(table_name, options = {})
>>>         td = table_definition
>>>         td.primary_key(options[:**primary_key] ||
>>> Base.get_primary_key(table_**name.to_s.singularize)) unless
>>> options[:id] == false
>>>
>>>         yield td if block_given?
>>>
>>>         if options[:force] && table_exists?(table_name)
>>>           drop_table(table_name, options)
>>>         end
>>>
>>>         create_sql = "CREATE#{' TEMPORARY' if options[:temporary]} TABLE
>>> "
>>>         create_sql << "#{quote_table_name(table_**name)} ("
>>>         create_sql << td.to_sql
>>>         create_sql << "#{options[:column_options]}"
>>>         create_sql << ") #{options[:options]}"
>>>         execute create_sql
>>>         td.indexes.each_pair { |c,o| add_index table_name, c, o }
>>>       end
>>>
>>> Not sure if would want to add similar option in other places to be
>>> consistent, though...
>>
>>
>> DEFERRABLE is a per-constraint setting, not a per-table setting, so the
>> idea of using :column_options as a per-table option makes no sense.  It
>> needs to be added as a per constraint setting if it's added at all.  I
>> didn't think ActiveRecord supported creating constraints at all, other than
>> unique constraints implicitly created via unique indexes (and I don't think
>> you can mark those as deferrable using the CREATE UNIQUE INDEX syntax, at
>> least in PostgreSQL), so talking about supporting deferrable constraints
>> when you don't support constraints at all puts the cart before the horse.
>>
>> Jeremy
>>
>>
>>  --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Core" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/rubyonrails-core/-/6nltHuNceFMJ.
>
> To post to this group, send email to rubyonrails-core@googlegroups.com.
> To unsubscribe from this group, send email to
> rubyonrails-core+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/rubyonrails-core?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To post to this group, send email to rubyonrails-core@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-core+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-core?hl=en.

Reply via email to