Compare commits
No commits in common. "deb603caacaad3776196476493db410bd7df57d4" and "ce71a3a553e586b9d4d9cb80880d2fd7ba9aa134" have entirely different histories.
deb603caac
...
ce71a3a553
62
pg/pg.go
62
pg/pg.go
@ -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()
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user