/
corrections.go
79 lines (75 loc) · 1.76 KB
/
corrections.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package main
import (
"database/sql"
"encoding/csv"
"fmt"
"github.com/pkg/errors"
"os"
"strconv"
"strings"
)
var fieldNames = []string{
"artists",
"year",
"titel",
"doctype",
"dauer",
"performers",
"festival",
"eventcurator",
"eventplace",
"medium",
"descr",
"remark",
"function",
"camera",
"anderesformat",
"additional",
"nachname",
"vorname",
"web",
"email",
"jahrgang",
"adresse",
"tel",
"rechtebangbang",
"rechtemediathek",
}
func correction(db *sql.DB, csvFile string) error {
f, err := os.Open(csvFile)
if err != nil {
return errors.Wrapf(err, "cannot open %s", csvFile)
}
defer f.Close()
csvReader := csv.NewReader(f)
records, err := csvReader.ReadAll()
if err != nil {
return errors.Wrapf(err, "cannot read %s", csvFile)
}
fields := make(map[string]int)
for key, val := range records[0] {
fields[val] = key
}
sqlstr := "UPDATE formdata SET value=? WHERE formid=? AND name=?" //; UPDATE formdata SET value=\"\" WHERE formid=9 AND name=\"performers\"; REPLACE INTO locked VALUES(9);\n"
sqlstr2 := "REPLACE INTO locked VALUES(?)"
for key, record := range records {
if key == 0 {
continue
}
formid, err := strconv.ParseInt(record[fields["id"]], 10, 64)
if err != nil {
return errors.Wrapf(err, "cannot parse formid %s", record[fields["id"]])
}
fmt.Printf("form %d of %d: #%d\n", key, len(records), formid)
for _, fldname := range fieldNames {
value := strings.TrimSpace(record[fields[fldname]])
if _, err := db.Exec(sqlstr, value, formid, fldname); err != nil {
return errors.Wrapf(err, "cannot execute %s [%v]", sqlstr, []interface{}{value, formid, fldname})
}
}
if _, err := db.Exec(sqlstr2, formid); err != nil {
return errors.Wrapf(err, "cannot execute %s [%v]", sqlstr2, formid)
}
}
return nil
}