62 lines
1.2 KiB
Go
62 lines
1.2 KiB
Go
// pgm
|
|
//
|
|
// A simple PG query builder
|
|
//
|
|
// Author: Ankit Patial
|
|
|
|
package pgm
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
"sync"
|
|
"time"
|
|
|
|
"github.com/jackc/pgx/v5/pgtype"
|
|
)
|
|
|
|
var poolStringBuilder = sync.Pool{
|
|
New: func() any {
|
|
return new(strings.Builder)
|
|
},
|
|
}
|
|
|
|
// Errors
|
|
var (
|
|
ErrInitTX = errors.New("failed to init db.tx")
|
|
ErrCommitTX = errors.New("failed to commit db.tx")
|
|
ErrNoRows = errors.New("no data found")
|
|
)
|
|
|
|
// get string builder from pool
|
|
func getSB() *strings.Builder {
|
|
return poolStringBuilder.Get().(*strings.Builder)
|
|
}
|
|
|
|
// put string builder back to pool
|
|
func putSB(sb *strings.Builder) {
|
|
sb.Reset()
|
|
poolStringBuilder.Put(sb)
|
|
}
|
|
|
|
// 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}
|
|
}
|
|
|
|
func ConcatWs(sep string, fields ...Field) Field {
|
|
return Field("concat_ws('" + sep + "'," + joinFileds(fields) + ")")
|
|
}
|
|
|
|
func StringAgg(exp, sep string) Field {
|
|
return Field("string_agg(" + exp + ",'" + sep + "')")
|
|
}
|
|
|
|
func StringAggCast(exp, sep string) Field {
|
|
return Field("string_agg(cast(" + exp + " as varchar),'" + sep + "')")
|
|
}
|