pg_trunk 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/lib/pg_trunk/operations/check_constraints/add_check_constraint.rb +36 -33
  4. data/lib/pg_trunk/operations/check_constraints/drop_check_constraint.rb +43 -40
  5. data/lib/pg_trunk/operations/check_constraints/rename_check_constraint.rb +33 -30
  6. data/lib/pg_trunk/operations/check_constraints/validate_check_constraint.rb +24 -21
  7. data/lib/pg_trunk/operations/composite_types/change_composite_type.rb +53 -50
  8. data/lib/pg_trunk/operations/composite_types/create_composite_type.rb +22 -19
  9. data/lib/pg_trunk/operations/composite_types/drop_composite_type.rb +46 -43
  10. data/lib/pg_trunk/operations/composite_types/rename_composite_type.rb +15 -12
  11. data/lib/pg_trunk/operations/domains/change_domain.rb +50 -47
  12. data/lib/pg_trunk/operations/domains/create_domain.rb +28 -25
  13. data/lib/pg_trunk/operations/domains/drop_domain.rb +44 -41
  14. data/lib/pg_trunk/operations/domains/rename_domain.rb +15 -12
  15. data/lib/pg_trunk/operations/enums/change_enum.rb +35 -32
  16. data/lib/pg_trunk/operations/enums/create_enum.rb +23 -20
  17. data/lib/pg_trunk/operations/enums/drop_enum.rb +42 -39
  18. data/lib/pg_trunk/operations/enums/rename_enum.rb +15 -12
  19. data/lib/pg_trunk/operations/foreign_keys/add_foreign_key.rb +52 -49
  20. data/lib/pg_trunk/operations/foreign_keys/drop_foreign_key.rb +51 -48
  21. data/lib/pg_trunk/operations/foreign_keys/rename_foreign_key.rb +32 -29
  22. data/lib/pg_trunk/operations/functions/change_function.rb +50 -47
  23. data/lib/pg_trunk/operations/functions/create_function.rb +67 -64
  24. data/lib/pg_trunk/operations/functions/drop_function.rb +68 -65
  25. data/lib/pg_trunk/operations/functions/rename_function.rb +25 -22
  26. data/lib/pg_trunk/operations/materialized_views/change_materialized_view.rb +58 -55
  27. data/lib/pg_trunk/operations/materialized_views/create_materialized_view.rb +74 -71
  28. data/lib/pg_trunk/operations/materialized_views/drop_materialized_view.rb +49 -46
  29. data/lib/pg_trunk/operations/materialized_views/refresh_materialized_view.rb +27 -24
  30. data/lib/pg_trunk/operations/materialized_views/rename_materialized_view.rb +25 -22
  31. data/lib/pg_trunk/operations/procedures/change_procedure.rb +49 -46
  32. data/lib/pg_trunk/operations/procedures/create_procedure.rb +55 -52
  33. data/lib/pg_trunk/operations/procedures/drop_procedure.rb +48 -45
  34. data/lib/pg_trunk/operations/procedures/rename_procedure.rb +25 -22
  35. data/lib/pg_trunk/operations/statistics/create_statistics.rb +59 -56
  36. data/lib/pg_trunk/operations/statistics/drop_statistics.rb +56 -53
  37. data/lib/pg_trunk/operations/statistics/rename_statistics.rb +16 -13
  38. data/lib/pg_trunk/operations/triggers/change_trigger.rb +21 -18
  39. data/lib/pg_trunk/operations/triggers/create_trigger.rb +57 -54
  40. data/lib/pg_trunk/operations/triggers/drop_trigger.rb +49 -46
  41. data/lib/pg_trunk/operations/triggers/rename_trigger.rb +51 -48
  42. data/lib/pg_trunk/operations/views/change_view.rb +41 -38
  43. data/lib/pg_trunk/operations/views/create_view.rb +48 -45
  44. data/lib/pg_trunk/operations/views/drop_view.rb +49 -46
  45. data/lib/pg_trunk/operations/views/rename_view.rb +23 -20
  46. data/lib/pg_trunk/version.rb +1 -1
  47. metadata +2 -2
