@@ -20,37 +20,51 @@ func buildApplyCmd() *cobra.Command {
2020 Short : "Migrate your database to the match the inputted schema (apply the schema to the database)" ,
2121 }
2222
23- connFlags := createConnFlags (cmd )
24- planFlags := createPlanFlags (cmd )
23+ connFlags := createConnectionFlags (cmd , "from-" , " The database to migrate" )
24+ toSchemaFlags := createSchemaSourceFlags (cmd , "to-" )
25+ planOptsFlags := createPlanOptionsFlags (cmd )
2526 allowedHazardsTypesStrs := cmd .Flags ().StringSlice ("allow-hazards" , nil ,
2627 "Specify the hazards that are allowed. Order does not matter, and duplicates are ignored. If the" +
2728 " migration plan contains unwanted hazards (hazards not in this list), then the migration will fail to run" +
2829 " (example: --allowed-hazards DELETES_DATA,INDEX_BUILD)" )
2930 skipConfirmPrompt := cmd .Flags ().Bool ("skip-confirm-prompt" , false , "Skips prompt asking for user to confirm before applying" )
3031 cmd .RunE = func (cmd * cobra.Command , args []string ) error {
3132 logger := log .SimpleLogger ()
32- connConfig , err := parseConnConfig (* connFlags , logger )
33+
34+ connConfig , err := parseConnectionFlags (connFlags )
35+ if err != nil {
36+ return err
37+ }
38+ fromSchema := dsnSchemaSource (connConfig )
39+
40+ toSchema , err := parseSchemaSource (* toSchemaFlags )
3341 if err != nil {
3442 return err
3543 }
3644
37- planConfig , err := parsePlanConfig ( * planFlags )
45+ planOptions , err := parsePlanOptions ( * planOptsFlags )
3846 if err != nil {
3947 return err
4048 }
4149
4250 cmd .SilenceUsage = true
4351
44- plan , err := generatePlan (context .Background (), logger , connConfig , planConfig )
52+ plan , err := generatePlan (cmd .Context (), generatePlanParameters {
53+ fromSchema : fromSchema ,
54+ toSchema : toSchema ,
55+ tempDbConnConfig : connConfig ,
56+ planOptions : planOptions ,
57+ logger : logger ,
58+ })
4559 if err != nil {
4660 return err
4761 } else if len (plan .Statements ) == 0 {
48- fmt .Println ("Schema matches expected. No plan generated" )
62+ cmd .Println ("Schema matches expected. No plan generated" )
4963 return nil
5064 }
5165
52- fmt .Println (header ("Review plan" ))
53- fmt .Print (planToPrettyS (plan ), "\n \n " )
66+ cmd .Println (header ("Review plan" ))
67+ cmd .Print (planToPrettyS (plan ), "\n \n " )
5468
5569 if err := failIfHazardsNotAllowed (plan , * allowedHazardsTypesStrs ); err != nil {
5670 return err
@@ -67,10 +81,10 @@ func buildApplyCmd() *cobra.Command {
6781 }
6882 }
6983
70- if err := runPlan (context . Background () , connConfig , plan ); err != nil {
84+ if err := runPlan (cmd . Context (), cmd , connConfig , plan ); err != nil {
7185 return err
7286 }
73- fmt .Println ("Schema applied successfully" )
87+ cmd .Println ("Schema applied successfully" )
7488 return nil
7589 }
7690
@@ -109,7 +123,7 @@ func failIfHazardsNotAllowed(plan diff.Plan, allowedHazardsTypesStrs []string) e
109123 return nil
110124}
111125
112- func runPlan (ctx context.Context , connConfig * pgx.ConnConfig , plan diff.Plan ) error {
126+ func runPlan (ctx context.Context , cmd * cobra. Command , connConfig * pgx.ConnConfig , plan diff.Plan ) error {
113127 connPool , err := openDbWithPgxConfig (connConfig )
114128 if err != nil {
115129 return err
@@ -129,8 +143,8 @@ func runPlan(ctx context.Context, connConfig *pgx.ConnConfig, plan diff.Plan) er
129143 // must be executed within its own transaction block. Postgres will error if you try to set a TRANSACTION-level
130144 // timeout for it. SESSION-level statement_timeouts are respected by `ADD INDEX CONCURRENTLY`
131145 for i , stmt := range plan .Statements {
132- fmt .Println (header (fmt .Sprintf ("Executing statement %d" , getDisplayableStmtIdx (i ))))
133- fmt .Printf ("%s\n \n " , statementToPrettyS (stmt ))
146+ cmd .Println (header (fmt .Sprintf ("Executing statement %d" , getDisplayableStmtIdx (i ))))
147+ cmd .Printf ("%s\n \n " , statementToPrettyS (stmt ))
134148 start := time .Now ()
135149 if _ , err := conn .ExecContext (ctx , fmt .Sprintf ("SET SESSION statement_timeout = %d" , stmt .Timeout .Milliseconds ())); err != nil {
136150 return fmt .Errorf ("setting statement timeout: %w" , err )
@@ -141,9 +155,9 @@ func runPlan(ctx context.Context, connConfig *pgx.ConnConfig, plan diff.Plan) er
141155 if _ , err := conn .ExecContext (ctx , stmt .ToSQL ()); err != nil {
142156 return fmt .Errorf ("executing migration statement. the database maybe be in a dirty state: %s: %w" , stmt , err )
143157 }
144- fmt .Printf ("Finished executing statement. Duration: %s\n " , time .Since (start ))
158+ cmd .Printf ("Finished executing statement. Duration: %s\n " , time .Since (start ))
145159 }
146- fmt .Println (header ("Complete" ))
160+ cmd .Println (header ("Complete" ))
147161
148162 return nil
149163}
0 commit comments