pg_trunk 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +4 -15
  3. data/CHANGELOG.md +21 -0
  4. data/README.md +3 -1
  5. data/lib/pg_trunk/core/operation/attributes.rb +1 -1
  6. data/lib/pg_trunk/core/railtie/custom_types.rb +5 -6
  7. data/lib/pg_trunk/operations/check_constraints/add_check_constraint.rb +42 -33
  8. data/lib/pg_trunk/operations/check_constraints/drop_check_constraint.rb +51 -40
  9. data/lib/pg_trunk/operations/check_constraints/rename_check_constraint.rb +39 -30
  10. data/lib/pg_trunk/operations/check_constraints/validate_check_constraint.rb +28 -21
  11. data/lib/pg_trunk/operations/composite_types/change_composite_type.rb +59 -50
  12. data/lib/pg_trunk/operations/composite_types/create_composite_type.rb +23 -19
  13. data/lib/pg_trunk/operations/composite_types/drop_composite_type.rb +48 -43
  14. data/lib/pg_trunk/operations/composite_types/rename_composite_type.rb +15 -12
  15. data/lib/pg_trunk/operations/domains/change_domain.rb +53 -47
  16. data/lib/pg_trunk/operations/domains/create_domain.rb +28 -25
  17. data/lib/pg_trunk/operations/domains/drop_domain.rb +50 -41
  18. data/lib/pg_trunk/operations/domains/rename_domain.rb +17 -12
  19. data/lib/pg_trunk/operations/enums/change_enum.rb +37 -32
  20. data/lib/pg_trunk/operations/enums/create_enum.rb +23 -20
  21. data/lib/pg_trunk/operations/enums/drop_enum.rb +50 -39
  22. data/lib/pg_trunk/operations/enums/rename_enum.rb +17 -12
  23. data/lib/pg_trunk/operations/foreign_keys/add_foreign_key.rb +58 -49
  24. data/lib/pg_trunk/operations/foreign_keys/drop_foreign_key.rb +57 -48
  25. data/lib/pg_trunk/operations/foreign_keys/rename_foreign_key.rb +38 -29
  26. data/lib/pg_trunk/operations/functions/change_function.rb +53 -47
  27. data/lib/pg_trunk/operations/functions/create_function.rb +75 -64
  28. data/lib/pg_trunk/operations/functions/drop_function.rb +78 -65
  29. data/lib/pg_trunk/operations/functions/rename_function.rb +29 -22
  30. data/lib/pg_trunk/operations/materialized_views/change_materialized_view.rb +65 -55
  31. data/lib/pg_trunk/operations/materialized_views/create_materialized_view.rb +82 -71
  32. data/lib/pg_trunk/operations/materialized_views/drop_materialized_view.rb +59 -46
  33. data/lib/pg_trunk/operations/materialized_views/refresh_materialized_view.rb +29 -24
  34. data/lib/pg_trunk/operations/materialized_views/rename_materialized_view.rb +29 -22
  35. data/lib/pg_trunk/operations/procedures/change_procedure.rb +53 -46
  36. data/lib/pg_trunk/operations/procedures/create_procedure.rb +63 -52
  37. data/lib/pg_trunk/operations/procedures/drop_procedure.rb +56 -45
  38. data/lib/pg_trunk/operations/procedures/rename_procedure.rb +29 -22
  39. data/lib/pg_trunk/operations/rules/base.rb +77 -0
  40. data/lib/pg_trunk/operations/rules/create_rule.rb +155 -0
  41. data/lib/pg_trunk/operations/rules/drop_rule.rb +94 -0
  42. data/lib/pg_trunk/operations/rules/rename_rule.rb +62 -0
  43. data/lib/pg_trunk/operations/rules.rb +13 -0
  44. data/lib/pg_trunk/operations/sequences/base.rb +79 -0
  45. data/lib/pg_trunk/operations/sequences/change_sequence.rb +142 -0
  46. data/lib/pg_trunk/operations/sequences/create_sequence.rb +180 -0
  47. data/lib/pg_trunk/operations/sequences/drop_sequence.rb +82 -0
  48. data/lib/pg_trunk/operations/sequences/rename_sequence.rb +64 -0
  49. data/lib/pg_trunk/operations/sequences.rb +14 -0
  50. data/lib/pg_trunk/operations/statistics/create_statistics.rb +67 -56
  51. data/lib/pg_trunk/operations/statistics/drop_statistics.rb +64 -53
  52. data/lib/pg_trunk/operations/statistics/rename_statistics.rb +18 -13
  53. data/lib/pg_trunk/operations/triggers/change_trigger.rb +23 -18
  54. data/lib/pg_trunk/operations/triggers/create_trigger.rb +63 -54
  55. data/lib/pg_trunk/operations/triggers/drop_trigger.rb +55 -46
  56. data/lib/pg_trunk/operations/triggers/rename_trigger.rb +51 -48
  57. data/lib/pg_trunk/operations/views/change_view.rb +47 -38
  58. data/lib/pg_trunk/operations/views/create_view.rb +56 -45
  59. data/lib/pg_trunk/operations/views/drop_view.rb +59 -46
  60. data/lib/pg_trunk/operations/views/rename_view.rb +27 -20
  61. data/lib/pg_trunk/operations.rb +2 -0
  62. data/lib/pg_trunk/version.rb +1 -1
  63. data/pg_trunk.gemspec +0 -1
  64. data/spec/operations/rules/create_rule_spec.rb +119 -0
  65. data/spec/operations/rules/drop_rule_spec.rb +117 -0
  66. data/spec/operations/rules/rename_rule_spec.rb +148 -0
  67. data/spec/operations/sequences/change_sequence_spec.rb +134 -0
  68. data/spec/operations/sequences/create_sequence_spec.rb +156 -0
  69. data/spec/operations/sequences/drop_sequence_spec.rb +102 -0
  70. data/spec/operations/sequences/rename_sequence_spec.rb +100 -0
  71. metadata +22 -68
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 98c9050bc62e8f9a33f87ff77a836189fca018a968ff1fd487f1e5b613b1278f
4
- data.tar.gz: 30bcc2a1d61cc3343a95e752d8307c20b1326b57969ac0479a3e4ef161026747
3
+ metadata.gz: c7e02c0f3a19350a502afda3e8697421912161b9bd800eb6302738cc623eb3eb
4
+ data.tar.gz: c0108a41cabe1fd1eebc0695e222ceafeb27c195b9c8fe2766e1f4ced4142c63
5
5
  SHA512:
