package main import ( "fmt" "strings" "git.ksdemosapps.com/kylesoda/go-migrate/internal/app/config" ) func buildExtractQueryMssql(sourceDbInfo config.SourceTableInfo, 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]", sourceDbInfo.Schema, sourceDbInfo.Table) if includeRange { fmt.Fprintf(&sbQuery, " WHERE [%s]", sourceDbInfo.PrimaryKey) if isMinInclusive { sbQuery.WriteString(" >=") } else { sbQuery.WriteString(" >") } fmt.Fprintf(&sbQuery, " @min AND [%s] <= @max", sourceDbInfo.PrimaryKey) } fmt.Fprintf(&sbQuery, " ORDER BY [%s] ASC", sourceDbInfo.PrimaryKey) return sbQuery.String() } func buildExtractQueryPostgres(sourceDbInfo config.SourceTableInfo, 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(), sourceDbInfo.Schema, sourceDbInfo.Table, sourceDbInfo.PrimaryKey) }