Module: Postgresql::Check::SchemaStatements
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/postgresql/check/schema_statements.rb
Instance Method Summary collapse
-
#add_check(table_name, condition, options) ⇒ Object
Add a new Check constraint to table with given
table_nameusing givenconditions. - #checks(table_name) ⇒ Object private
- #create_table_with_checks(table_name, *args) ⇒ Object private
-
#remove_check(table_name, options) ⇒ Object
Remove constraint with given name from table.
Instance Method Details
#add_check(table_name, condition, options) ⇒ Object
Note:
:name option is mandatory.
Add a new Check constraint to table with given table_name using given conditions. Constraint name should be specified by :name options in options argument.
27 28 29 30 31 32 33 34 35 |
# File 'lib/postgresql/check/schema_statements.rb', line 27 def add_check(table_name, condition, ) name = .fetch(:name) { raise 'add_check, :name option required' } execute <<-SQL ALTER TABLE #{quote_table_name(table_name)} ADD CONSTRAINT #{quote_column_name(name)} CHECK (#{condition}) SQL end |
#checks(table_name) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/postgresql/check/schema_statements.rb', line 73 def checks(table_name) checks_info = select_all <<-SQL SELECT DISTINCT c.conname, c.consrc FROM pg_constraint c INNER JOIN pg_class t ON c.conrelid = t.oid WHERE c.contype = 'c' AND t.relname = '#{table_name}' SQL checks_info.map do |row| Constraint.new table_name, row['conname'], row['consrc'] end end |
#create_table_with_checks(table_name, *args) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/postgresql/check/schema_statements.rb', line 59 def create_table_with_checks(table_name, *args) definition = nil create_table_without_checks(table_name, *args) do |td| definition = td # trick to get the definition yield td if block_given? end definition.checks.each do |condition, | add_check table_name, condition, end end |
#remove_check(table_name, options) ⇒ Object
Remove constraint with given name from table. Constraint name is specified with options hash.
49 50 51 52 53 54 55 56 |
# File 'lib/postgresql/check/schema_statements.rb', line 49 def remove_check(table_name, ) name = .fetch(:name) { raise 'remove_check, :name option required' } execute <<-SQL ALTER TABLE #{quote_table_name(table_name)} DROP CONSTRAINT #{quote_column_name(name)} SQL end |