6
- metadata.gz: a4ba64e08cb9a12ce958e1a4a13a88370e4a20e8fe25cf9da19731c5e77ea8d952decabaebd89c6c0af545f34e955f274a768ad28282345e0365ef57f314d69b
7
- data.tar.gz: 62289de65886d00d28a979149909839f237afdd9e1144f61710306f4da4258e9487da36e07ef21f46e90b86f63cd6b18a17db59317728eac56ce37524cdbc60a
6
+ metadata.gz: 7af9d03c65275a700408841a032cf2f074349943a8d131e54d5dff4f467b9e4bb3fadce657d70469ec2cb1471b41578bef68fc91a92771429d3da84b648161f8
7
+ data.tar.gz: 9a47edbac23bffb1db4c74f0108f42c06c5e9d7aa28b5d213fed05f908a8e738114db1ad4c38557fde7db7e2d514cabf6646d65a8193c7e5bf664b4d20bc38ff
@@ -58,25 +58,14 @@ jobs:
58
58
  - name: Checkout
59
59
  uses: actions/checkout@v2
60
60
 
61
- - name: Install Ruby ${{ matrix.ruby }}
62
- uses: ruby/setup-ruby@v1.61.1
63
- with:
64
- ruby-version: ${{ matrix.ruby }}
65
-
66
61
  - name: Install dependent libraries
67
62
  run: sudo apt-get install libpq-dev
68
63
 
69
- - name: Generate lockfile
70
- run: bundle lock
71
-
72
- - name: Cache dependencies
73
- uses: actions/cache@v1
64
+ - name: Install Ruby ${{ matrix.ruby }}
65
+ uses: ruby/setup-ruby@v1.61.1
74
66
  with:
