package main import ( "fmt" "strings" ) func buildExtractQueryMssql(job MigrationJob, columns []ColumnType, includeRange bool, isMinInclusive bool) string { var sbQuery strings.Builder sbQuery.WriteString("SELECT ") if len(columns) == 0 { sbQuery.WriteString("*") } else { for i, col := range columns { fmt.Fprintf(&sbQuery, "[%s]", col.name) if col.unifiedType == "GEOMETRY" { fmt.Fprintf(&sbQuery, ".STAsBinary() AS [%s]", col.name) } if i < len(columns)-1 { sbQuery.WriteString(", ") } } } fmt.Fprintf(&sbQuery, " FROM [%s].[%s]", job.Schema, job.Table) if includeRange { fmt.Fprintf(&sbQuery, " WHERE [%s]", job.PrimaryKey) if isMinInclusive { sbQuery.WriteString(" >=") } else { sbQuery.WriteString(" >") } fmt.Fprintf(&sbQuery, " @min AND [%s] <= @max", job.PrimaryKey) } fmt.Fprintf(&sbQuery, " ORDER BY [%s] ASC", job.PrimaryKey) return sbQuery.String() } 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" ORDER BY "%s" ASC`, sbColumns.String(), job.Schema, job.Table, job.PrimaryKey) }