Compare commits

..

No commits in common. "deb603caacaad3776196476493db410bd7df57d4" and "ce71a3a553e586b9d4d9cb80880d2fd7ba9aa134" have entirely different histories.

2 changed files with 1 additions and 61 deletions

View File

@ -2,18 +2,14 @@ package pgUtils
import ( import (
"context" "context"
"fmt"
"github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgconn"
"github.com/jackc/pgx/v5/pgxpool" "github.com/jackc/pgx/v5/pgxpool"
"github.com/matchsystems/werr" "github.com/matchsystems/werr"
"strings"
) )
type PgxQuerier interface { type PgxQuerier interface {
Query(ctx context.Context, sql string, args ...any) (pgx.Rows, error) Query(ctx context.Context, sql string, args ...any) (pgx.Rows, error)
QueryRow(ctx context.Context, sql string, args ...any) pgx.Row QueryRow(ctx context.Context, sql string, args ...any) (pgx.Row, error)
Exec(ctx context.Context, sql string, args ...any) (pgconn.CommandTag, error)
} }
// Query executes query on a provided querier and tries to parse db response // Query executes query on a provided querier and tries to parse db response
@ -53,59 +49,3 @@ func Tx(ctx context.Context, db *pgxpool.Pool, exec func(ctx context.Context, tx
} }
return tx.Commit(ctx) return tx.Commit(ctx)
} }
// SqlInsertMultiple Returns an SQL query to insert multiple items into a table
func SqlInsertMultiple(tableName string, columnNames []string, itemsCount int) string {
columnsCount := len(columnNames)
query := strings.Builder{}
query.WriteString("INSERT INTO ")
query.WriteString(tableName)
query.WriteString(" (")
query.WriteString(strings.Join(columnNames, ","))
query.WriteString(") VALUES ")
for item := 0; item < itemsCount; item++ {
query.WriteByte('(')
for column := 0; column < columnsCount; column++ {
query.WriteString(fmt.Sprintf("$%d", item*columnsCount+column))
if column != columnsCount-1 {
query.WriteString(", ")
}
}
query.WriteByte(')')
if item != itemsCount-1 {
query.WriteByte(',')
}
}
return query.String()
}
// InsertMultiple Inserts multiple items into a specified table
func InsertMultiple(ctx context.Context, db PgxQuerier, tableName string, columnNames []string, items [][]any) (pgconn.CommandTag, error) {
query := SqlInsertMultiple(tableName, columnNames, len(items))
itemsJoined := make([]any, 0)
for _, item := range items {
itemsJoined = append(itemsJoined, item...)
}
return db.Exec(ctx, query, itemsJoined...)
}
// SqlOrder returns "ASC" | "DESC"
// depending on asc param
func SqlOrder(asc bool) string {
if asc {
return "ASC"
}
return "DESC"
}
func SqlOrderLimit(orderBy string, asc bool, limit int64, offset int64) string {
query := strings.Builder{}
query.WriteString("ORDER BY ")
query.WriteString(orderBy)
query.WriteByte(' ')
query.WriteString(SqlOrder(asc))
query.WriteString(fmt.Sprintf("LIMIT %d OFFSET %d", limit, offset))
return query.String()
}