initial commit
This commit is contained in:
83
cmd/stripColumns/main.go
Normal file
83
cmd/stripColumns/main.go
Normal file
@@ -0,0 +1,83 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"flag"
|
||||
"log"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
)
|
||||
|
||||
var (
|
||||
dbURL = flag.String("db", "julian:hi@/test", "Die URL zur Datenbank")
|
||||
table = flag.String("table", "Teilnehmer", "Die Tabelle")
|
||||
key = flag.String("key", "Matrnr", "Der Tabellenschlüsselname")
|
||||
attr = flag.String("attr", "Nachname", "Die Spalte zum Cleanen")
|
||||
)
|
||||
|
||||
const (
|
||||
querySelect = "SELECT ?,? FROM ?"
|
||||
queryUpdate = "UPDATE ? SET ?=? WHERE ?=?"
|
||||
)
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
db, err := sql.Open("mysql", *dbURL)
|
||||
if err != nil {
|
||||
log.Fatal("error connecting to database:", err)
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
statement, err := db.Prepare("SELECT " + *key + "," + *attr + " FROM " + *table)
|
||||
|
||||
if err != nil {
|
||||
log.Fatal("error in precompiled statement:", querySelect+":", err)
|
||||
}
|
||||
defer statement.Close()
|
||||
|
||||
rows, err := statement.Query()
|
||||
|
||||
if err != nil {
|
||||
log.Fatal("error executing query:", err)
|
||||
}
|
||||
|
||||
context, err := db.Begin()
|
||||
if err != nil {
|
||||
log.Fatal("error creating context:", err)
|
||||
}
|
||||
|
||||
update, err := context.Prepare("UPDATE " + *table + " SET " + *attr + "=? WHERE " + *key + "=?")
|
||||
if err != nil {
|
||||
log.Fatal("error in precompiled statement:", queryUpdate+":", err)
|
||||
}
|
||||
|
||||
var (
|
||||
keyBuffer int
|
||||
dirty, clean string
|
||||
|
||||
count int
|
||||
)
|
||||
|
||||
for rows.Next() {
|
||||
if err = rows.Scan(&keyBuffer, &dirty); err != nil {
|
||||
log.Println("error while reading:", err)
|
||||
}
|
||||
|
||||
clean = strip(dirty)
|
||||
if clean != dirty {
|
||||
if result, err := update.Exec(clean, keyBuffer); err != nil {
|
||||
log.Fatal("error on update, change canceled:", err)
|
||||
} else if i, err := result.RowsAffected(); err == nil && i != 1 {
|
||||
log.Fatal("changed to many rows... aborting")
|
||||
} else {
|
||||
count++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
log.Println("committing change,", count, "rows affected")
|
||||
if err := context.Commit(); err != nil {
|
||||
log.Println("could not commit changed:", err)
|
||||
}
|
||||
}
|
||||
15
cmd/stripColumns/strip.go
Normal file
15
cmd/stripColumns/strip.go
Normal file
@@ -0,0 +1,15 @@
|
||||
package main
|
||||
|
||||
func strip(str string) (output string) {
|
||||
var (
|
||||
start = 0
|
||||
end = len(str)
|
||||
)
|
||||
for ; start < len(str) && str[start] == ' '; start++ {
|
||||
}
|
||||
|
||||
for ; end > 0 && str[end-1] == ' '; end-- {
|
||||
}
|
||||
|
||||
return str[start:end]
|
||||
}
|
||||
Reference in New Issue
Block a user