75
- path: vendor/bundle
76
- key: bundle-${{ hashFiles('Gemfile.lock') }}
77
-
78
- - name: Set up PGTrunk
79
- run: bin/setup
67
+ ruby-version: ${{ matrix.ruby }}
68
+ bundler-cache: true # 'bundle install' and cache
80
69
 
81
70
  - name: Check code style
82
71
  run: bundle exec rubocop
data/CHANGELOG.md CHANGED
@@ -4,6 +4,26 @@ The noteworthy changes for each PGTrunk version are included here.
4
4
  The format is based on [Keep a Changelog] and this project adheres to [Semantic Versioning].
5
5
  For a complete changelog, see the [commits] for each version via the version links.
6
6
 
7
+ ## [0.2.0] (2022-01-26)
8
+
9
+ * Add support for sequences (nepalez)
10
+ * Fix inheritance of attribute aliases (nepalez)
11
+ * Fix documentation for rules (nepalez)
12
+
13
+ ## [0.1.3] (2022-01-20)
14
+
15
+ * Add support for rules (nepalez)
16
+ * Fix CI/CD flow (olleolleolle)
17
+ * Fix documentation (nepalez)
18
+
19
+ ## [0.1.2] (2022-01-17)
20
+
21
+ * Fix registry of custom types (nepalez)
22
+
23
+ ## [0.1.1] (2022-01-16)
24
+
25
+ * Fix inline documentation for methods added to ActiveRecord::Migration (nepalez)
26
+
7
27
  ## [0.1.0] (2022-01-14)
8
28
 
9
29
  This is a first public release (nepalez)
@@ -24,6 +44,7 @@ Supported features:
24
44
  - composite types
25
45
  - domains types
26
46
 
47
+ [0.1.1]: https://github.com/nepalez/pg_trunk/releases/tag/v0.1.1
27
48
  [0.1.0]: https://github.com/nepalez/pg_trunk/releases/tag/v0.1.0
28
49
 
29
50
  [Keep a Changelog]: http://keepachangelog.com/
data/README.md CHANGED
@@ -72,6 +72,8 @@ As of today we support creation, modification and dropping the following objects
72
72
  - enumerable types
73
73
  - composite types
74
74
  - domains types
75
+ - rules
76
+ - sequences
75
77
 
76
78
  For `tables` and `indexes` we reuse the ActiveRecord's native methods.
77
79
  For `check constraints` and `foreign keys` we support both the native definitions inside the table
@@ -88,7 +90,7 @@ The gem is targeted to support PostgreSQL-specific features, that's why we won't
88
90
  ## Documentation
89
91
 
90
92
  The gem provides a lot of additional methods to create, rename, change a drop various objects.
91
- You can find the necessary details in the gem's [wiki].
93
+ You can find the necessary details [here](https://rubydoc.info/gems/pg_trunk/ActiveRecord/Migration).
92
94
 
93
95
  ## Installation
94
96
 
@@ -51,7 +51,7 @@ class PGTrunk::Operation
51
51
  end
52
52
 
53
53
  def inherited(klass)
54
- klass.instance_variable_set(:@attr_aliases, attr_aliases)
54
+ klass.instance_variable_set(:@attr_aliases, attr_aliases.dup)
55
55
  super
56
56
  end
57
57
  end
@@ -12,22 +12,21 @@ module PGTrunk
12
12
  end
13
13
 
14
14
  def enable_pg_trunk_types
15
- execute(<<~SQL).each { |item| enable_pg_trunk_type item["name"] }
15
+ execute(<<~SQL).each { |item| enable_pg_trunk_type(**item.symbolize_keys) }
16
16
  SELECT (
17
17
  CASE
18
18
  WHEN t.typnamespace = 'public'::regnamespace THEN t.typname
19
19
  ELSE t.typnamespace::regnamespace || '.' || t.typname
20
20
  END
21
- ) AS name
21
+ ) AS name, t.oid
22
22
  FROM pg_trunk e JOIN pg_type t ON t.oid = e.oid
23
23
  WHERE e.classid = 'pg_type'::regclass
24
24
  SQL
25
25
  end
