-
Notifications
You must be signed in to change notification settings - Fork 19
/
chain.go
61 lines (51 loc) · 1.64 KB
/
chain.go
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
61
// Copyright (c) 2022 Gobalsky Labs Limited
//
// Use of this software is governed by the Business Source License included
// in the LICENSE.DATANODE file and at https://www.mariadb.com/bsl11.
//
// Change Date: 18 months from the later of the date of the first publicly
// available Distribution of this version of the repository, and 25 June 2022.
//
// On the date above, in accordance with the Business Source License, use
// of this software will be governed by version 3 or later of the GNU General
// Public License.
package sqlstore
import (
"context"
"errors"
"code.vegaprotocol.io/vega/datanode/entities"
"code.vegaprotocol.io/vega/datanode/metrics"
"github.com/georgysavva/scany/pgxscan"
"github.com/jackc/pgconn"
"github.com/jackc/pgx/v4"
)
type Chain struct {
*ConnectionSource
}
func NewChain(connectionSource *ConnectionSource) *Chain {
return &Chain{
ConnectionSource: connectionSource,
}
}
func (c *Chain) Get(ctx context.Context) (entities.Chain, error) {
defer metrics.StartSQLQuery("Chain", "Get")()
chain := entities.Chain{}
query := `SELECT id from chain`
err := pgxscan.Get(ctx, c.Connection, &chain, query)
if errors.Is(err, pgx.ErrNoRows) {
return entities.Chain{}, entities.ErrChainNotFound
}
return chain, err
}
func (c *Chain) Set(ctx context.Context, chain entities.Chain) error {
defer metrics.StartSQLQuery("Chain", "Set")()
query := `INSERT INTO chain(id) VALUES($1)`
_, err := c.Connection.Exec(ctx, query, chain.ID)
if e, ok := err.(*pgconn.PgError); ok {
// 23505 is postgres error code for a unique constraint violation
if e.Code == "23505" {
return entities.ErrChainAlreadySet
}
}
return err
}