dynamic_migrations 2.2.0 → 3.1.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.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +28 -4
 - data/lib/dynamic_migrations/active_record/migrators/column.rb +21 -0
 - data/lib/dynamic_migrations/active_record/migrators/foreign_key_constraint.rb +112 -0
 - data/lib/dynamic_migrations/active_record/migrators/function.rb +108 -0
 - data/lib/dynamic_migrations/active_record/migrators/index.rb +27 -0
 - data/lib/dynamic_migrations/active_record/migrators/schema.rb +21 -0
 - data/lib/dynamic_migrations/active_record/migrators/table.rb +21 -0
 - data/lib/dynamic_migrations/active_record/migrators/trigger.rb +109 -0
 - data/lib/dynamic_migrations/active_record/migrators/unique_constraint.rb +63 -0
 - data/lib/dynamic_migrations/active_record/migrators/validation.rb +67 -0
 - data/lib/dynamic_migrations/active_record/migrators.rb +64 -0
 - data/lib/dynamic_migrations/name_helper.rb +13 -0
 - data/lib/dynamic_migrations/postgres/generator/column.rb +92 -0
 - data/lib/dynamic_migrations/postgres/generator/foreign_key_constraint.rb +84 -0
 - data/lib/dynamic_migrations/postgres/generator/fragment.rb +30 -0
 - data/lib/dynamic_migrations/postgres/generator/function.rb +77 -0
 - data/lib/dynamic_migrations/postgres/generator/index.rb +101 -0
 - data/lib/dynamic_migrations/postgres/generator/primary_key.rb +55 -0
 - data/lib/dynamic_migrations/postgres/generator/schema.rb +19 -0
 - data/lib/dynamic_migrations/postgres/generator/schema_migrations/section.rb +37 -0
 - data/lib/dynamic_migrations/postgres/generator/schema_migrations.rb +92 -0
 - data/lib/dynamic_migrations/postgres/generator/table.rb +122 -0
 - data/lib/dynamic_migrations/postgres/generator/trigger.rb +101 -0
 - data/lib/dynamic_migrations/postgres/generator/unique_constraint.rb +79 -0
 - data/lib/dynamic_migrations/postgres/generator/validation.rb +87 -0
 - data/lib/dynamic_migrations/postgres/generator.rb +359 -0
 - data/lib/dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/functions.rb +68 -0
 - data/lib/dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables/columns.rb +72 -0
 - data/lib/dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables/foreign_key_constraints.rb +73 -0
 - data/lib/dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables/indexes.rb +73 -0
 - data/lib/dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables/primary_key.rb +49 -0
 - data/lib/dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables/triggers.rb +73 -0
 - data/lib/dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables/unique_constraints.rb +73 -0
 - data/lib/dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables/validations.rb +73 -0
 - data/lib/dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables.rb +80 -0
 - data/lib/dynamic_migrations/postgres/server/database/differences/to_migrations/schemas.rb +48 -0
 - data/lib/dynamic_migrations/postgres/server/database/differences/to_migrations.rb +59 -0
 - data/lib/dynamic_migrations/postgres/server/database/differences.rb +81 -6
 - data/lib/dynamic_migrations/postgres/server/database/keys_and_unique_constraints_loader.rb +35 -9
 - data/lib/dynamic_migrations/postgres/server/database/loaded_schemas_builder.rb +49 -8
 - data/lib/dynamic_migrations/postgres/server/database/schema/function.rb +69 -0
 - data/lib/dynamic_migrations/postgres/server/database/schema/functions.rb +63 -0
 - data/lib/dynamic_migrations/postgres/server/database/schema/table/column.rb +4 -0
 - data/lib/dynamic_migrations/postgres/server/database/schema/table/columns.rb +1 -1
 - data/lib/dynamic_migrations/postgres/server/database/schema/table/foreign_key_constraint.rb +40 -5
 - data/lib/dynamic_migrations/postgres/server/database/schema/table/index.rb +23 -9
 - data/lib/dynamic_migrations/postgres/server/database/schema/table/primary_key.rb +21 -6
 - data/lib/dynamic_migrations/postgres/server/database/schema/table/trigger.rb +151 -0
 - data/lib/dynamic_migrations/postgres/server/database/schema/table/triggers.rb +66 -0
 - data/lib/dynamic_migrations/postgres/server/database/schema/table/unique_constraint.rb +19 -9
 - data/lib/dynamic_migrations/postgres/server/database/schema/table/validation.rb +20 -1
 - data/lib/dynamic_migrations/postgres/server/database/schema/table.rb +15 -5
 - data/lib/dynamic_migrations/postgres/server/database/schema/tables.rb +63 -0
 - data/lib/dynamic_migrations/postgres/server/database/schema.rb +3 -49
 - data/lib/dynamic_migrations/postgres/server/database/source.rb +21 -0
 - data/lib/dynamic_migrations/postgres/server/database/structure_loader.rb +6 -6
 - data/lib/dynamic_migrations/postgres/server/database/triggers_and_functions_loader.rb +131 -0
 - data/lib/dynamic_migrations/postgres/server/database/validations_loader.rb +10 -4
 - data/lib/dynamic_migrations/postgres/server/database.rb +2 -1
 - data/lib/dynamic_migrations/postgres/server.rb +6 -0
 - data/lib/dynamic_migrations/postgres.rb +1 -1
 - data/lib/dynamic_migrations/version.rb +1 -1
 - data/lib/dynamic_migrations.rb +47 -3
 - metadata +44 -2
 