@@ -1,71 +1,74 @@
1
1
  # frozen_string_literal: false
2
2
 
3
- # @!method ActiveRecord::Migration#drop_function(name, **options, &block)
4
- # Drop a function
5
- #
6
- # @param [#to_s] name (nil)
7
- # The qualified name of the function with arguments and returned value type
8
- # @option [Boolean] :if_exists (false) Suppress the error when the function is absent
9
- # @option [Symbol] :force (:restrict) How to process dependent objects
10
- # Supported values: :restrict (default), :cascade
11
- # @option [#to_s] :language ("sql") The language (like "sql" or "plpgsql")
12
- # @option [#to_s] :body (nil) The body of the function
13
- # @option [Symbol] :volatility (:volatile) The volatility of the function.
14
- # Supported values: :volatile (default), :stable, :immutable
15
- # @option [Symbol] :parallel (:unsafe) The safety of parallel execution.
16
- # Supported values: :unsafe (default), :restricted, :safe
17
- # @option [Symbol] :security (:invoker) Define the role under which the function is invoked
18
- # Supported values: :invoker (default), :definer
19
- # @option [Boolean] :leakproof (false) If the function is leakproof
20
- # @option [Boolean] :strict (false) If the function is strict
21
- # @option [Float] :cost (nil) The cost estimation for the function
22
- # @option [Integer] :rows (nil) The number of rows returned by a function
23
- # @option [#to_s] :comment The description of the function
24
- # @yield [Proc] the block with the function's definition
25
- # @yieldparam The receiver of methods specifying the function
26
- #
27
- # A function can be dropped by a plain name:
28
- #
29
- # drop_function "multiply"
30
- #
31
- # If several overloaded functions have the name,
32
- # then you must specify the signature having
33
- # types of attributes at least:
34
- #
35
- # drop_function "multiply(int, int)"
36
- #
37
- # In both cases above the operation is irreversible. To make it
38
- # inverted you have to provide a full signature along with
39
- # the body definition. The other options are supported as well:
40
- #
41
- # drop_function "math.mult(a int, b int) int" do |f|
42
- # f.language "sql" # (default)
43
- # f.body <<~SQL
44
- # SELECT a * b;
45
- # SQL
46
- # f.volatility :immutable # :stable, :volatile (default)
47
- # f.parallel :safe # :restricted, :unsafe (default)
48
- # f.security :invoker # (default), also :definer
49
- # f.leakproof true
50
- # f.strict true
51
- # f.cost 5.0
52
- # # f.rows 1 (supported for functions returning sets of rows)
53
- # f.comment "Multiplies 2 integers"
3
+ # @!parse
4
+ # class ActiveRecord::Migration
5
+ # # Drop a function
6
+ # #
7
+ # # @param [#to_s] name (nil)
8
+ # # The qualified name of the function with arguments and returned value type
9
+ # # @option [Boolean] :if_exists (false) Suppress the error when the function is absent
10
+ # # @option [Symbol] :force (:restrict) How to process dependent objects
11
+ # # Supported values: :restrict (default), :cascade
12
+ # # @option [#to_s] :language ("sql") The language (like "sql" or "plpgsql")
13
+ # # @option [#to_s] :body (nil) The body of the function
14
+ # # @option [Symbol] :volatility (:volatile) The volatility of the function.
15
+ # # Supported values: :volatile (default), :stable, :immutable
16
+ # # @option [Symbol] :parallel (:unsafe) The safety of parallel execution.
17
+ # # Supported values: :unsafe (default), :restricted, :safe
18
+ # # @option [Symbol] :security (:invoker) Define the role under which the function is invoked
19
+ # # Supported values: :invoker (default), :definer
20
+ # # @option [Boolean] :leakproof (false) If the function is leakproof
21
+ # # @option [Boolean] :strict (false) If the function is strict
22
+ # # @option [Float] :cost (nil) The cost estimation for the function
23
+ # # @option [Integer] :rows (nil) The number of rows returned by a function
24
+ # # @option [#to_s] :comment The description of the function
25
+ # # @yield [f] the block with the function's definition
26
+ # # @yieldparam Object receiver of methods specifying the function
27
+ # # @return [void]
28
+ # #
29
+ # # A function can be dropped by a plain name:
30
+ # #
31
+ # # drop_function "multiply"
32
+ # #
33
+ # # If several overloaded functions have the name,
34
+ # # then you must specify the signature having
35
+ # # types of attributes at least:
36
+ # #
37
+ # # drop_function "multiply(int, int)"
38
+ # #
39
+ # # In both cases above the operation is irreversible. To make it
40
+ # # inverted you have to provide a full signature along with
41
+ # # the body definition. The other options are supported as well:
42
+ # #
43
+ # # drop_function "math.mult(a int, b int) int" do |f|
44
+ # # f.language "sql" # (default)
45
+ # # f.body <<~SQL
46
+ # # SELECT a * b;
47
+ # # SQL
48
+ # # f.volatility :immutable # :stable, :volatile (default)
49
+ # # f.parallel :safe # :restricted, :unsafe (default)
50
+ # # f.security :invoker # (default), also :definer
51
+ # # f.leakproof true
52
+ # # f.strict true
53
+ # # f.cost 5.0
54
+ # # # f.rows 1 (supported for functions returning sets of rows)
55
+ # # f.comment "Multiplies 2 integers"
56
+ # # end
57
+ # #
58
+ # # The operation can be called with `if_exists` option. In this case
59
+ # # it would do nothing when no function existed.
60
+ # #
61
+ # # drop_function "math.multiply(integer, integer)", if_exists: true
62
+ # #
63
+ # # Another operation-specific option `force: :cascade` enables
64
+ # # to drop silently any object depending on the function.
65
+ # #
66
+ # # drop_function "math.multiply(integer, integer)", force: :cascade
67
+ # #
68
+ # # Both options make the operation irreversible because of
69
+ # # uncertainty about the previous state of the database.
70
+ # def drop_function(name, **options, &block); end
54
71
  # end
