@@ -174,7 +174,7 @@ var (
174174
175175 outputFormatSql = outputFormat {
176176 identifier : "sql" ,
177- convertToOutputString : planToSqlS ,
177+ convertToOutputString : planToSql ,
178178 }
179179
180180 outputFormats = []outputFormat {
@@ -590,6 +590,7 @@ func hazardToPrettyS(hazard diff.MigrationHazard) string {
590590 }
591591}
592592
593+ // planToJsonS converts the plan to JSON.
593594func planToJsonS (plan diff.Plan ) string {
594595 jsonData , err := json .MarshalIndent (plan , "" , " " )
595596 if err != nil {
@@ -598,18 +599,21 @@ func planToJsonS(plan diff.Plan) string {
598599 return string (jsonData )
599600}
600601
601- func planToSqlS (plan diff.Plan ) string {
602+ // planToSql converts the plan to one large runnable SQL script.
603+ func planToSql (plan diff.Plan ) string {
602604 sb := strings.Builder {}
603-
604- if len (plan .Statements ) == 0 {
605- return ""
606- }
607-
608- var stmtStrs []string
609- for _ , stmt := range plan .Statements {
610- stmtStrs = append (stmtStrs , statementToPrettyS (stmt ))
605+ for i , stmt := range plan .Statements {
606+ if len (stmt .Hazards ) > 0 {
607+ for _ , hazard := range stmt .Hazards {
608+ sb .WriteString (fmt .Sprintf ("-- Hazard %s\n " , hazardToPrettyS (hazard )))
609+ }
610+ }
611+ sb .WriteString (fmt .Sprintf ("SET SESSION statement_timeout = %d;\n " , stmt .Timeout .Milliseconds ()))
612+ sb .WriteString (fmt .Sprintf ("SET SESSION lock_timeout = %d;\n " , stmt .LockTimeout .Milliseconds ()))
613+ sb .WriteString (fmt .Sprintf ("%s;" , stmt .DDL ))
614+ if i < len (plan .Statements )- 1 {
615+ sb .WriteString ("\n \n " )
616+ }
611617 }
612- sb .WriteString (strings .Join (stmtStrs , "\n \n " ))
613-
614618 return sb .String ()
615619}
0 commit comments