| 
         @@ -0,0 +1,131 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module DynamicMigrations
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Postgres
         
     | 
| 
      
 5 
     | 
    
         
            +
                class Server
         
     | 
| 
      
 6 
     | 
    
         
            +
                  class Database
         
     | 
| 
      
 7 
     | 
    
         
            +
                    module TriggersAndFunctionsLoader
         
     | 
| 
      
 8 
     | 
    
         
            +
                      class EventTriggerProcedureSchemaMismatchError < StandardError
         
     | 
| 
      
 9 
     | 
    
         
            +
                      end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                      # fetch all columns from the database and build and return a
         
     | 
| 
      
 12 
     | 
    
         
            +
                      # useful hash representing the triggers_and_functions of your database
         
     | 
| 
      
 13 
     | 
    
         
            +
                      #
         
     | 
| 
      
 14 
     | 
    
         
            +
                      # this query is very fast, so does not need cached (a materialized view)
         
     | 
| 
      
 15 
     | 
    
         
            +
                      def fetch_triggers_and_functions
         
     | 
| 
      
 16 
     | 
    
         
            +
                        rows = connection.exec(<<~SQL)
         
     | 
| 
      
 17 
     | 
    
         
            +
                          SELECT
         
     | 
| 
      
 18 
     | 
    
         
            +
                            n.nspname AS trigger_schema,
         
     | 
| 
      
 19 
     | 
    
         
            +
                            t.tgname AS trigger_name,
         
     | 
| 
      
 20 
     | 
    
         
            +
                            em.text AS event_manipulation,
         
     | 
| 
      
 21 
     | 
    
         
            +
                            n.nspname AS event_object_schema,
         
     | 
| 
      
 22 
     | 
    
         
            +
                            c.relname AS event_object_table,
         
     | 
| 
      
 23 
     | 
    
         
            +
                            rank() OVER (
         
     | 
| 
      
 24 
     | 
    
         
            +
                              PARTITION BY (n.nspname),
         
     | 
| 
      
 25 
     | 
    
         
            +
                              (c.relname),
         
     | 
| 
      
 26 
     | 
    
         
            +
                              em.num,
         
     | 
| 
      
 27 
     | 
    
         
            +
                              (t.tgtype & 1),
         
     | 
| 
      
 28 
     | 
    
         
            +
                              (t.tgtype & 66)
         
     | 
| 
      
 29 
     | 
    
         
            +
                              ORDER BY
         
     | 
| 
      
 30 
     | 
    
         
            +
                                t.tgname
         
     | 
| 
      
 31 
     | 
    
         
            +
                            ) AS action_order,
         
     | 
| 
      
 32 
     | 
    
         
            +
                            CASE WHEN pg_has_role(c.relowner, 'USAGE') THEN (
         
     | 
| 
      
 33 
     | 
    
         
            +
                              regexp_match(
         
     | 
| 
      
 34 
     | 
    
         
            +
                                pg_get_triggerdef(t.oid),
         
     | 
| 
      
 35 
     | 
    
         
            +
                                '.{35,} WHEN ((.+)) EXECUTE FUNCTION'
         
     | 
| 
      
 36 
     | 
    
         
            +
                              )
         
     | 
| 
      
 37 
     | 
    
         
            +
                            ) [1] ELSE NULL END AS action_condition,
         
     | 
| 
      
 38 
     | 
    
         
            +
                            p_n.nspname AS function_schema,
         
     | 
| 
      
 39 
     | 
    
         
            +
                            p.proname AS function_name,
         
     | 
| 
      
 40 
     | 
    
         
            +
                            p.prosrc AS function_definition,
         
     | 
| 
      
 41 
     | 
    
         
            +
                            SUBSTRING(
         
     | 
| 
      
 42 
     | 
    
         
            +
                              pg_get_triggerdef(t.oid)
         
     | 
| 
      
 43 
     | 
    
         
            +
                              FROM
         
     | 
| 
      
 44 
     | 
    
         
            +
                                POSITION(
         
     | 
| 
      
 45 
     | 
    
         
            +
                                  ('EXECUTE FUNCTION') IN (
         
     | 
| 
      
 46 
     | 
    
         
            +
                                    SUBSTRING(
         
     | 
| 
      
 47 
     | 
    
         
            +
                                      pg_get_triggerdef(t.oid)
         
     | 
| 
      
 48 
     | 
    
         
            +
                                      FROM
         
     | 
| 
      
 49 
     | 
    
         
            +
                                        48
         
     | 
| 
      
 50 
     | 
    
         
            +
                                    )
         
     | 
| 
      
 51 
     | 
    
         
            +
                                  )
         
     | 
| 
      
 52 
     | 
    
         
            +
                                ) + 47
         
     | 
| 
      
 53 
     | 
    
         
            +
                            ) AS action_statement,
         
     | 