55
- #
56
- # The operation can be called with `if_exists` option. In this case
57
- # it would do nothing when no function existed.
58
- #
59
- # drop_function "math.multiply(integer, integer)", if_exists: true
60
- #
61
- # Another operation-specific option `force: :cascade` enables
62
- # to drop silently any object depending on the function.
63
- #
64
- # drop_function "math.multiply(integer, integer)", force: :cascade
65
- #
66
- # Both options make the operation irreversible because of
67
- # uncertainty about the previous state of the database.
68
-
69
72
  module PGTrunk::Operations::Functions
70
73
  # @private
71
74
  class DropFunction < Base
@@ -1,27 +1,30 @@
1
1
  # frozen_string_literal: false
2
2
 
3
- # @!method ActiveRecord::Migration#rename_function(name, to:)
4
- # Change the name and/or schema of a function
5
- #
6
- # @param [#to_s] :name (nil) The qualified name of the function
7
- # @option [#to_s] :to (nil) The new qualified name for the function
8
- #
9
- # A function can be renamed by changing both the name
10
- # and the schema (namespace) it belongs to.
11
- #
12
- # If there are no overloaded functions, then you can use a plain name:
13
- #
14
- # rename_function "math.multiply", to: "public.product"
15
- #
16
- # otherwise the types of attributes must be explicitly specified.
17
- #
18
- # rename_function "math.multiply(int, int)", to: "public.product"
19
- #
20
- # Any specification of attributes or returned values in `to:` option
21
- # is ignored because they cannot be changed anyway.
22
- #
23
- # The operation is always reversible.
24
-
3
+ # @!parse
4
+ # class ActiveRecord::Migration
5
+ # # Change the name and/or schema of a function
6
+ # #
7
+ # # @param [#to_s] :name (nil) The qualified name of the function
8
+ # # @option [#to_s] :to (nil) The new qualified name for the function
9
+ # # @return [void]
10
+ # #
11
+ # # A function can be renamed by changing both the name
12
+ # # and the schema (namespace) it belongs to.
13
+ # #
14
+ # # If there are no overloaded functions, then you can use a plain name:
15
+ # #
16
+ # # rename_function "math.multiply", to: "public.product"
17
+ # #
18
+ # # otherwise the types of attributes must be explicitly specified.
19
+ # #
20
+ # # rename_function "math.multiply(int, int)", to: "public.product"
21
+ # #
22
+ # # Any specification of attributes or returned values in `to:` option
23
+ # # is ignored because they cannot be changed anyway.
24
+ # #
25
+ # # The operation is always reversible.
26
+ # def rename_function(name, to:); end
27
+ # end
25
28
  module PGTrunk::Operations::Functions
