diff --git a/config/config.go b/config/config.go index dea789b..9becf9e 100644 --- a/config/config.go +++ b/config/config.go @@ -41,14 +41,15 @@ type Contract struct { // Database type Database struct { - Path string `yaml:"path,omitempty"` - Kind string `yaml:"kind" validate:"required,oneof=sqlite postgres mysql clickhouse elasticsearch"` - Host string `yaml:"host" validate:"required_with=Port User Database"` - Port int `yaml:"port" validate:"required_with=Host User Database,gt=-1,lt=65535"` - User string `yaml:"user" validate:"required_with=Host Port Database"` - Password string `yaml:"password"` - Database string `yaml:"database" validate:"required_with=Host Port User"` - SchemaName string `yaml:"schema_name"` + Path string `yaml:"path,omitempty"` + Kind string `yaml:"kind" validate:"required,oneof=sqlite postgres mysql clickhouse elasticsearch"` + Host string `yaml:"host" validate:"required_with=Port User Database"` + Port int `yaml:"port" validate:"required_with=Host User Database,gt=-1,lt=65535"` + User string `yaml:"user" validate:"required_with=Host Port Database"` + Password string `yaml:"password"` + Database string `yaml:"database" validate:"required_with=Host Port User"` + SchemaName string `yaml:"schema_name"` + ApplicationName string `yaml:"application_name"` } // Hasura - diff --git a/database/bun.go b/database/bun.go index c7ef3ad..461224a 100644 --- a/database/bun.go +++ b/database/bun.go @@ -4,6 +4,7 @@ import ( "context" "database/sql" "fmt" + "net/url" "runtime" "github.com/dipdup-net/go-lib/config" @@ -41,14 +42,25 @@ func (db *Bun) Connect(ctx context.Context, cfg config.Database) error { db.sqldb = conn db.conn = bun.NewDB(db.sqldb, pgdialect.New()) } else { + values := make(url.Values) + values.Set("sslmode", "disable") + if cfg.ApplicationName != "" { + values.Set("application_name", cfg.ApplicationName) + } + connStr := fmt.Sprintf( - "postgres://%s:%s@%s:%d/%s?sslmode=disable", + "postgres://%s:%s@%s:%d/%s", cfg.User, cfg.Password, cfg.Host, cfg.Port, cfg.Database, ) + + if len(values) > 0 { + connStr = fmt.Sprintf("%s?%s", connStr, values.Encode()) + } + conn, err := sql.Open("postgres", connStr) if err != nil { return err diff --git a/database/db_test.go b/database/db_test.go index b3b7c51..963a922 100644 --- a/database/db_test.go +++ b/database/db_test.go @@ -75,7 +75,7 @@ func (s *DBTestSuite) TearDownSuite() { s.Require().NoError(s.psqlContainer.Terminate(ctx)) } -func (s *DBTestSuite) TestStateCreate() { +func (s *DBTestSuite) BeforeTest(suiteName, testName string) { db, err := sql.Open("postgres", s.psqlContainer.GetDSN()) s.Require().NoError(err) @@ -87,7 +87,9 @@ func (s *DBTestSuite) TestStateCreate() { s.Require().NoError(err) s.Require().NoError(fixtures.Load()) s.Require().NoError(db.Close()) +} +func (s *DBTestSuite) TestStateCreate() { ctx, ctxCancel := context.WithTimeout(context.Background(), 5*time.Second) defer ctxCancel() @@ -107,18 +109,6 @@ func (s *DBTestSuite) TestStateCreate() { } func (s *DBTestSuite) TestStateUpdate() { - db, err := sql.Open("postgres", s.psqlContainer.GetDSN()) - s.Require().NoError(err) - - fixtures, err := testfixtures.New( - testfixtures.Database(db), - testfixtures.Dialect("postgres"), - testfixtures.Directory("fixtures"), - ) - s.Require().NoError(err) - s.Require().NoError(fixtures.Load()) - s.Require().NoError(db.Close()) - ctx, ctxCancel := context.WithTimeout(context.Background(), 5*time.Second) defer ctxCancel() @@ -137,18 +127,6 @@ func (s *DBTestSuite) TestStateUpdate() { } func (s *DBTestSuite) TestState() { - db, err := sql.Open("postgres", s.psqlContainer.GetDSN()) - s.Require().NoError(err) - - fixtures, err := testfixtures.New( - testfixtures.Database(db), - testfixtures.Dialect("postgres"), - testfixtures.Directory("fixtures"), - ) - s.Require().NoError(err) - s.Require().NoError(fixtures.Load()) - s.Require().NoError(db.Close()) - ctx, ctxCancel := context.WithTimeout(context.Background(), 5*time.Second) defer ctxCancel() @@ -161,18 +139,6 @@ func (s *DBTestSuite) TestState() { } func (s *DBTestSuite) TestDeleteState() { - db, err := sql.Open("postgres", s.psqlContainer.GetDSN()) - s.Require().NoError(err) - - fixtures, err := testfixtures.New( - testfixtures.Database(db), - testfixtures.Dialect("postgres"), - testfixtures.Directory("fixtures"), - ) - s.Require().NoError(err) - s.Require().NoError(fixtures.Load()) - s.Require().NoError(db.Close()) - ctx, ctxCancel := context.WithTimeout(context.Background(), 5*time.Second) defer ctxCancel() newState := State{ @@ -180,7 +146,7 @@ func (s *DBTestSuite) TestDeleteState() { } s.Require().NoError(s.db.DeleteState(ctx, &newState)) - _, err = s.db.State(ctx, testIndex) + _, err := s.db.State(ctx, testIndex) s.Require().Error(err) } @@ -199,18 +165,6 @@ func (s *DBTestSuite) TestMakeComments() { } func (s *DBTestSuite) TestExec() { - db, err := sql.Open("postgres", s.psqlContainer.GetDSN()) - s.Require().NoError(err) - - fixtures, err := testfixtures.New( - testfixtures.Database(db), - testfixtures.Dialect("postgres"), - testfixtures.Directory("fixtures"), - ) - s.Require().NoError(err) - s.Require().NoError(fixtures.Load()) - s.Require().NoError(db.Close()) - ctx, ctxCancel := context.WithTimeout(context.Background(), 5*time.Second) defer ctxCancel() @@ -221,7 +175,7 @@ func (s *DBTestSuite) TestExec() { func TestSuite_Run(t *testing.T) { ts := new(DBTestSuite) - for _, typ := range []string{"gorm", "pg-go", "bun"} { + for _, typ := range []string{"bun"} { ts.typ = typ } suite.Run(t, ts) diff --git a/go.mod b/go.mod index fc08c12..9e0b721 100644 --- a/go.mod +++ b/go.mod @@ -15,15 +15,15 @@ require ( github.com/lib/pq v1.10.9 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.16.0 - github.com/rs/zerolog v1.30.0 + github.com/rs/zerolog v1.31.0 github.com/sergi/go-diff v1.3.1 github.com/shopspring/decimal v1.3.1 github.com/stretchr/testify v1.8.4 github.com/testcontainers/testcontainers-go v0.22.0 github.com/testcontainers/testcontainers-go/modules/postgres v0.22.0 github.com/tidwall/gjson v1.16.0 - github.com/uptrace/bun v1.1.14 - github.com/uptrace/bun/dialect/pgdialect v1.1.14 + github.com/uptrace/bun v1.1.17 + github.com/uptrace/bun/dialect/pgdialect v1.1.17 github.com/yhirose/go-peg v0.0.0-20210804202551-de25d6753cf1 golang.org/x/crypto v0.19.0 golang.org/x/text v0.14.0 @@ -61,7 +61,7 @@ require ( github.com/leodido/go-urn v1.4.0 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.19 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-sqlite3 v1.14.17 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/moby/patternmatcher v0.5.0 // indirect @@ -84,7 +84,7 @@ require ( github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc // indirect - github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect + github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect go.opentelemetry.io/otel v1.19.0 // indirect go.opentelemetry.io/otel/trace v1.19.0 // indirect diff --git a/go.sum b/go.sum index ea654ee..57f4e00 100644 --- a/go.sum +++ b/go.sum @@ -130,13 +130,12 @@ github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM= github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= @@ -181,8 +180,8 @@ github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPH github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c= -github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w= +github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A= +github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys= github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= @@ -212,12 +211,12 @@ github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc h1:9lRDQMhESg+zvGYmW5DyG0UqvY96Bu5QYsTLvCHdrgo= github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc/go.mod h1:bciPuU6GHm1iF1pBvUfxfsH0Wmnc2VbpgvbI9ZWuIRs= -github.com/uptrace/bun v1.1.14 h1:S5vvNnjEynJ0CvnrBOD7MIRW7q/WbtvFXrdfy0lddAM= -github.com/uptrace/bun v1.1.14/go.mod h1:RHk6DrIisO62dv10pUOJCz5MphXThuOTpVNYEYv7NI8= -github.com/uptrace/bun/dialect/pgdialect v1.1.14 h1:b7+V1KDJPQSFYgkG/6YLXCl2uvwEY3kf/GSM7hTHRDY= -github.com/uptrace/bun/dialect/pgdialect v1.1.14/go.mod h1:v6YiaXmnKQ2FlhRD2c0ZfKd+QXH09pYn4H8ojaavkKk= -github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= -github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= +github.com/uptrace/bun v1.1.17 h1:qxBaEIo0hC/8O3O6GrMDKxqyT+mw5/s0Pn/n6xjyGIk= +github.com/uptrace/bun v1.1.17/go.mod h1:hATAzivtTIRsSJR4B8AXR+uABqnQxr3myKDKEf5iQ9U= +github.com/uptrace/bun/dialect/pgdialect v1.1.17 h1:NsvFVHAx1Az6ytlAD/B6ty3cVE6j9Yp82bjqd9R9hOs= +github.com/uptrace/bun/dialect/pgdialect v1.1.17/go.mod h1:fLBDclNc7nKsZLzNjFL6BqSdgJzbj2HdnyOnLoDvAME= +github.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IUPn0Bjt8= +github.com/vmihailenco/msgpack/v5 v5.4.1/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok= github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= @@ -271,11 +270,10 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=