| 
      
 54 
     | 
    
         
            +
                            CASE t.tgtype & 1 WHEN 1 THEN 'row' ELSE 'statement' END AS action_orientation,
         
     | 
| 
      
 55 
     | 
    
         
            +
                            CASE t.tgtype & 66 WHEN 2 THEN 'before' WHEN 64 THEN 'instead_of' ELSE 'after' END AS action_timing,
         
     | 
| 
      
 56 
     | 
    
         
            +
                            t.tgoldtable AS action_reference_old_table,
         
     | 
| 
      
 57 
     | 
    
         
            +
                            t.tgnewtable AS action_reference_new_table,
         
     | 
| 
      
 58 
     | 
    
         
            +
                            obj_description(t.oid, 'pg_trigger') as description,
         
     | 
| 
      
 59 
     | 
    
         
            +
                            obj_description(p.oid, 'pg_proc') as function_description
         
     | 
| 
      
 60 
     | 
    
         
            +
                          FROM
         
     | 
| 
      
 61 
     | 
    
         
            +
                            -- trigger tables
         
     | 
| 
      
 62 
     | 
    
         
            +
                            pg_namespace n,
         
     | 
| 
      
 63 
     | 
    
         
            +
                            pg_class c,
         
     | 
| 
      
 64 
     | 
    
         
            +
                            pg_trigger t,
         
     | 
| 
      
 65 
     | 
    
         
            +
                            -- procedure tables
         
     | 
| 
      
 66 
     | 
    
         
            +
                            pg_proc p,
         
     | 
| 
      
 67 
     | 
    
         
            +
                            pg_namespace p_n,
         
     | 
| 
      
 68 
     | 
    
         
            +
                            (
         
     | 
| 
      
 69 
     | 
    
         
            +
                              VALUES
         
     | 
| 
      
 70 
     | 
    
         
            +
                                (4, 'insert'),
         
     | 
| 
      
 71 
     | 
    
         
            +
                                (8, 'delete'),
         
     | 
| 
      
 72 
     | 
    
         
            +
                                (16, 'update')
         
     | 
| 
      
 73 
     | 
    
         
            +
                            ) em(num, text)
         
     | 
| 
      
 74 
     | 
    
         
            +
                          WHERE
         
     | 
| 
      
 75 
     | 
    
         
            +
                            n.oid = c.relnamespace
         
     | 
| 
      
 76 
     | 
    
         
            +
                            AND c.oid = t.tgrelid
         
     | 
| 
      
 77 
     | 
    
         
            +
                            AND p.oid = t.tgfoid
         
     | 
| 
      
 78 
     | 
    
         
            +
                            AND p_n.oid = p.pronamespace
         
     | 
| 
      
 79 
     | 
    
         
            +
                            AND (t.tgtype & em.num) <> 0
         
     | 
| 
      
 80 
     | 
    
         
            +
                            AND NOT t.tgisinternal
         
     | 
| 
      
 81 
     | 
    
         
            +
                            AND NOT pg_is_other_temp_schema(n.oid)
         
     | 
| 
      
 82 
     | 
    
         
            +
                            AND (
         
     | 
| 
      
 83 
     | 
    
         
            +
                              pg_has_role(c.relowner, 'USAGE')
         
     | 
| 
      
 84 
     | 
    
         
            +
                              OR has_table_privilege(
         
     | 
| 
      
 85 
     | 
    
         
            +
                                c.oid, 'INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'
         
     | 
| 
      
 86 
     | 
    
         
            +
                              )
         
     | 
| 
      
 87 
     | 
    
         
            +
                              OR has_any_column_privilege(
         
     | 
| 
      
 88 
     | 
    
         
            +
                                c.oid, 'INSERT, UPDATE, REFERENCES'
         
     | 
| 
      
 89 
     | 
    
         
            +
                              )
         
     | 
| 
      
 90 
     | 
    
         
            +
                            );
         
     | 
| 
      
 91 
     | 
    
         
            +
                        SQL
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                        schemas = {}
         
     | 
| 
      
 94 
     | 
    
         
            +
                        rows.each do |row|
         
     | 
| 
      
 95 
     | 
    
         
            +
                          trigger_name = row["trigger_name"].to_sym
         
     | 
| 
      
 96 
     | 
    
         
            +
                          event_object_schema = row["event_object_schema"].to_sym
         
     | 
| 
      
 97 
     | 
    
         
            +
                          event_object_table = row["event_object_table"].to_sym
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
                          schema = schemas[event_object_schema] ||= {}
         
     | 
| 
      
 100 
     | 
    
         
            +
                          table = schema[event_object_table] ||= {}
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                          # by convention (and to simplify things) we place these all in the same schema
         
     | 
| 
      
 103 
     | 
    
         
            +
                          unless row["trigger_schema"] == row["function_schema"] && row["function_schema"] == row["event_object_schema"]
         
     | 
| 
      
 104 
     | 
    
         
            +
                            raise EventTriggerProcedureSchemaMismatchError, "Expected trigger, procedure and event_object to be in the same schema for trigger '#{trigger_name}'"
         
     | 