26
26
 
27
- def enable_pg_trunk_type(type)
28
- type = type.to_s
29
- CustomTypes.known << type
30
- type_map.register_type(type, TYPE.new(type)) unless type_map.key?(type)
27
+ def enable_pg_trunk_type(oid:, name:)
28
+ CustomTypes.known << name
29
+ type_map.register_type(oid.to_i, TYPE.new(name.to_s))
31
30
  end
32
31
 
33
32
  def valid_type?(type)
@@ -1,39 +1,48 @@
1
1
  # frozen_string_literal: false
2
2
 
3
- # @!method ActiveRecord::Migration#add_check_constraint(table, expression = nil, **options, &block)
4
- # Add a check constraint to the table
5
- #
6
- # @param [#to_s] table (nil) The qualified name of the table
7
- # @param [#to_s] expression (nil) The SQL expression
8
- # @option [#to_s] :name (nil) The optional name of the constraint
9
- # @option [Boolean] :inherit (true) If the constraint should be inherited by subtables
10
- # @option [#to_s] :comment (nil) The comment describing the constraint
11
- # @yield [Proc] the block with the constraint's definition
12
- # @yieldparam The receiver of methods specifying the constraint
13
- #
14
- # The name of the new constraint can be set explicitly
15
- #
16
- # add_check_constraint :users, "length(phone) > 10",
17
- # name: "phone_is_long_enough",
18
- # inherit: false,
19
- # comment: "Phone is 10+ chars long"
20
- #
21
- # The name can also be skipped (it will be generated by default):
22
- #
23
- # add_check_constraint :users, "length(phone) > 1"
24
- #
25
- # The block syntax can be used for any argument as usual:
26
- #
27
- # add_check_constraint do |c|
28
- # c.table "users"
29
- # c.expression "length(phone) > 10"
30
- # c.name "phone_is_long_enough"
31
- # c.inherit false
32
- # c.comment "Phone is 10+ chars long"
3
+ # @!parse
4
+ # class ActiveRecord::Migration
5
+ # # Add a check constraint to the table
6
+ # #
7
+ # # @param [#to_s] table (nil) The qualified name of the table
8
+ # # @param [#to_s] expression (nil) The SQL expression
9
+ # # @option options [#to_s] :name (nil) The optional name of the constraint
10
+ # # @option options [Boolean] :inherit (true) If the constraint should be inherited by subtables
11
+ # # @option options [#to_s] :comment (nil) The comment describing the constraint
12
+ # # @yield [c] the block with the constraint's definition
13
+ # # @yieldparam Object receiver of methods specifying the constraint
14
+ # # @return [void]
15
+ # #
16
+ # # The name of the new constraint can be set explicitly
17
+ # #
18
+ # # ```ruby
19
+ # # add_check_constraint :users, "length(phone) > 10",
20
+ # # name: "phone_is_long_enough",
21
+ # # inherit: false,
22
+ # # comment: "Phone is 10+ chars long"
23
+ # # ```
24
+ # #
25
+ # # The name can also be skipped (it will be generated by default):
26
+ # #
27
+ # # ```ruby
28
+ # # add_check_constraint :users, "length(phone) > 1"
29
+ # # ```
30
+ # #
31
+ # # The block syntax can be used for any argument as usual:
32
+ # #
33
+ # # ```ruby
34
+ # # add_check_constraint do |c|
35
+ # # c.table "users"
36
+ # # c.expression "length(phone) > 10"
37
+ # # c.name "phone_is_long_enough"
38
+ # # c.inherit false
39
+ # # c.comment "Phone is 10+ chars long"
40
+ # # end
41
+ # # ```
42
+ # #
43
+ # # The operation is always reversible.
44
+ # def add_check_constraint(table, expression = nil, **options, &block); end
33
45
  # end
34
- #
35
- # The operation is always reversible.
36
-
37
46
  module PGTrunk::Operations::CheckConstraints
38
47
  # @private
39
48
  class AddCheckConstraint < Base
@@ -1,46 +1,57 @@
1
1
  # frozen_string_literal: false
2
2
 
