-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsql.go
138 lines (130 loc) · 2.82 KB
/
sql.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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
// sql interface
package main
import (
"database/sql"
"fmt"
"os"
"time"
_ "github.com/go-sql-driver/mysql"
)
var database *sql.DB
// connect to SQL
func sqlInit() {
var err error
host, _ := os.Hostname()
log("connect to SQL: " + host)
database, err = sql.Open("mysql", c.SQL[host])
database.SetMaxOpenConns(5)
database.SetMaxIdleConns(0)
if err != nil {
panic("Unable to connect to SQL!")
}
log("SQL init complete")
}
// attempts the query 10 times, and panics if it fails
func safeExec(query string) int64 {
var tries int
Again:
statement, err := database.Prepare(query)
defer statement.Close()
if err != nil {
var logquery string
if len(query) > 505 {
logquery = query[:250] + " ... " + query[len(query)-250:]
} else {
logquery = query
}
log(err, fmt.Sprintf("Query was: (%d)%s", len(query), logquery))
tries++
if tries < 11 {
time.Sleep(1 * time.Second)
goto Again
}
panic(query)
} else {
res, err := statement.Exec()
if err != nil {
var logquery string
if len(query) > 505 {
logquery = query[:250] + " ... " + query[len(query)-250:]
} else {
logquery = query
}
log(err, fmt.Sprintf("Query was: (%d)%s", len(query), logquery))
tries++
if tries < 11 {
time.Sleep(1 * time.Second)
goto Again
}
panic(query)
} else {
aff, err := res.RowsAffected()
if err != nil {
log(err)
aff = 0
}
return aff
}
}
}
func safeQuery(query string) *sql.Rows {
var tries int
Again:
statement, err := database.Prepare(query)
defer statement.Close()
if err != nil {
var logquery string
if len(query) > 505 {
logquery = query[:250] + " ... " + query[len(query)-250:]
} else {
logquery = query
}
log(err, fmt.Sprintf("Query was: (%d)%s", len(query), logquery))
tries++
if tries < 11 {
time.Sleep(5 * time.Second)
goto Again
}
panic(query)
} else {
res, err := statement.Query()
if err != nil {
var logquery string
if len(query) > 505 {
logquery = query[:250] + " ... " + query[len(query)-250:]
} else {
logquery = query
}
log(err, fmt.Sprintf("Query was: (%d)%s", len(query), logquery))
tries++
if tries < 11 {
time.Sleep(5 * time.Second)
goto Again
}
panic(query)
} else {
return res
}
}
}
func safePrepare(query string) *sql.Stmt {
var tries int
PrepareAgain:
statement, err := database.Prepare(query)
if err != nil {
var logquery string
if len(query) > 505 {
logquery = query[:250] + " ... " + query[len(query)-250:]
} else {
logquery = query
}
log(err, fmt.Sprintf("Query was: (%d)%s", len(query), logquery))
tries++
if tries < 11 {
time.Sleep(5 * time.Second)
goto PrepareAgain
}
panic(query)
}
return statement
}