| 
      
 105 
     | 
    
         
            +
                          end
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
                          table[trigger_name] = {
         
     | 
| 
      
 108 
     | 
    
         
            +
                            trigger_schema: row["trigger_schema"].to_sym,
         
     | 
| 
      
 109 
     | 
    
         
            +
                            event_manipulation: row["event_manipulation"].to_sym,
         
     | 
| 
      
 110 
     | 
    
         
            +
                            action_order: row["action_order"].to_i,
         
     | 
| 
      
 111 
     | 
    
         
            +
                            action_condition: row["action_condition"],
         
     | 
| 
      
 112 
     | 
    
         
            +
                            function_schema: row["function_schema"].to_sym,
         
     | 
| 
      
 113 
     | 
    
         
            +
                            function_name: row["function_name"].to_sym,
         
     | 
| 
      
 114 
     | 
    
         
            +
                            function_definition: row["function_definition"],
         
     | 
| 
      
 115 
     | 
    
         
            +
                            action_statement: row["action_statement"],
         
     | 
| 
      
 116 
     | 
    
         
            +
                            action_orientation: row["action_orientation"].to_sym,
         
     | 
| 
      
 117 
     | 
    
         
            +
                            action_timing: row["action_timing"].to_sym,
         
     | 
| 
      
 118 
     | 
    
         
            +
                            # `action_reference_old_table` and `action_reference_new_table` can be null
         
     | 
| 
      
 119 
     | 
    
         
            +
                            action_reference_old_table: row["action_reference_old_table"]&.to_sym,
         
     | 
| 
      
 120 
     | 
    
         
            +
                            action_reference_new_table: row["action_reference_new_table"]&.to_sym,
         
     | 
| 
      
 121 
     | 
    
         
            +
                            description: row["description"],
         
     | 
| 
      
 122 
     | 
    
         
            +
                            function_description: row["function_description"]
         
     | 
| 
      
 123 
     | 
    
         
            +
                          }
         
     | 
| 
      
 124 
     | 
    
         
            +
                        end
         
     | 
| 
      
 125 
     | 
    
         
            +
                        schemas
         
     | 
| 
      
 126 
     | 
    
         
            +
                      end
         
     | 
| 
      
 127 
     | 
    
         
            +
                    end
         
     | 
| 
      
 128 
     | 
    
         
            +
                  end
         
     | 
| 
      
 129 
     | 
    
         
            +
                end
         
     | 
| 
      
 130 
     | 
    
         
            +
              end
         
     | 
| 
      
 131 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -12,7 +12,9 @@ module DynamicMigrations 
     | 
|
| 
       12 
12 
     | 
    
         
             
                              table_constraints.table_name,
         
     | 
| 
       13 
13 
     | 
    
         
             
                              array_agg(col.column_name ORDER BY col.column_name) AS columns,
         
     | 
| 
       14 
14 
     | 
    
         
             
                              table_constraints.constraint_name as validation_name,
         
     | 
| 
       15 
     | 
    
         
            -
                               
     | 
| 
      
 15 
     | 
    
         
            +
                              pg_get_expr(conbin, conrelid, true) as check_clause,
         
     | 
| 
      
 16 
     | 
    
         
            +
                              obj_description(pgc.oid, 'pg_constraint') as description,
         
     | 
| 
      
 17 
     | 
    
         
            +
                              -- in case we need to update this query in a later version of DynamicMigrations
         
     | 
| 
       16 
18 
     | 
    
         
             
                              1 as table_version
         
     | 
| 
       17 
19 
     | 
    
         
             
                            FROM information_schema.table_constraints
         
     | 
| 
       18 
20 
     | 
    
         
             
                            JOIN information_schema.check_constraints
         
     | 
| 
         @@ -30,6 +32,7 @@ module DynamicMigrations 
     | 
|
| 
       30 
32 
     | 
    
         
             
                              AND table_constraints.constraint_schema != 'postgis'
         
     | 
| 
       31 
33 
     | 
    
         
             
                              AND left(table_constraints.constraint_schema, 3) != 'pg_'
         
     | 
| 
       32 
34 
     | 
    
         
             
                            GROUP BY
         
     | 
| 
      
 35 
     | 
    
         
            +
                              pgc.oid,
         
     | 
| 
       33 
36 
     | 
    
         
             
                              table_constraints.table_schema,
         
     | 
| 
       34 
37 
     | 
    
         
             
                              table_constraints.table_name,
         
     | 
| 
       35 
38 
     | 
    
         
             
                              table_constraints.constraint_name,
         
     | 
| 
         @@ -47,12 +50,12 @@ module DynamicMigrations 
     | 
|
| 
       47 
50 
     | 
    
         
             
                      # useful hash representing the validations of your database
         
     | 
| 
       48 
51 
     | 
    
         
             
                      def fetch_validations
         
     | 
| 
       49 
52 
     | 
    
         
             
                        begin
         
     | 
| 
       50 
     | 
    
         
            -
                          rows = connection. 
     | 