3
- # @!method ActiveRecord::Migration#drop_check_constraint(table, expression = nil, **options, &block)
4
- # Remove a check constraint from the table
5
- #
6
- # @param [#to_s] table (nil) The qualified name of the table
7
- # @param [#to_s] expression (nil) The SQL expression
8
- # @option [Boolean] :if_exists (false) Suppress the error when the constraint is absent
9
- # @option [#to_s] :name (nil) The optional name of the constraint
10
- # @option [Boolean] :inherit (true) If the constraint should be inherited by subtables
11
- # @option [#to_s] :comment (nil) The comment describing the constraint
12
- # @yield [Proc] the block with the constraint's definition
13
- # @yieldparam The receiver of methods specifying the constraint
14
- #
15
- # Definition for the `drop_check_constraint` operation
16
- #
17
- # The constraint can be identified by the table and explicit name
18
- #
19
- # drop_check_constraint :users, name: "phone_is_long_enough"
20
- #
21
- # Alternatively the name can be got from the expression.
22
- # Be careful! the expression must have exactly the same form
23
- # as stored in the database:
24
- #
25
- # drop_check_constraint :users, "length((phone::text) > 10)"
26
- #
27
- # To made operation reversible the expression must be provided:
28
- #
29
- # drop_check_constraint "users" do |c|
30
- # c.expression "length((phone::text) > 10)"
31
- # c.inherit false
32
- # c.comment "The phone is 10+ chars long"
3
+ # @!parse
4
+ # class ActiveRecord::Migration
5
+ # # Remove a check constraint from the table
6
+ # #
7
+ # # @param [#to_s] table (nil) The qualified name of the table
8
+ # # @param [#to_s] expression (nil) The SQL expression
9
+ # # @option options [Boolean] :if_exists (false) Suppress the error when the constraint is absent
10
+ # # @option options [#to_s] :name (nil) The optional name of the constraint
11
+ # # @option options [Boolean] :inherit (true) If the constraint should be inherited by subtables
12
+ # # @option options [#to_s] :comment (nil) The comment describing the constraint
13
+ # # @yield [c] the block with the constraint's definition
14
+ # # @yieldparam Object receiver of methods specifying the constraint
15
+ # # @return [void]
16
+ # #
17
+ # # Definition for the `drop_check_constraint` operation
18
+ # #
19
+ # # The constraint can be identified by the table and explicit name
20
+ # #
21
+ # # ```ruby
22
+ # # drop_check_constraint :users, name: "phone_is_long_enough"
23
+ # # ```
24
+ # #
25
+ # # Alternatively the name can be got from the expression.
26
+ # # Be careful! the expression must have exactly the same form
27
+ # # as stored in the database:
28
+ # #
29
+ # # ```ruby
30
+ # # drop_check_constraint :users, "length((phone::text) > 10)"
31
+ # # ```
32
+ # #
33
+ # # To made operation reversible the expression must be provided:
34
+ # #
35
+ # # ```ruby
36
+ # # drop_check_constraint "users" do |c|
37
+ # # c.expression "length((phone::text) > 10)"
38
+ # # c.inherit false
39
+ # # c.comment "The phone is 10+ chars long"
40
+ # # end
41
+ # # ```
42
+ # #
43
+ # # The operation can be called with `if_exists` option.
44
+ # #
45
+ # # ```ruby
46
+ # # drop_check_constraint :users,
47
+ # # name: "phone_is_long_enough",
48
+ # # if_exists: true
49
+ # # ```
50
+ # #
51
+ # # In this case the operation is always irreversible due to
52
+ # # uncertainty of the previous state of the database.
53
+ # def drop_check_constraint(table, expression = nil, **options, &block); end
33
54
  # end
34
- #
35
- # The operation can be called with `if_exists` option.
36
- #
37
- # drop_check_constraint :users,
38
- # name: "phone_is_long_enough",
39
- # if_exists: true
40
- #
41
- # In this case the operation is always irreversible due to
42
- # uncertainty of the previous state of the database.
43
-
44
55
  module PGTrunk::Operations::CheckConstraints
45
56
  # @private
46
57
  class DropCheckConstraint < Base
@@ -1,35 +1,44 @@
1
1
  # frozen_string_literal: false
