Files
sql-csv-generator/generator.go
2025-04-29 18:38:14 +09:30

60 lines
1.3 KiB
Go

package main
import (
"encoding/csv"
"fmt"
"math/rand"
"os"
)
func generateCSV(outputFile string) error {
columns, err := fetchTableMetadata()
if err != nil {
return fmt.Errorf("error fetching table metadata: %w", err)
}
file, err := os.Create(outputFile)
if err != nil {
return fmt.Errorf("could not create file: %w", err)
}
defer file.Close()
writer := csv.NewWriter(file)
defer writer.Flush()
header := make([]string, len(columns))
for i, col := range columns {
header[i] = col.Name
}
err = writer.Write(header)
if err != nil {
return fmt.Errorf("error writing header: %w", err)
}
for i := 0; i < numRows; i++ {
rowData := make([]string, len(columns))
for j, col := range columns {
switch col.TypeName {
case "integer", "float":
rowData[j] = fmt.Sprint(rand.Intn(1000))
case "varchar", "text":
rowData[j] = fmt.Sprintf("sample text %d", rand.Intn(100))
default:
rowData[j] = ""
}
if col.MaxCharacterLength != nil && *col.MaxCharacterLength < len(rowData[j]) {
rowData[j] = rowData[j][:*col.MaxCharacterLength]
}
}
err := writer.Write(rowData)
if err != nil {
return fmt.Errorf("error writing row data: %w", err)
}
}
fmt.Printf("CSV file '%s' generated successfully\n", outputFile)
return nil
}