Reworked postgres parts to use prepared statements
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
DataHoarder 2022-01-16 00:26:50 +01:00
parent dd819dafc9
commit 07f88e7508

View file

@ -80,22 +80,17 @@ func PostgresHashFileResult(result *HashFileResult, settings PostgresSettings) {
var err error
var rows *sql.Rows
if settings.Binary {
h_md5, _ := hex.DecodeString(result.MD5)
h_sha256, _ := hex.DecodeString(result.SHA256)
switch settings.Mode {
case "insert":
rows, err = settings.Handle.Query(fmt.Sprintf("INSERT INTO %s (%s, %s, %s) VALUES ($1, $2, $3);", pq.QuoteIdentifier(settings.Table), pq.QuoteIdentifier(settings.PathRow), pq.QuoteIdentifier(settings.MD5Row), pq.QuoteIdentifier(settings.SHA256Row)), result.Path, h_md5, h_sha256)
case "update":
rows, err = settings.Handle.Query(fmt.Sprintf("UPDATE %s SET %s = $2, %s = $3 WHERE %s = $1;", pq.QuoteIdentifier(settings.Table), pq.QuoteIdentifier(settings.MD5Row), pq.QuoteIdentifier(settings.SHA256Row), pq.QuoteIdentifier(settings.PathRow)), result.Path, h_md5, h_sha256)
}
} else {
switch settings.Mode {
case "insert":
rows, err = settings.Handle.Query(fmt.Sprintf("INSERT INTO %s (%s, %s, %s) VALUES ($1, $2, $3);", pq.QuoteIdentifier(settings.Table), pq.QuoteIdentifier(settings.PathRow), pq.QuoteIdentifier(settings.MD5Row), pq.QuoteIdentifier(settings.SHA256Row)), result.Path, result.MD5, result.SHA256)
case "update":
rows, err = settings.Handle.Query(fmt.Sprintf("UPDATE %s SET %s = $2, %s = $3 WHERE %s = $1;", pq.QuoteIdentifier(settings.Table), pq.QuoteIdentifier(settings.MD5Row), pq.QuoteIdentifier(settings.SHA256Row), pq.QuoteIdentifier(settings.PathRow)), result.Path, result.MD5, result.SHA256)
}
hMd5, _ := hex.DecodeString(result.MD5)
hSha256, _ := hex.DecodeString(result.SHA256)
if settings.Binary && settings.Mode == "insert" {
rows, err = settings.InsertSTMT.Query(result.Path, hMd5, hSha256)
} else if settings.Binary && settings.Mode == "update" {
rows, err = settings.UpdateSTMT.Query(result.Path, hMd5, hSha256)
} else if !settings.Binary && settings.Mode == "insert" {
rows, err = settings.InsertSTMT.Query(result.Path, hMd5, hSha256)
} else if !settings.Binary && settings.Mode == "update" {
rows, err = settings.UpdateSTMT.Query(result.Path, hMd5, hSha256)
}
if err != nil {
@ -107,14 +102,12 @@ func PostgresHashFileResult(result *HashFileResult, settings PostgresSettings) {
}
type PostgresSettings struct {
Handle *sql.DB
ConnStr string
Binary bool
Mode string
Table string
PathRow string
MD5Row string
SHA256Row string
Handle *sql.DB
ConnStr string
Binary bool
Mode string
InsertSTMT *sql.Stmt
UpdateSTMT *sql.Stmt
}
func main() {
@ -142,10 +135,8 @@ func main() {
*pgConnStr,
*pgBinary,
*pgMode,
*pgTable,
*pgPathRow,
*pgMd5Row,
*pgSha256Row,
nil,
nil,
}
if *outputFormat == "postgres" && pgSettings.ConnStr != "" {
@ -154,6 +145,24 @@ func main() {
log.Fatal(err)
}
pgSettings.Handle = handle
pgSettings.InsertSTMT, err = pgSettings.Handle.Prepare(fmt.Sprintf("INSERT INTO %s (%s, %s, %s) VALUES ($1, $2, $3);",
pq.QuoteIdentifier(*pgTable),
pq.QuoteIdentifier(*pgPathRow),
pq.QuoteIdentifier(*pgMd5Row),
pq.QuoteIdentifier(*pgSha256Row),
))
if err != nil {
log.Fatal(err)
}
pgSettings.UpdateSTMT, err = pgSettings.Handle.Prepare(fmt.Sprintf("UPDATE %s SET %s = $2, %s = $3 WHERE %s = $1;",
pq.QuoteIdentifier(*pgTable),
pq.QuoteIdentifier(*pgPathRow),
pq.QuoteIdentifier(*pgMd5Row),
pq.QuoteIdentifier(*pgSha256Row),
))
if err != nil {
log.Fatal(err)
}
}
var taskCount int64