Files
pgm/pgm.go

62 lines
1.2 KiB
Go
Raw Normal View History

// pgm
//
// A simple PG query builder
//
// Author: Ankit Patial
2025-07-26 18:34:56 +05:30
package pgm
import (
"errors"
2025-07-26 18:34:56 +05:30
"strings"
"sync"
2025-07-26 18:34:56 +05:30
"time"
"github.com/jackc/pgx/v5/pgtype"
)
var poolStringBuilder = sync.Pool{
New: func() any {
return new(strings.Builder)
},
2025-07-29 21:45:32 +05:30
}
// Errors
var (
ErrInitTX = errors.New("failed to init db.tx")
ErrCommitTX = errors.New("failed to commit db.tx")
ErrNoRows = errors.New("no data found")
)
2025-08-11 22:37:25 +05:30
// get string builder from pool
func getSB() *strings.Builder {
return poolStringBuilder.Get().(*strings.Builder)
2025-07-26 18:34:56 +05:30
}
// put string builder back to pool
func putSB(sb *strings.Builder) {
sb.Reset()
poolStringBuilder.Put(sb)
2025-07-26 18:34:56 +05:30
}
// PgTime as in UTC
func PgTime(t time.Time) pgtype.Timestamptz {
return pgtype.Timestamptz{Time: t, Valid: true}
}
func PgTimeNow() pgtype.Timestamptz {
return pgtype.Timestamptz{Time: time.Now(), Valid: true}
}
2025-07-26 21:45:09 +05:30
func ConcatWs(sep string, fields ...Field) Field {
return Field("concat_ws('" + sep + "'," + joinFileds(fields) + ")")
2025-07-26 18:34:56 +05:30
}
2025-07-26 21:45:09 +05:30
func StringAgg(exp, sep string) Field {
return Field("string_agg(" + exp + ",'" + sep + "')")
2025-07-26 18:34:56 +05:30
}
2025-07-26 21:45:09 +05:30
func StringAggCast(exp, sep string) Field {
return Field("string_agg(cast(" + exp + " as varchar),'" + sep + "')")
2025-07-26 18:34:56 +05:30
}