| 
      
 53 
     | 
    
         
            +
                          rows = connection.exec(<<~SQL)
         
     | 
| 
       51 
54 
     | 
    
         
             
                            SELECT * FROM public.dynamic_migrations_validations_cache
         
     | 
| 
       52 
55 
     | 
    
         
             
                          SQL
         
     | 
| 
       53 
56 
     | 
    
         
             
                        rescue PG::UndefinedTable
         
     | 
| 
       54 
57 
     | 
    
         
             
                          create_database_validations_cache
         
     | 
| 
       55 
     | 
    
         
            -
                          rows = connection. 
     | 
| 
      
 58 
     | 
    
         
            +
                          rows = connection.exec(<<~SQL)
         
     | 
| 
       56 
59 
     | 
    
         
             
                            SELECT * FROM public.dynamic_migrations_validations_cache
         
     | 
| 
       57 
60 
     | 
    
         
             
                          SQL
         
     | 
| 
       58 
61 
     | 
    
         
             
                        end
         
     | 
| 
         @@ -69,7 +72,10 @@ module DynamicMigrations 
     | 
|
| 
       69 
72 
     | 
    
         | 
| 
       70 
73 
     | 
    
         
             
                          table[validation_name] = {
         
     | 
| 
       71 
74 
     | 
    
         
             
                            columns: row["columns"].gsub(/\A\{/, "").gsub(/\}\Z/, "").split(",").map { |column_name| column_name.to_sym },
         
     | 
| 
       72 
     | 
    
         
            -
                            check_clause: row["check_clause"]
         
     | 
| 
      
 75 
     | 
    
         
            +
                            check_clause: row["check_clause"],
         
     | 
| 
      
 76 
     | 
    
         
            +
                            description: row["description"],
         
     | 
| 
      
 77 
     | 
    
         
            +
                            deferrable: row["deferrable"] == "TRUE",
         
     | 
| 
      
 78 
     | 
    
         
            +
                            initially_deferred: row["initially_deferred"] == "TRUE"
         
     | 
| 
       73 
79 
     | 
    
         
             
                          }
         
     | 
| 
       74 
80 
     | 
    
         
             
                        end
         
     | 
| 
       75 
81 
     | 
    
         
             
                        schemas
         
     | 
| 
         @@ -13,6 +13,7 @@ module DynamicMigrations 
     | 
|
| 
       13 
13 
     | 
    
         
             
                    include StructureLoader
         
     | 
| 
       14 
14 
     | 
    
         
             
                    include ValidationsLoader
         
     | 
| 
       15 
15 
     | 
    
         
             
                    include KeysAndUniqueConstraintsLoader
         
     | 
| 
      
 16 
     | 
    
         
            +
                    include TriggersAndFunctionsLoader
         
     | 
| 
       16 
17 
     | 
    
         
             
                    include LoadedSchemas
         
     | 
| 
       17 
18 
     | 
    
         
             
                    include ConfiguredSchemas
         
     | 
| 
       18 
19 
     | 
    
         
             
                    include LoadedSchemasBuilder
         
     | 
| 
         @@ -46,7 +47,7 @@ module DynamicMigrations 
     | 
|
| 
       46 
47 
     | 
    
         
             
                    end
         
     | 
| 
       47 
48 
     | 
    
         | 
| 
       48 
49 
     | 
    
         
             
                    def differences
         
     | 
| 
       49 
     | 
    
         
            -
                      Differences.new(self) 
     | 
| 
      
 50 
     | 
    
         
            +
                      Differences.new(self)
         
     | 
| 
       50 
51 
     | 
    
         
             
                    end
         
     | 
| 
       51 
52 
     | 
    
         
             
                  end
         
     | 
| 
       52 
53 
     | 
    
         
             
                end
         
     | 
| 
         @@ -2,7 +2,7 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module DynamicMigrations
         
     | 
| 
       4 
4 
     | 
    
         
             
              # This module exists only to namespace Postgres functionality and
         
     | 
| 
       5 
     | 
    
         
            -
              # make it possible to add other database/storage types in the  
     | 
| 
      
 5 
     | 
    
         
            +
              # make it possible to add other database/storage types in the future.
         
     | 
| 
       6 
6 
     | 
    
         
             
              module Postgres
         
     | 
| 
       7 
7 
     | 
    
         
             
              end
         
     | 
| 
       8 
8 
     | 
    
         
             
            end
         
     | 
    
        data/lib/dynamic_migrations.rb
    CHANGED
    
    | 
         @@ -14,30 +14,74 @@ require "dynamic_migrations/postgres/server/database/connection" 
     | 
|
| 
       14 
14 
     | 
    
         
             
            require "dynamic_migrations/postgres/server/database/structure_loader"
         
     | 
| 
       15 
15 
     | 
    
         
             
            require "dynamic_migrations/postgres/server/database/validations_loader"
         
     | 
| 
       16 
16 
     | 
    
         
             
            require "dynamic_migrations/postgres/server/database/keys_and_unique_constraints_loader"
         
     | 
| 
      
 17 
     | 
    
         
            +
            require "dynamic_migrations/postgres/server/database/triggers_and_functions_loader"
         
     | 
