76 lines
1.8 KiB
Go
76 lines
1.8 KiB
Go
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)
|
|
}
|