Skip to content

Commit 1444eb0

Browse files
committed
Add docs example for upsert streamed
1 parent a1092af commit 1444eb0

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package database
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"github.com/creasty/defaults"
7+
"github.com/icinga/icinga-go-library/logging"
8+
"github.com/icinga/icinga-go-library/utils"
9+
"go.uber.org/zap/zapcore"
10+
"golang.org/x/sync/errgroup"
11+
"time"
12+
)
13+
14+
func ExampleUpsertStreamed() {
15+
var (
16+
testEntites = []MockEntity{
17+
{Id: 1, Name: "test1", Age: 10, Email: "[email protected]"},
18+
{Id: 2, Name: "test2", Age: 20, Email: "[email protected]"},
19+
}
20+
g, ctx = errgroup.WithContext(context.Background())
21+
entities = make(chan MockEntity, len(testEntites))
22+
defaultOptions Options
23+
)
24+
25+
logs, err := logging.NewLoggingFromConfig(
26+
"Icinga Kubernetes",
27+
logging.Config{Level: zapcore.DebugLevel, Output: "console", Interval: time.Second * 10},
28+
)
29+
if err != nil {
30+
utils.PrintErrorThenExit(err, 1)
31+
}
32+
33+
log := logs.GetLogger()
34+
35+
err = defaults.Set(&defaultOptions)
36+
if err != nil {
37+
log.Fatalf("cannot set default options: %v", err)
38+
}
39+
40+
db, err := NewDbFromConfig(
41+
&Config{Type: "sqlite", Database: ":memory:example-upsert", Options: defaultOptions},
42+
logs.GetChildLogger("database"),
43+
RetryConnectorCallbacks{},
44+
)
45+
if err != nil {
46+
log.Fatalf("cannot create database: %v", err)
47+
}
48+
49+
_, err = db.Query("CREATE TABLE IF NOT EXISTS mock_entity (id INTEGER PRIMARY KEY, name VARCHAR(255), age INTEGER, email VARCHAR(255))")
50+
if err != nil {
51+
log.Fatalf("cannot create table in db: %v", err)
52+
}
53+
54+
g.Go(func() error {
55+
return UpsertStreamed(ctx, db, entities)
56+
})
57+
58+
for _, entity := range testEntites {
59+
entities <- entity
60+
}
61+
62+
close(entities)
63+
64+
time.Sleep(time.Second)
65+
66+
testSelect := &[]MockEntity{}
67+
68+
err = db.Select(testSelect, "SELECT * FROM mock_entity")
69+
if err != nil {
70+
log.Fatalf("cannot select from db: %v", err)
71+
}
72+
73+
fmt.Println(*testSelect)
74+
75+
if err = g.Wait(); err != nil {
76+
log.Fatalf("upsert error: %v", err)
77+
}
78+
79+
_ = db.Close()
80+
81+
// Output:
82+
// [{1 test1 10 [email protected]} {2 test2 20 [email protected]}]
83+
}

0 commit comments

Comments
 (0)