| 
       17 
18 
     | 
    
         
             
            require "dynamic_migrations/postgres/server/database/loaded_schemas_builder"
         
     | 
| 
       18 
     | 
    
         
            -
            require "dynamic_migrations/postgres/server/database/differences"
         
     | 
| 
       19 
19 
     | 
    
         
             
            require "dynamic_migrations/postgres/server/database/loaded_schemas"
         
     | 
| 
       20 
20 
     | 
    
         
             
            require "dynamic_migrations/postgres/server/database/configured_schemas"
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            require "dynamic_migrations/postgres/server/database/differences"
         
     | 
| 
      
 23 
     | 
    
         
            +
            require "dynamic_migrations/postgres/server/database/differences/to_migrations/schemas"
         
     | 
| 
      
 24 
     | 
    
         
            +
            require "dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables"
         
     | 
| 
      
 25 
     | 
    
         
            +
            require "dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables/columns"
         
     | 
| 
      
 26 
     | 
    
         
            +
            require "dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables/foreign_key_constraints"
         
     | 
| 
      
 27 
     | 
    
         
            +
            require "dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables/indexes"
         
     | 
| 
      
 28 
     | 
    
         
            +
            require "dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables/primary_key"
         
     | 
| 
      
 29 
     | 
    
         
            +
            require "dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables/triggers"
         
     | 
| 
      
 30 
     | 
    
         
            +
            require "dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables/unique_constraints"
         
     | 
| 
      
 31 
     | 
    
         
            +
            require "dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables/validations"
         
     | 
| 
      
 32 
     | 
    
         
            +
            require "dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/functions"
         
     | 
| 
      
 33 
     | 
    
         
            +
            require "dynamic_migrations/postgres/server/database/differences/to_migrations"
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
       21 
35 
     | 
    
         
             
            require "dynamic_migrations/postgres/server/database"
         
     | 
| 
       22 
36 
     | 
    
         
             
            require "dynamic_migrations/postgres/server/database/source"
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            require "dynamic_migrations/postgres/server/database/schema/tables"
         
     | 
| 
      
 39 
     | 
    
         
            +
            require "dynamic_migrations/postgres/server/database/schema/functions"
         
     | 
| 
       23 
40 
     | 
    
         
             
            require "dynamic_migrations/postgres/server/database/schema"
         
     | 
| 
      
 41 
     | 
    
         
            +
            require "dynamic_migrations/postgres/server/database/schema/function"
         
     | 
| 
       24 
42 
     | 
    
         
             
            require "dynamic_migrations/postgres/server/database/schema/table/validations"
         
     | 
| 
       25 
43 
     | 
    
         
             
            require "dynamic_migrations/postgres/server/database/schema/table/indexes"
         
     | 
| 
       26 
44 
     | 
    
         
             
            require "dynamic_migrations/postgres/server/database/schema/table/foreign_key_constraints"
         
     | 
| 
       27 
45 
     | 
    
         
             
            require "dynamic_migrations/postgres/server/database/schema/table/unique_constraints"
         
     | 
| 
       28 
46 
     | 
    
         
             
            require "dynamic_migrations/postgres/server/database/schema/table/columns"
         
     | 
| 
      
 47 
     | 
    
         
            +
            require "dynamic_migrations/postgres/server/database/schema/table/triggers"
         
     | 
| 
       29 
48 
     | 
    
         
             
            require "dynamic_migrations/postgres/server/database/schema/table"
         
     | 
| 
       30 
49 
     | 
    
         
             
            require "dynamic_migrations/postgres/server/database/schema/table/column"
         
     | 
| 
       31 
50 
     | 
    
         
             
            require "dynamic_migrations/postgres/server/database/schema/table/validation"
         
     | 
| 
       32 
51 
     | 
    
         
             
            require "dynamic_migrations/postgres/server/database/schema/table/foreign_key_constraint"
         
     | 
| 
       33 
52 
     | 
    
         
             
            require "dynamic_migrations/postgres/server/database/schema/table/index"
         
     | 
| 
       34 
53 
     | 
    
         
             
            require "dynamic_migrations/postgres/server/database/schema/table/primary_key"
         
     | 
| 
      
 54 
     | 
    
         
            +
            require "dynamic_migrations/postgres/server/database/schema/table/trigger"
         
     | 
| 
       35 
55 
     | 
    
         
             
            require "dynamic_migrations/postgres/server/database/schema/table/unique_constraint"
         
     | 
| 
       36 
56 
     | 
    
         | 
| 
       37 
57 
     | 
    
         
             
            require "dynamic_migrations/postgres/server"
         
     | 
| 
       38 
58 
     | 
    
         
             
            require "dynamic_migrations/postgres/connections"
         
     | 
| 
       39 
59 
     | 
    
         | 
| 
      
 60 
     | 
    
         
            +
            require "dynamic_migrations/postgres/generator/schema"
         
     | 
| 
      
 61 
     | 
    
         
            +
            require "dynamic_migrations/postgres/generator/table"
         
     | 