26
29
  # @private
27
30
  class RenameFunction < Base
@@ -1,61 +1,64 @@
1
1
  # frozen_string_literal: false
2
2
 
3
- # @!method ActiveRecord::Migration#change_materialized_view(name, **options, &block)
4
- # Modify a materialized view
5
- #
6
- # @param [#to_s] name (nil) The qualified name of the view
7
- # @option [Boolean] :if_exists (false) Suppress the error when the view is absent
8
- # @yield [Proc] the block with the view's definition
9
- # @yieldparam The receiver of methods specifying the view
10
- #
11
- # The operation enables to alter a view without recreating
12
- # its from scratch. You can rename columns, change their
13
- # storage settings (how the column is TOAST-ed), or
14
- # customize their statistics.
15
- #
16
- # change_materialized_view "admin_users" do |v|
17
- # v.rename_column "name", to: "full_name"
18
- # v.column "name", storage: "extended", from_storage: "expanded"
19
- # v.column "admin", n_distinct: 2
20
- # v.column "role", statistics: 100
3
+ # @!parse
4
+ # class ActiveRecord::Migration
5
+ # # Modify a materialized view
6
+ # #
7
+ # # @param [#to_s] name (nil) The qualified name of the view
8
+ # # @option [Boolean] :if_exists (false) Suppress the error when the view is absent
9
+ # # @yield [v] the block with the view's definition
10
+ # # @yieldparam Object receiver of methods specifying the view
11
+ # # @return [void]
12
+ # #
13
+ # # The operation enables to alter a view without recreating
14
+ # # its from scratch. You can rename columns, change their
15
+ # # storage settings (how the column is TOAST-ed), or
16
+ # # customize their statistics.
17
+ # #
18
+ # # change_materialized_view "admin_users" do |v|
19
+ # # v.rename_column "name", to: "full_name"
20
+ # # v.column "name", storage: "extended", from_storage: "expanded"
21
+ # # v.column "admin", n_distinct: 2
22
+ # # v.column "role", statistics: 100
23
+ # # end
24
+ # #
25
+ # # Notice that renaming will be done AFTER all changes even
26
+ # # though the order of declarations can be different.
27
+ # #
28
+ # # As in the snippet above, to make the change invertible,
29
+ # # you have to define a previous storage via `from_storage` option.
30
+ # # The inversion would always reset statistics (set it to 0).
31
+ # #
32
+ # # In addition to changing columns, the operation enables
33
+ # # to set a default clustering by given index:
34
+ # #
35
+ # # change_materialized_view "admin_users" do |v|
36
+ # # v.cluster_on "admin_users_by_names_idx"
37
+ # # end
38
+ # #
39
+ # # The clustering is invertible, but its inversion does nothing,
40
+ # # keeping the clustering unchanged.
41
+ # #
42
+ # # The comment can also be changed:
43
+ # #
44
+ # # change_materialized_view "admin_users" do |v|
45
+ # # v.comment "Admin users", from: "Admin users only"
46
+ # # end
47
+ # #
48
+ # # Notice, that without `from` option the operation is still
49
+ # # invertible, but its inversion would delete the comment.
50
+ # # It can also be reset to the blank string explicitly:
51
+ # #
52
+ # # change_materialized_view "admin_users" do |v|
53
+ # # v.comment "", from: "Admin users only"
54
+ # # end
55
+ # #
56
+ # # With the `if_exists: true` option, the operation won't fail
57
+ # # even when the view wasn't existed. At the same time,
58
+ # # this option makes a migration irreversible due to uncertainty
59
+ # # of the previous state of the database.
60
+ # def change_materialized_view(name, **options, &block); end
21
61
  # end
