Add pg binary mode
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
DataHoarder 2022-01-15 23:33:05 +01:00
parent 8e85935969
commit dd819dafc9

View file

@ -79,12 +79,25 @@ func PrintHashFileResult(result *HashFileResult, format string, settings Postgre
func PostgresHashFileResult(result *HashFileResult, settings PostgresSettings) {
var err error
var rows *sql.Rows
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)
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)
}
}
if err != nil {
fmt.Fprintln(os.Stderr, result.Path, "SQL Error: ", err)
}
@ -96,6 +109,7 @@ func PostgresHashFileResult(result *HashFileResult, settings PostgresSettings) {
type PostgresSettings struct {
Handle *sql.DB
ConnStr string
Binary bool
Mode string
Table string
PathRow string
@ -114,6 +128,7 @@ func main() {
outputFormat := flag.String("format", "text", "Output formats. Allowed: text, json, postgres")
pgConnStr := flag.String("pg_connstr", "", "Postgres connection string for postgres output format")
pgBinary := flag.Bool("pg_binary", false, "Postgres binary hash mode")
pgMode := flag.String("pg_mode", "insert", "Postgres output mode, insert or update")
pgTable := flag.String("pg_table", "files", "Postgres output table")
pgPathRow := flag.String("pg_row_path", "path", "Postgres output row: path")
@ -125,6 +140,7 @@ func main() {
pgSettings := PostgresSettings{
nil,
*pgConnStr,
*pgBinary,
*pgMode,
*pgTable,
*pgPathRow,