| 
      
 62 
     | 
    
         
            +
            require "dynamic_migrations/postgres/generator/column"
         
     | 
| 
      
 63 
     | 
    
         
            +
            require "dynamic_migrations/postgres/generator/foreign_key_constraint"
         
     | 
| 
      
 64 
     | 
    
         
            +
            require "dynamic_migrations/postgres/generator/function"
         
     | 
| 
      
 65 
     | 
    
         
            +
            require "dynamic_migrations/postgres/generator/index"
         
     | 
| 
      
 66 
     | 
    
         
            +
            require "dynamic_migrations/postgres/generator/primary_key"
         
     | 
| 
      
 67 
     | 
    
         
            +
            require "dynamic_migrations/postgres/generator/trigger"
         
     | 
| 
      
 68 
     | 
    
         
            +
            require "dynamic_migrations/postgres/generator/unique_constraint"
         
     | 
| 
      
 69 
     | 
    
         
            +
            require "dynamic_migrations/postgres/generator/validation"
         
     | 
| 
      
 70 
     | 
    
         
            +
            require "dynamic_migrations/postgres/generator"
         
     | 
| 
      
 71 
     | 
    
         
            +
            require "dynamic_migrations/postgres/generator/fragment"
         
     | 
| 
      
 72 
     | 
    
         
            +
            require "dynamic_migrations/postgres/generator/schema_migrations"
         
     | 
| 
      
 73 
     | 
    
         
            +
            require "dynamic_migrations/postgres/generator/schema_migrations/section"
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
            require "dynamic_migrations/active_record/migrators/schema"
         
     | 
| 
      
 76 
     | 
    
         
            +
            require "dynamic_migrations/active_record/migrators/validation"
         
     | 
| 
      
 77 
     | 
    
         
            +
            require "dynamic_migrations/active_record/migrators/foreign_key_constraint"
         
     | 
| 
      
 78 
     | 
    
         
            +
            require "dynamic_migrations/active_record/migrators/unique_constraint"
         
     | 
| 
      
 79 
     | 
    
         
            +
            require "dynamic_migrations/active_record/migrators/function"
         
     | 
| 
      
 80 
     | 
    
         
            +
            require "dynamic_migrations/active_record/migrators/trigger"
         
     | 
| 
      
 81 
     | 
    
         
            +
            require "dynamic_migrations/active_record/migrators/table"
         
     | 
| 
      
 82 
     | 
    
         
            +
            require "dynamic_migrations/active_record/migrators/index"
         
     | 
| 
      
 83 
     | 
    
         
            +
            require "dynamic_migrations/active_record/migrators/column"
         
     | 
| 
      
 84 
     | 
    
         
            +
            require "dynamic_migrations/active_record/migrators"
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
       40 
86 
     | 
    
         
             
            module DynamicMigrations
         
     | 
| 
       41 
     | 
    
         
            -
              class Error < StandardError
         
     | 
| 
       42 
     | 
    
         
            -
              end
         
     | 
| 
       43 
87 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: dynamic_migrations
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version:  
     | 
| 
      
 4 
     | 
    
         
            +
              version: 3.1.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Craig Ulliott
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2023- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2023-08-14 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: pg
         
     | 
| 
         @@ -65,23 +65,61 @@ files: 
     | 
|
| 
       65 
65 
     | 
    
         
             
            - LICENSE.txt
         
     | 
| 
       66 
66 
     | 
    
         
             
            - README.md
         
     | 
| 
       67 
67 
     | 
    
         
             
            - lib/dynamic_migrations.rb
         
     | 
| 
      
 68 
     | 
    
         
            +
            - lib/dynamic_migrations/active_record/migrators.rb
         
     | 
| 
      
 69 
     | 
    
         
            +
            - lib/dynamic_migrations/active_record/migrators/column.rb
         
     | 
| 
      
 70 
     | 
    
         
            +
            - lib/dynamic_migrations/active_record/migrators/foreign_key_constraint.rb
         
     | 
| 
      
 71 
     | 
    
         
            +
            - lib/dynamic_migrations/active_record/migrators/function.rb
         
     | 
| 
      
 72 
     | 
    
         
            +
            - lib/dynamic_migrations/active_record/migrators/index.rb
         
     | 
| 
      
 73 
     | 
    
         
            +
            - lib/dynamic_migrations/active_record/migrators/schema.rb
         
     | 
| 
      
 74 
     | 
    
         
            +
            - lib/dynamic_migrations/active_record/migrators/table.rb
         
     | 
| 
      
 75 
     | 
    
         
            +
            - lib/dynamic_migrations/active_record/migrators/trigger.rb
         
     | 
| 
      
 76 
     | 
    
         
            +
            - lib/dynamic_migrations/active_record/migrators/unique_constraint.rb
         
     | 
| 
      
 77 
     | 
    
         
            +
            - lib/dynamic_migrations/active_record/migrators/validation.rb
         
     | 
| 
       68 
78 
     | 
    
         
             
            - lib/dynamic_migrations/expected_boolean_error.rb
         
     | 
| 
       69 
79 
     | 
    
         
             
            - lib/dynamic_migrations/expected_integer_error.rb
         
     | 