2
2
 
3
- # @!method ActiveRecord::Migration#rename_check_constraint(table, expression = nil, **options, &block)
4
- # Rename a check constraint
5
- #
6
- # @param [#to_s] table (nil) The qualified name of the table
7
- # @param [#to_s] expression (nil) The SQL expression
8
- # @option [#to_s] :name (nil) The current name of the constraint
9
- # @option [#to_s] :to (nil) The new name for the constraint
10
- # @yield [Proc] the block with the constraint's definition
11
- # @yieldparam The receiver of methods specifying the constraint
12
- #
13
- # A constraint can be identified by the table and explicit name
14
- #
15
- # rename_check_constraint :users,
16
- # name: "phone_is_long_enough",
17
- # to: "phones.long_enough"
18
- #
19
- # Alternatively the name can be got from the expression.
20
- # Be careful! the expression must have exactly the same form
21
- # as stored in the database:
22
- #
23
- # rename_check_constraint :users, "length((phone::text) > 10)",
24
- # to: "long_enough"
25
- #
26
- # The name can be reset to auto-generated when
27
- # the `:to` option is missed or blank:
28
- #
29
- # rename_check_constraint :users, "phone_is_long_enough"
30
- #
31
- # The operation is always reversible.
32
-
3
+ # @!parse
4
+ # class ActiveRecord::Migration
5
+ # # Rename a check constraint
6
+ # #
7
+ # # @param [#to_s] table (nil) The qualified name of the table
8
+ # # @param [#to_s] expression (nil) The SQL expression
9
+ # # @option options [#to_s] :name (nil) The current name of the constraint
10
+ # # @option options [#to_s] :to (nil) The new name for the constraint
11
+ # # @yield [c] the block with the constraint's definition
12
+ # # @yieldparam Object receiver of methods specifying the constraint
13
+ # # @return [void]
14
+ # #
15
+ # # A constraint can be identified by the table and explicit name
16
+ # #
17
+ # # ```ruby
18
+ # # rename_check_constraint :users,
19
+ # # name: "phone_is_long_enough",
20
+ # # to: "phones.long_enough"
21
+ # # ```
22
+ # #
23
+ # # Alternatively the name can be got from the expression.
24
+ # # Be careful! the expression must have exactly the same form
25
+ # # as stored in the database:
26
+ # #
27
+ # # ```ruby
28
+ # # rename_check_constraint :users, "length((phone::text) > 10)",
29
+ # # to: "long_enough"
30
+ # # ```
31
+ # #
32
+ # # The name can be reset to auto-generated when
33
+ # # the `:to` option is missed or blank:
34
+ # #
35
+ # # ```ruby
36
+ # # rename_check_constraint :users, "phone_is_long_enough"
37
+ # # ```
38
+ # #
39
+ # # The operation is always reversible.
40
+ # def rename_check_constraint(table, expression = nil, **options, &block); end
41
+ # end
33
42
  module PGTrunk::Operations::CheckConstraints
34
43
  # @private
35
44
  class RenameCheckConstraint < Base
@@ -1,26 +1,33 @@
1
1
  # frozen_string_literal: false
2
2
 
