Skip to content

Commit ca1a1a1

Browse files
Lairon Acosta GuardiasLairon Acosta Guardias
authored andcommitted
added pg db client and using it in another example
1 parent 3b16f3b commit ca1a1a1

File tree

2 files changed

+162
-0
lines changed

2 files changed

+162
-0
lines changed

example2/example2.go

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"github.com/Lairon/pg-db-go/pgdb"
6+
"github.com/go-pg/pg/v10"
7+
"github.com/go-pg/pg/v10/orm"
8+
)
9+
10+
type User struct {
11+
ID int64
12+
Name string
13+
Emails []string
14+
}
15+
16+
type Book struct {
17+
ID int64
18+
Title string
19+
ReaderID int64
20+
Reader *User `pg:"rel:has-one"`
21+
}
22+
23+
type PgClient struct {
24+
db *pg.DB
25+
}
26+
27+
func main() {
28+
client := NewPgClient()
29+
defer client.db.Close()
30+
31+
client.createSchemeInsertSelect()
32+
}
33+
34+
func NewPgClient() *PgClient {
35+
return &PgClient{
36+
db: pgdb.NewPgDB(&pg.Options{
37+
User: "postgres",
38+
Password: "postgres",
39+
Database: "pg-db-go",
40+
}),
41+
}
42+
}
43+
44+
func (c *PgClient) createSchemeInsertSelect() {
45+
46+
db := c.db
47+
err := c.CreateTable()
48+
if err != nil {
49+
panic(err)
50+
}
51+
52+
user1 := User{
53+
Name: "admin",
54+
Emails: []string{"admin1@admin", "admin2@admin"},
55+
}
56+
_, err = db.Model(&user1).Insert()
57+
if err != nil {
58+
panic(err)
59+
}
60+
61+
user2 := User{
62+
Name: "root",
63+
Emails: []string{"root1@admin", "root2@admin"},
64+
}
65+
_, err = db.Model(&user2).Insert()
66+
if err != nil {
67+
panic(err)
68+
}
69+
70+
book1 := Book{
71+
Title: "PabloC",
72+
ReaderID: user1.ID,
73+
}
74+
_, err = db.Model(&book1).Insert()
75+
if err != nil {
76+
panic(err)
77+
}
78+
79+
//select user by pk
80+
user := User{
81+
ID: user1.ID,
82+
}
83+
err = db.Model(&user).WherePK().Select()
84+
if err != nil {
85+
panic(err)
86+
}
87+
88+
// Select all users.
89+
var users []User
90+
err = db.Model(&users).Select()
91+
if err != nil {
92+
panic(err)
93+
}
94+
95+
// Select book and associated reader in one query.
96+
book := Book{}
97+
err = db.Model(&book).
98+
Relation("Reader").
99+
Where("book.id = ?", &book1.ID).
100+
Select()
101+
if err != nil {
102+
panic(err)
103+
}
104+
105+
fmt.Printf("%+v \n", user)
106+
fmt.Printf("%+v \n", users)
107+
fmt.Printf("%+v \n", book)
108+
109+
}
110+
111+
func (c *PgClient) CreateTable() error {
112+
models := []interface{}{
113+
(*User)(nil),
114+
(*Book)(nil),
115+
}
116+
117+
for _, model := range models {
118+
err := c.db.Model(model).CreateTable(&orm.CreateTableOptions{
119+
Temp: true,
120+
})
121+
if err != nil {
122+
return err
123+
}
124+
}
125+
126+
return nil
127+
}

pgdb/pg-db.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package pgdb
2+
3+
import (
4+
"fmt"
5+
"github.com/go-pg/pg/v10"
6+
"sync"
7+
)
8+
9+
var (
10+
instance *pg.DB
11+
once sync.Once
12+
)
13+
14+
func NewPgDB(pgOptions *pg.Options) *pg.DB {
15+
once.Do(func() {
16+
instance = Connect(pgOptions)
17+
})
18+
19+
return instance
20+
}
21+
22+
func Connect(pgOptions *pg.Options) *pg.DB {
23+
db := pg.Connect(pgOptions)
24+
25+
var n int
26+
_, err := db.QueryOne(pg.Scan(&n), "SELECT 1")
27+
if err != nil {
28+
fmt.Errorf("Connection error %+v\n", err)
29+
panic(err)
30+
}
31+
32+
fmt.Println("Successfully connected to ->", db.Options().Addr)
33+
34+
return db
35+
}

0 commit comments

Comments
 (0)