22
- #
23
- # Notice that renaming will be done AFTER all changes even
24
- # though the order of declarations can be different.
25
- #
26
- # As in the snippet above, to make the change invertible,
27
- # you have to define a previous storage via `from_storage` option.
28
- # The inversion would always reset statistics (set it to 0).
29
- #
30
- # In addition to changing columns, the operation enables
31
- # to set a default clustering by given index:
32
- #
33
- # change_materialized_view "admin_users" do |v|
34
- # v.cluster_on "admin_users_by_names_idx"
35
- # end
36
- #
37
- # The clustering is invertible, but its inversion does nothing,
38
- # keeping the clustering unchanged.
39
- #
40
- # The comment can also be changed:
41
- #
42
- # change_materialized_view "admin_users" do |v|
43
- # v.comment "Admin users", from: "Admin users only"
44
- # end
45
- #
46
- # Notice, that without `from` option the operation is still
47
- # invertible, but its inversion would delete the comment.
48
- # It can also be reset to the blank string explicitly:
49
- #
50
- # change_materialized_view "admin_users" do |v|
51
- # v.comment "", from: "Admin users only"
52
- # end
53
- #
54
- # With the `if_exists: true` option, the operation won't fail
55
- # even when the view wasn't existed. At the same time,
56
- # this option makes a migration irreversible due to uncertainty
57
- # of the previous state of the database.
58
-
59
62
  module PGTrunk::Operations::MaterializedViews
60
63
  # @private
61
64
  class ChangeMaterializedView < Base
@@ -1,77 +1,80 @@
1
1
  # frozen_string_literal: false
2
2
 