3
- # @!method ActiveRecord::Migration#validate_check_constraint(table, expression = nil, **options, &block)
4
- # Validate an invalid check constraint
5
- #
6
- # @param [#to_s] table (nil) The qualified name of the table
7
- # @param [#to_s] expression (nil) The SQL expression
8
- # @option [#to_s] :name (nil) The optional name of the constraint
9
- # @yield [Proc] the block with the constraint's definition
10
- # @yieldparam The receiver of methods specifying the constraint
11
- #
12
- # The invalid constraint can be identified by table and explicit name:
13
- #
14
- # validate_check_constraint :users, name: "phone_is_long_enough"
15
- #
16
- # Alternatively it can be specified by expression. In this case
17
- # you must ensure the expression has the same form as it is stored
18
- # in the database (after parsing the source).
19
- #
20
- # validate_check_constraint :users, "length((phone::text) > 10)"
21
- #
22
- # Notice that it is invertible but the inverted operation does nothing.
23
-
3
+ # @!parse
4
+ # class ActiveRecord::Migration
5
+ # # Validate an invalid check constraint
6
+ # #
7
+ # # @param [#to_s] table (nil) The qualified name of the table
8
+ # # @param [#to_s] expression (nil) The SQL expression
9
+ # # @option options [#to_s] :name (nil) The optional name of the constraint
10
+ # # @yield [c] the block with the constraint's definition
11
+ # # @yieldparam Object receiver of methods specifying the constraint
12
+ # # @return [void]
13
+ # #
14
+ # # The invalid constraint can be identified by table and explicit name:
15
+ # #
16
+ # # ```ruby
17
+ # # validate_check_constraint :users, name: "phone_is_long_enough"
18
+ # # ```
19
+ # #
20
+ # # Alternatively it can be specified by expression. In this case
21
+ # # you must ensure the expression has the same form as it is stored
22
+ # # in the database (after parsing the source).
23
+ # #
24
+ # # ```ruby
25
+ # # validate_check_constraint :users, "length((phone::text) > 10)"
26
+ # # ```
27
+ # #
28
+ # # Notice that it is invertible but the inverted operation does nothing.
29
+ # def validate_check_constraint(table, expression = nil, **options, &block); end
30
+ # end
24
31
  module PGTrunk::Operations::CheckConstraints
25
32
  # @private
26
33
  class ValidateCheckConstraint < Base
@@ -1,56 +1,65 @@
1
1
  # frozen_string_literal: false
2
2
 
3
- # @!method ActiveRecord::Migration#change_composite_type(name, **options, &block)
4
- # Modify a composite type
5
- #
6
- # @param [#to_s] name (nil) The qualified name of the type
7
- # @option [Symbol] :force (:restrict) How to process dependent objects (`:cascade` or `:restrict`)
8
- # @option [#to_s] :comment (nil) The comment describing the constraint
9
- # @yield [Proc] the block with the type's definition
10
- # @yieldparam The receiver of methods specifying the type
11
- #
12
- # The operation can be used to add, drop, rename or change columns.
13
- # The comment can be changed as well.
14
- #
15
- # Providing a type "paint.colored_point":
16
- #
17
- # create_composite_type "paint.colored_point" do |t|
18
- # t.column "color", "text", collation: "en_US"
19
- # t.column "x", "integer"
20
- # t.column "z", "integer"
3
+ # @!parse
4
+ # class ActiveRecord::Migration
5
+ # # Modify a composite type
6
+ # #
7
+ # # @param [#to_s] name (nil) The qualified name of the type
8
+ # # @option options [Symbol] :force (:restrict) How to process dependent objects (`:cascade` or `:restrict`)
9
+ # # @option options [#to_s] :comment (nil) The comment describing the constraint
10
+ # # @yield [t] the block with the type's definition
11
+ # # @yieldparam Object receiver of methods specifying the type
12
+ # # @return [void]
13
+ # #
14
+ # # The operation can be used to add, drop, rename or change columns.
15
+ # # The comment can be changed as well.
16
+ # #
17
+ # # Providing a type "paint.colored_point":
18
+ # #
19
+ # # ```ruby
20
+ # # create_composite_type "paint.colored_point" do |t|
21
+ # # t.column "color", "text", collation: "en_US"
22
+ # # t.column "x", "integer"
23
+ # # t.column "z", "integer"
24
+ # # end
25
+ # # ```
26
+ # #
27
+ # # After the following change:
28
+ # #
29
+ # # ```ruby
30
+ # # change_composite_type "paint.colored_point" do |t|
31
+ # # t.change_column "color", "text", collation: "ru_RU", from_collation: "en_US"
32
+ # # t.change_column "x", "bigint", from_type: "integer"
33
+ # # t.drop_column "z", "integer"
34
+ # # t.add_column "Y", "bigint"
35
+ # # t.rename_column "x", to: "X"
36
+ # # t.comment "2D point with a color", from: "2D point"
37
+ # # end
38
+ # # ```
39
+ # #
40
+ # # The definition became:
41
+ # #
42
+ # # ```ruby
43
+ # # create_composite_type "paint.colored_point" do |t|
44
+ # # t.column "color", "text", collation: "ru_RU"
45
+ # # t.column "X", "bigint"
46
+ # # t.column "Y", "integer"
47
+ # # end
48
+ # # ```
49
+ # #
50
+ # # Notice, that all renames will be done AFTER other changes,
51
+ # # so in `change_column` you should use the old names.
52
+ # #
53
+ # # In several cases the operation is not invertible:
54
+ # #
55
+ # # - when a column was dropped
56
+ # # - when `force: :cascade` option is used (to update
57
+ # # objects that use the type)
58
+ # # - when `if_exists: true` is added to the `drop_column` clause
59
+ # # - when a previous state of the column type, collation or comment
60
+ # # is not specified.
61
+ # def change_composite_type(name, **options, &block); end
21
62
  # end
