package main import ( "context" "database/sql" "fmt" "math/rand" "time" "git.ksdemosapps.com/kylesoda/go-migrate/internal/app/config" "github.com/twpayne/go-geom" "github.com/twpayne/go-geom/encoding/wkb" ) func connectToSqlServer() (*sql.DB, error) { db, err := sql.Open("sqlserver", config.App.SourceDbUrl) if err != nil { return nil, fmt.Errorf("Unable to connect to sqlserver: %w", err) } ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) defer cancel() if err := db.PingContext(ctx); err != nil { return nil, fmt.Errorf("Unable to ping sqlserver: %w", err) } return db, nil } func Map[T any, V any](input []T, mapper func(T) V) []V { result := make([]V, len(input)) for i, v := range input { result[i] = mapper(v) } return result } func generateRandomPolygonWKB() []byte { minX := rand.Float64()*180 - 90 minY := rand.Float64()*180 - 90 size := 0.01 coords := []geom.Coord{ {minX, minY}, {minX + size, minY}, {minX + size, minY + size}, {minX, minY + size}, {minX, minY}, } polygon := geom.NewPolygon(geom.XY).MustSetCoords([][]geom.Coord{coords}) polygonWkb, _ := wkb.Marshal(polygon, wkb.NDR) return polygonWkb } func generateRandomTimestamp(min, max time.Time) time.Time { minUnix := min.Unix() maxUnix := max.Unix() delta := maxUnix - minUnix secAleatorios := rand.Int63n(delta) return time.Unix(minUnix+secAleatorios, 0) } func generateRandomString(maxLength int) string { const charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" length := min(rand.Intn(maxLength)+1, maxLength) b := make([]byte, length) for i := range b { b[i] = charset[rand.Intn(len(charset))] } return string(b) }