| 
       70 
80 
     | 
    
         
             
            - lib/dynamic_migrations/expected_string_error.rb
         
     | 
| 
       71 
81 
     | 
    
         
             
            - lib/dynamic_migrations/expected_symbol_error.rb
         
     | 
| 
       72 
82 
     | 
    
         
             
            - lib/dynamic_migrations/invalid_source_error.rb
         
     | 
| 
       73 
83 
     | 
    
         
             
            - lib/dynamic_migrations/module_included_into_unexpected_target_error.rb
         
     | 
| 
      
 84 
     | 
    
         
            +
            - lib/dynamic_migrations/name_helper.rb
         
     | 
| 
       74 
85 
     | 
    
         
             
            - lib/dynamic_migrations/postgres.rb
         
     | 
| 
       75 
86 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/connections.rb
         
     | 
| 
      
 87 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/generator.rb
         
     | 
| 
      
 88 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/generator/column.rb
         
     | 
| 
      
 89 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/generator/foreign_key_constraint.rb
         
     | 
| 
      
 90 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/generator/fragment.rb
         
     | 
| 
      
 91 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/generator/function.rb
         
     | 
| 
      
 92 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/generator/index.rb
         
     | 
| 
      
 93 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/generator/primary_key.rb
         
     | 
| 
      
 94 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/generator/schema.rb
         
     | 
| 
      
 95 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/generator/schema_migrations.rb
         
     | 
| 
      
 96 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/generator/schema_migrations/section.rb
         
     | 
| 
      
 97 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/generator/table.rb
         
     | 
| 
      
 98 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/generator/trigger.rb
         
     | 
| 
      
 99 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/generator/unique_constraint.rb
         
     | 
| 
      
 100 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/generator/validation.rb
         
     | 
| 
       76 
101 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/server.rb
         
     | 
| 
       77 
102 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/server/database.rb
         
     | 
| 
       78 
103 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/server/database/configured_schemas.rb
         
     | 
| 
       79 
104 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/server/database/connection.rb
         
     | 
| 
       80 
105 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/server/database/differences.rb
         
     | 
| 
      
 106 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/server/database/differences/to_migrations.rb
         
     | 
| 
      
 107 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/server/database/differences/to_migrations/schemas.rb
         
     | 
| 
      
 108 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/functions.rb
         
     | 
| 
      
 109 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables.rb
         
     | 
| 
      
 110 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables/columns.rb
         
     | 
| 
      
 111 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables/foreign_key_constraints.rb
         
     | 
| 
      
 112 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables/indexes.rb
         
     | 
| 
      
 113 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables/primary_key.rb
         
     | 
| 
      
 114 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables/triggers.rb
         
     | 
| 
      
 115 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables/unique_constraints.rb
         
     | 
| 
      
 116 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/server/database/differences/to_migrations/schemas/tables/validations.rb
         
     | 
| 
       81 
117 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/server/database/keys_and_unique_constraints_loader.rb
         
     | 
| 
       82 
118 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/server/database/loaded_schemas.rb
         
     | 
| 
       83 
119 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/server/database/loaded_schemas_builder.rb
         
     | 
| 
       84 
120 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/server/database/schema.rb
         
     | 
| 
      
 121 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/server/database/schema/function.rb
         
     | 
| 
      
 122 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/server/database/schema/functions.rb
         
     | 
| 
       85 
123 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/server/database/schema/table.rb
         
     | 
| 
       86 
124 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/server/database/schema/table/column.rb
         
     | 
| 
       87 
125 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/server/database/schema/table/columns.rb
         
     | 
| 
         @@ -90,12 +128,16 @@ files: 
     | 
|
| 
       90 
128 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/server/database/schema/table/index.rb
         
     | 
| 
       91 
129 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/server/database/schema/table/indexes.rb
         
     | 
| 
       92 
130 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/server/database/schema/table/primary_key.rb
         
     | 
| 
      
 131 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/server/database/schema/table/trigger.rb
         
     | 
| 
      
 132 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/server/database/schema/table/triggers.rb
         
     | 
| 
       93 
133 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/server/database/schema/table/unique_constraint.rb
         
     | 
| 
       94 
134 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/server/database/schema/table/unique_constraints.rb
         
     | 
| 
       95 
135 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/server/database/schema/table/validation.rb
         
     | 
| 
       96 
136 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/server/database/schema/table/validations.rb
         
     | 
| 
      
 137 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/server/database/schema/tables.rb
         
     | 
| 
       97 
138 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/server/database/source.rb
         
     | 
| 
       98 
139 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/server/database/structure_loader.rb
         
     | 
| 
      
 140 
     | 
    
         
            +
            - lib/dynamic_migrations/postgres/server/database/triggers_and_functions_loader.rb
         
     | 
| 
       99 
141 
     | 
    
         
             
            - lib/dynamic_migrations/postgres/server/database/validations_loader.rb
         
     | 
| 
       100 
142 
     | 
    
         
             
            - lib/dynamic_migrations/version.rb
         
     | 
| 
       101 
143 
     | 
    
         
             
            homepage: 
         
     |