3
- # @!method ActiveRecord::Migration#create_materialized_view(name, **options, &block)
4
- # Create a materialized view
5
- #
6
- # @param [#to_s] name (nil) The qualified name of the view
7
- # @option [Boolean] :if_not_exists (false) Suppress the error when a view has been already created
8
- # @option [#to_s] :sql_definition (nil) The snippet containing the query
9
- # @option [#to_i] :version (nil)
10
- # The alternative way to set sql_definition by referencing to a file containing the snippet
11
- # @option [#to_s] :tablespace (nil) The tablespace for the view
12
- # @option [Boolean] :with_data (true) If the view should be populated after creation
13
- # @option [#to_s] :comment (nil) The comment describing the view
14
- # @yield [Proc] the block with the view's definition
15
- # @yieldparam The receiver of methods specifying the view
16
- #
17
- # The operation creates the view using its `sql_definition`:
18
- #
19
- # create_materialized_view("views.admin_users", sql_definition: <<~SQL)
20
- # SELECT id, name FROM users WHERE admin;
21
- # SQL
22
- #
23
- # For compatibility to the `scenic` gem, we also support
24
- # adding a definition via its version:
25
- #
26
- # create_materialized_view "admin_users", version: 1
27
- #
28
- # It is expected, that a `db/materialized_views/admin_users_v01.sql`
29
- # to contain the SQL snippet.
30
- #
31
- # The tablespace can be specified for the created view.
32
- # Notice that later it can't be changed (in PostgreSQL all rows
33
- # can be moved to another tablespace, but we don't support
34
- # this feature yet).
35
- #
36
- # create_materialized_view "admin_users" do |v|
37
- # v.tablespace "fast_ssd"
38
- # v.sql_definition <<~SQL
39
- # SELECT id, name, password, admin, on_duty
40
- # FROM users
41
- # WHERE admin
42
- # SQL
3
+ # @!parse
4
+ # class ActiveRecord::Migration
5
+ # # Create a materialized view
6
+ # #
7
+ # # @param [#to_s] name (nil) The qualified name of the view
8
+ # # @option [Boolean] :if_not_exists (false) Suppress the error when a view has been already created
9
+ # # @option [#to_s] :sql_definition (nil) The snippet containing the query
10
+ # # @option [#to_i] :version (nil)
11
+ # # The alternative way to set sql_definition by referencing to a file containing the snippet
12
+ # # @option [#to_s] :tablespace (nil) The tablespace for the view
13
+ # # @option [Boolean] :with_data (true) If the view should be populated after creation
14
+ # # @option [#to_s] :comment (nil) The comment describing the view
15
+ # # @yield [v] the block with the view's definition
16
+ # # @yieldparam Object receiver of methods specifying the view
17
+ # # @return [void]
18
+ # #
19
+ # # The operation creates the view using its `sql_definition`:
20
+ # #
21
+ # # create_materialized_view("views.admin_users", sql_definition: <<~SQL)
22
+ # # SELECT id, name FROM users WHERE admin;
23
+ # # SQL
24
+ # #
25
+ # # For compatibility to the `scenic` gem, we also support
26
+ # # adding a definition via its version:
27
+ # #
28
+ # # create_materialized_view "admin_users", version: 1
29
+ # #
30
+ # # It is expected, that a `db/materialized_views/admin_users_v01.sql`
31
+ # # to contain the SQL snippet.
32
+ # #
33
+ # # The tablespace can be specified for the created view.
34
+ # # Notice that later it can't be changed (in PostgreSQL all rows
35
+ # # can be moved to another tablespace, but we don't support
36
+ # # this feature yet).
37
+ # #
38
+ # # create_materialized_view "admin_users" do |v|
39
+ # # v.tablespace "fast_ssd"
40
+ # # v.sql_definition <<~SQL
41
+ # # SELECT id, name, password, admin, on_duty
42
+ # # FROM users
43
+ # # WHERE admin
44
+ # # SQL
45
+ # # end
46
+ # #
47
+ # # You can also set a comment describing the view,
48
+ # # and redefine the storage options for some TOAST-ed columns,
49
+ # # as well as their custom statistics:
50
+ # #
51
+ # # create_materialized_view "admin_users" do |v|
52
+ # # v.sql_definition <<~SQL
53
+ # # SELECT id, name, password, admin, on_duty
54
+ # # FROM users
55
+ # # WHERE admin
56
+ # # SQL
57
+ # #
58
+ # # v.column "password", storage: "external" # to avoid compression
59
+ # # v.column "password", n_distinct: -1 # linear dependency
60
+ # # v.column "admin", n_distinct: 1 # exact number of values
61
+ # # v.column "on_duty", statistics: 2 # the total number of values
62
+ # #
63
+ # # v.comment "Admin users only"
64
+ # # end
65
+ # #
66
+ # # With the `replace_existing: true` option the operation
67
+ # # would use `CREATE OR REPLACE VIEW` command, so it
68
+ # # can be used to "update" (or reload) the existing view.
69
+ # #
70
+ # # create_materialized_view "admin_users",
71
+ # # version: 1,
72
+ # # replace_existing: true
73
+ # #
74
+ # # This option makes the migration irreversible due to uncertainty
75
+ # # of the previous state of the database.
76
+ # def create_materialized_view(name, **options, &block); end
43
77
  # end
