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 err error
var rows *sql.Rows var rows *sql.Rows
if settings.Binary { hMd5, _ := hex.DecodeString(result.MD5)
h_md5, _ := hex.DecodeString(result.MD5) hSha256, _ := hex.DecodeString(result.SHA256)
h_sha256, _ := hex.DecodeString(result.SHA256)
switch settings.Mode { if settings.Binary && settings.Mode == "insert" {
case "insert": rows, err = settings.InsertSTMT.Query(result.Path, hMd5, hSha256)
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) } else if settings.Binary && settings.Mode == "update" {
case "update": rows, err = settings.UpdateSTMT.Query(result.Path, hMd5, hSha256)
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 if !settings.Binary && settings.Mode == "insert" {
} rows, err = settings.InsertSTMT.Query(result.Path, hMd5, hSha256)
} else { } else if !settings.Binary && settings.Mode == "update" {
switch settings.Mode { rows, err = settings.UpdateSTMT.Query(result.Path, hMd5, hSha256)
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)
}
} }
if err != nil { if err != nil {
@ -107,14 +102,12 @@ func PostgresHashFileResult(result *HashFileResult, settings PostgresSettings) {
} }
type PostgresSettings struct { type PostgresSettings struct {
Handle *sql.DB Handle *sql.DB
ConnStr string ConnStr string
Binary bool Binary bool
Mode string Mode string
Table string InsertSTMT *sql.Stmt
PathRow string UpdateSTMT *sql.Stmt
MD5Row string
SHA256Row string
} }
func main() { func main() {
@ -142,10 +135,8 @@ func main() {
*pgConnStr, *pgConnStr,
*pgBinary, *pgBinary,
*pgMode, *pgMode,
*pgTable, nil,
*pgPathRow, nil,
*pgMd5Row,
*pgSha256Row,
} }
if *outputFormat == "postgres" && pgSettings.ConnStr != "" { if *outputFormat == "postgres" && pgSettings.ConnStr != "" {
@ -154,6 +145,24 @@ func main() {
log.Fatal(err) log.Fatal(err)
} }
pgSettings.Handle = handle 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 var taskCount int64