diff --git a/cmd/go_migrate/main.go b/cmd/go_migrate/main.go index 56efa9b..3e289af 100644 --- a/cmd/go_migrate/main.go +++ b/cmd/go_migrate/main.go @@ -135,6 +135,7 @@ func processMigrationJobs( transformer, loader, job, + targetDb.GetDialect(), ) chJobResults <- res diff --git a/cmd/go_migrate/process.go b/cmd/go_migrate/process.go index 19b9c27..574d17a 100644 --- a/cmd/go_migrate/process.go +++ b/cmd/go_migrate/process.go @@ -18,6 +18,20 @@ import ( "golang.org/x/sync/errgroup" ) +func buildTruncateQuery(targetDbType, schema, table, truncateMethod string) string { + if truncateMethod == "DELETE" { + if targetDbType == "postgres" { + return fmt.Sprintf(`DELETE FROM "%s"."%s"`, schema, table) + } + return fmt.Sprintf(`DELETE FROM [%s].[%s]`, schema, table) + } + + if targetDbType == "postgres" { + return fmt.Sprintf(`TRUNCATE TABLE "%s"."%s"`, schema, table) + } + return fmt.Sprintf(`TRUNCATE TABLE [%s].[%s]`, schema, table) +} + func processMigrationJob( ctx context.Context, targetDbWrapper dbwrapper.DbWrapper, @@ -27,6 +41,7 @@ func processMigrationJob( transformer etl.Transformer, loader etl.Loader, job config.Job, + targetDbType string, ) models.JobResult { localCtx, cancel := context.WithCancel(ctx) defer cancel() @@ -67,7 +82,13 @@ func processMigrationJob( return result } - for _, query := range job.PreSQL { + preSqlQueries := job.PreSQL + if job.TruncateTarget { + truncateQuery := buildTruncateQuery(targetDbType, job.TargetTable.Schema, job.TargetTable.Table, job.TruncateMethod) + preSqlQueries = append([]string{truncateQuery}, job.PreSQL...) + } + + for _, query := range preSqlQueries { if _, err := targetDbWrapper.Exec(localCtx, query); err != nil { result.Error = err return result diff --git a/config.yaml b/config.yaml index 42aee99..d3a94c7 100644 --- a/config.yaml +++ b/config.yaml @@ -30,7 +30,6 @@ jobs: table: MANZANA pre_sql: - 'SELECT 1' - # - 'TRUNCATE TABLE "Cartografia"."MANZANA"' range: min: 1000000 max: 2000000 @@ -48,6 +47,5 @@ jobs: table: PUERTO pre_sql: - 'SELECT 1' - # - 'TRUNCATE TABLE "Red"."PUERTO"' post_sql: - "SELECT 1"