22
- #
23
- # After the following change:
24
- #
25
- # change_composite_type "paint.colored_point" do |t|
26
- # t.change_column "color", "text", collation: "ru_RU", from_collation: "en_US"
27
- # t.change_column "x", "bigint", from_type: "integer"
28
- # t.drop_column "z", "integer"
29
- # t.add_column "Y", "bigint"
30
- # t.rename_column "x", to: "X"
31
- # t.comment "2D point with a color", from: "2D point"
32
- # end
33
- #
34
- # The definition became:
35
- #
36
- # create_composite_type "paint.colored_point" do |t|
37
- # t.column "color", "text", collation: "ru_RU"
38
- # t.column "X", "bigint"
39
- # t.column "Y", "integer"
40
- # end
41
- #
42
- # Notice, that all renames will be done AFTER other changes,
43
- # so in `change_column` you should use the old names.
44
- #
45
- # In several cases the operation is not invertible:
46
- #
47
- # - when a column was dropped
48
- # - when `force: :cascade` option is used (to update
49
- # objects that use the type)
50
- # - when `if_exists: true` is added to the `drop_column` clause
51
- # - when a previous state of the column type, collation or comment
52
- # is not specified.
53
-
54
63
  module PGTrunk::Operations::CompositeTypes
55
64
  # @private
56
65
  class ChangeCompositeType < Base
@@ -1,25 +1,29 @@
1
1
  # frozen_string_literal: false
2
2
 
3
- # @!method ActiveRecord::Migration#create_composite_type(name, **options, &block)
4
- # Create a composite type
5
- #
6
- # @param [#to_s] name (nil) The qualified name of the type
7
- # @option [#to_s] :comment (nil) The comment describing the constraint
8
- # @yield [Proc] the block with the type's definition
9
- # @yieldparam The receiver of methods specifying the type
10
- #
11
- # @example
12
- # create_composite_type "paint.colored_point" do |d|
13
- # d.column "x", "integer"
14
- # d.column "y", "integer"
15
- # d.column "color", "text", collation: "en_US"
16
- # d.comment <<~COMMENT
17
- # 2D point with color
18
- # COMMENT
3
+ # @!parse
4
+ # class ActiveRecord::Migration
5
+ # # Create a composite type
6
+ # #
7
+ # # @param [#to_s] name (nil) The qualified name of the type
8
+ # # @option options [#to_s] :comment (nil) The comment describing the constraint
9
+ # # @yield [t] the block with the type's definition
10
+ # # @yieldparam Object receiver of methods specifying the type
11
+ # # @return [void]
12
+ # #
13
+ # # ```ruby
14
+ # # create_composite_type "paint.colored_point" do |d|
15
+ # # d.column "x", "integer"
16
+ # # d.column "y", "integer"
17
+ # # d.column "color", "text", collation: "en_US"
18
+ # # d.comment <<~COMMENT
19
+ # # 2D point with color
20
+ # # COMMENT
21
+ # # end
22
+ # # ```
23
+ # #
24
+ # # It is always reversible.
25
+ # def create_composite_type(name, **options, &block); end
19
26
  # end
20
- #
21
- # It is always reversible.
22
-
23
27
  module PGTrunk::Operations::CompositeTypes
24
28
  # @private
25
29
  class CreateCompositeType < Base