1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
package db
import (
"context"
"fmt"
"log"
"strings"
"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgxpool"
"gitlab.com/alexkavon/newsstand/src/conf"
)
type Database struct {
p *pgxpool.Pool
}
func NewDb(config *conf.Conf) *Database {
pool, err := pgxpool.New(context.Background(), config.Db.Url)
if err != nil {
log.Fatal(err)
}
var testquery string
err = pool.QueryRow(context.Background(), "select 'Hello, PostgreSQL!'").Scan(&testquery)
if err != nil {
log.Fatal(err)
}
log.Println("Database connection pool created.", testquery)
return &Database{
p: pool,
}
}
func (d *Database) InsertTable(table string, columns []string, values pgx.NamedArgs) error {
columnstr := stringifyColumns(columns, "")
valuesstr := stringifyColumns(columns, "@")
query := fmt.Sprintf("INSERT INTO %s (%s) VALUES (%s) RETURNING *", table, columnstr, valuesstr)
log.Println(query, values)
ctx := context.Background()
row, err := d.p.Exec(ctx, query, values)
if err != nil {
return err
}
log.Println("Row", row)
return nil
}
func (d *Database) Close() {
d.p.Close()
}
func stringifyColumns(columns []string, prefix string) string {
ncolumns := []string{}
for _, v := range columns {
ncolumns = append(ncolumns, fmt.Sprintf("%s%s", prefix, v))
}
return strings.Join(ncolumns, ", ")
}
|