44
- #
45
- # You can also set a comment describing the view,
46
- # and redefine the storage options for some TOAST-ed columns,
47
- # as well as their custom statistics:
48
- #
49
- # create_materialized_view "admin_users" do |v|
50
- # v.sql_definition <<~SQL
51
- # SELECT id, name, password, admin, on_duty
52
- # FROM users
53
- # WHERE admin
54
- # SQL
55
- #
56
- # v.column "password", storage: "external" # to avoid compression
57
- # v.column "password", n_distinct: -1 # linear dependency
58
- # v.column "admin", n_distinct: 1 # exact number of values
59
- # v.column "on_duty", statistics: 2 # the total number of values
60
- #
61
- # v.comment "Admin users only"
62
- # end
63
- #
64
- # With the `replace_existing: true` option the operation
65
- # would use `CREATE OR REPLACE VIEW` command, so it
66
- # can be used to "update" (or reload) the existing view.
67
- #
68
- # create_materialized_view "admin_users",
69
- # version: 1,
70
- # replace_existing: true
71
- #
72
- # This option makes the migration irreversible due to uncertainty
73
- # of the previous state of the database.
74
-
75
78
  module PGTrunk::Operations::MaterializedViews
76
79
  # @private
77
80
  class CreateMaterializedView < Base
@@ -1,52 +1,55 @@
1
1
  # frozen_string_literal: false
2
2
 
3
- # @!method ActiveRecord::Migration#drop_materialized_view(name, **options, &block)
4
- # Drop a materialized view
5
- #
6
- # @param [#to_s] name (nil) The qualified name of the view
7
- # @option [Boolean] :if_exists (false) Suppress the error when the view is absent
8
- # @option [Symbol] :force (:restrict) How to process dependent objects (`:cascade` or `:restrict`)
9
- # @option [#to_s] :sql_definition (nil) The snippet containing the query
10
- # @option [#to_i] :revert_to_version (nil)
11
- # The alternative way to set sql_definition by referencing to a file containing the snippet
12
- # @option [#to_s] :tablespace (nil) The tablespace for the view
13
- # @option [Boolean] :with_data (true) If the view should be populated after creation
14
- # @option [#to_s] :comment (nil) The comment describing the view
15
- # @yield [Proc] the block with the view's definition
16
- # @yieldparam The receiver of methods specifying the view
17
- #
18
- # The operation drops a materialized view identified by its
19
- # qualified name (it can include a schema).
20
- #
21
- # drop_materialized_view "views.admin_users"
22
- #
23
- # To make the operation invertible, use the same options
24
- # as in the `create_view` operation.
25
- #
26
- # drop_materialized_view "views.admin_users" do |v|
27
- # v.sql_definition "SELECT name, password FROM users WHERE admin;"
28
- # v.column "password", storage: "external" # prevent compression
29
- # v.with_data false
30
- # v.comment "Admin users only"
3
+ # @!parse
4
+ # class ActiveRecord::Migration
5
+ # # Drop a materialized view
6
+ # #
7
+ # # @param [#to_s] name (nil) The qualified name of the view
8
+ # # @option [Boolean] :if_exists (false) Suppress the error when the view is absent
9
+ # # @option [Symbol] :force (:restrict) How to process dependent objects (`:cascade` or `:restrict`)
10
+ # # @option [#to_s] :sql_definition (nil) The snippet containing the query
11
+ # # @option [#to_i] :revert_to_version (nil)
12
+ # # The alternative way to set sql_definition by referencing to a file containing the snippet
13
+ # # @option [#to_s] :tablespace (nil) The tablespace for the view
14
+ # # @option [Boolean] :with_data (true) If the view should be populated after creation
15
+ # # @option [#to_s] :comment (nil) The comment describing the view
16
+ # # @yield [v] the block with the view's definition
17
+ # # @yieldparam Object receiver of methods specifying the view
18
+ # # @return [void]
19
+ # #
20
+ # # The operation drops a materialized view identified by its
21
+ # # qualified name (it can include a schema).
22
+ # #
23
+ # # drop_materialized_view "views.admin_users"
24
+ # #
25
+ # # To make the operation invertible, use the same options
26
+ # # as in the `create_view` operation.
27
+ # #
28
+ # # drop_materialized_view "views.admin_users" do |v|
29
+ # # v.sql_definition "SELECT name, password FROM users WHERE admin;"
30
+ # # v.column "password", storage: "external" # prevent compression
31
+ # # v.with_data false
32
+ # # v.comment "Admin users only"
33
+ # # end
34
+ # #
35
+ # # You can also use a version-base SQL definition like:
36
+ # #
37
+ # # drop_materialized_view "admin_users", revert_to_version: 1
38
+ # #
39
+ # # With the `force: :cascade` option the operation would remove
40
+ # # all the objects which depend on the view.
41
+ # #
42
+ # # drop_materialized_view "admin_users", force: :cascade
43
+ # #
44
+ # # With the `if_exists: true` option the operation won't fail
45
+ # # even when the view was absent in the database.
46
+ # #
47
+ # # drop_materialized_view "admin_users", if_exists: true
48
+ # #
49
+ # # Both options make a migration irreversible due to uncertainty
50
+ # # of the previous state of the database.
51
+ # def drop_materialized_view(name, **options, &block); end
31
52
  # end
