// 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 + "')") }