diff --git a/SynchRoGazer.go b/SynchRoGazer.go index 1a4dbd9..1a81f31 100644 --- a/SynchRoGazer.go +++ b/SynchRoGazer.go @@ -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