diff --git a/cmd/go_migrate/build-extract-query.go b/cmd/go_migrate/build-extract-query.go new file mode 100644 index 0000000..3a00640 --- /dev/null +++ b/cmd/go_migrate/build-extract-query.go @@ -0,0 +1,60 @@ +package main + +import ( + "fmt" + "strings" +) + +func buildExtractQueryMssql(job MigrationJob, columns []ColumnType) string { + var sbColumns strings.Builder + + if len(columns) == 0 { + sbColumns.WriteString("*") + } else { + for i, col := range columns { + sbColumns.WriteString("[") + sbColumns.WriteString(col.name) + sbColumns.WriteString("]") + + if col.unifiedType == "GEOMETRY" { + sbColumns.WriteString(".STAsWKB() AS [") + sbColumns.WriteString(col.name) + sbColumns.WriteString("]") + } + + if i < len(columns)-1 { + sbColumns.WriteString(", ") + } + } + } + + return fmt.Sprintf(`SELECT %s FROM [%s].[%s] WITH (NOLOCK)`, sbColumns.String(), job.Schema, job.Table) +} + +func buildExtractQueryPostgres(job MigrationJob, columns []ColumnType) string { + var sbColumns strings.Builder + + if len(columns) == 0 { + sbColumns.WriteString("*") + } else { + for i, col := range columns { + if col.unifiedType == "GEOMETRY" { + sbColumns.WriteString(`ST_AsEWKB("`) + sbColumns.WriteString(col.name) + sbColumns.WriteString(`") AS "`) + sbColumns.WriteString(col.name) + sbColumns.WriteString(`"`) + } else { + sbColumns.WriteString(`"`) + sbColumns.WriteString(col.name) + sbColumns.WriteString(`"`) + } + + if i < len(columns)-1 { + sbColumns.WriteString(", ") + } + } + } + + return fmt.Sprintf(`SELECT %s FROM "%s"."%s"`, sbColumns.String(), job.Schema, job.Table) +} diff --git a/cmd/go_migrate/process.go b/cmd/go_migrate/process.go index 5f88812..6f1c099 100644 --- a/cmd/go_migrate/process.go +++ b/cmd/go_migrate/process.go @@ -16,6 +16,13 @@ func processMigrationJob(sourceDb *sql.DB, targetDb *pgxpool.Pool, job Migration logColumnTypes(sourceColTypes, "Source col types") logColumnTypes(targetColTypes, "Target col types") + + sourceQuery := buildExtractQueryMssql(job, sourceColTypes) + + log.Debug(sourceQuery) + + targetQuery := buildExtractQueryPostgres(job, targetColTypes) + log.Debug(targetQuery) } func logColumnTypes(columnTypes []ColumnType, label string) {