32
- #
33
- # You can also use a version-base SQL definition like:
34
- #
35
- # drop_materialized_view "admin_users", revert_to_version: 1
36
- #
37
- # With the `force: :cascade` option the operation would remove
38
- # all the objects which depend on the view.
39
- #
40
- # drop_materialized_view "admin_users", force: :cascade
41
- #
42
- # With the `if_exists: true` option the operation won't fail
43
- # even when the view was absent in the database.
44
- #
45
- # drop_materialized_view "admin_users", if_exists: true
46
- #
47
- # Both options make a migration irreversible due to uncertainty
48
- # of the previous state of the database.
49
-
50
53
  module PGTrunk::Operations::MaterializedViews
51
54
  # @private
52
55
  class DropMaterializedView < Base
@@ -1,29 +1,32 @@
1
1
  # frozen_string_literal: false
2
2
 
3
- # @!method ActiveRecord::Migration#refresh_materialized_view(name, **options)
4
- # Refresh a materialized view
5
- #
6
- # @param [#to_s] name (nil) The qualified name of the view
7
- # @option [Boolean] :with_data (true) If the view should be populated after creation
8
- # @option [Symbol] :algorithm (nil) Makes the operation concurrent when set to :concurrently
9
- #
10
- # The operation enables refreshing a materialized view
11
- # by reloading its underlying SQL query:
12
- #
13
- # refresh_materialized_view "admin_users"
14
- #
15
- # The option `algorithm: :concurrently` acts exactly
16
- # like in the `create_index` definition. You should
17
- # possibly add the `disable_ddl_transaction!` command
18
- # to the migration as well.
19
- #
20
- # With option `with_data: false` the command won't
21
- # update the data. This option can't be used along with
22
- # the `:algorithm`.
23
- #
24
- # The operation is always reversible, though its
25
- # inversion does nothing.
26
-
3
+ # @!parse
4
+ # class ActiveRecord::Migration
5
+ # # Refresh a materialized view
6
+ # #
7
+ # # @param [#to_s] name (nil) The qualified name of the view
8
+ # # @option [Boolean] :with_data (true) If the view should be populated after creation
9
+ # # @option [Symbol] :algorithm (nil) Makes the operation concurrent when set to :concurrently
10
+ # # @return [void]
11
+ # #
12
+ # # The operation enables refreshing a materialized view
13
+ # # by reloading its underlying SQL query:
14
+ # #
15
+ # # refresh_materialized_view "admin_users"
16
+ # #
17
+ # # The option `algorithm: :concurrently` acts exactly
18
+ # # like in the `create_index` definition. You should
19
+ # # possibly add the `disable_ddl_transaction!` command
20
+ # # to the migration as well.
21
+ # #
22
+ # # With option `with_data: false` the command won't
23
+ # # update the data. This option can't be used along with
24
+ # # the `:algorithm`.
25
+ # #
26
+ # # The operation is always reversible, though its
27
+ # # inversion does nothing.
28
+ # def refresh_materialized_view(name, **options); end
29
+ # end
27
30
  module PGTrunk::Operations::MaterializedViews
28
31
  # @private
29
32
  class RefreshMaterializedView < Base