Go to file
Василий Толстов bab2833cf7
build / test (push) Successful in 1m54s Details
build / lint (push) Successful in 9m17s Details
codeql / analyze (go) (push) Failing after 11m54s Details
Merge pull request 'add err skip' (#81) from devstigneev/micro-wrapper-sql:issue_73 into master
Reviewed-on: #81
2024-04-11 11:40:28 +03:00
.github Bump dependabot/fetch-metadata from 1.3.5 to 1.3.6 (#62) 2023-01-30 21:21:26 +03:00
.gitignore add err skip 2024-04-07 22:12:39 +03:00
LICENSE Initial commit 2021-01-29 22:21:37 +03:00
README.md remove ErrUnsupported and fixes 2023-02-17 23:54:50 +03:00
common.go updates from testing 2023-09-01 14:48:57 +03:00
conn.go moved compare error to LoggerObserver 2024-04-11 11:38:09 +03:00
doc.go use generated interface 2023-06-10 13:09:25 +03:00
driver.go fixup metrics and tracing 2023-09-01 00:23:26 +03:00
gen.go fixup metrics and tracing 2023-09-01 00:23:26 +03:00
go.mod updates from testing 2023-09-01 14:48:57 +03:00
go.sum updates from testing 2023-09-01 14:48:57 +03:00
options.go moved compare error to LoggerObserver 2024-04-11 11:38:09 +03:00
stats.go updates from testing 2023-09-01 14:48:57 +03:00
stmt.go updates from testing 2023-09-01 14:48:57 +03:00
tx.go fixup metrics and tracing 2023-09-01 00:23:26 +03:00
wrap.go updates from testing 2023-09-01 14:48:57 +03:00
wrap_gen.go fixup metrics and tracing 2023-09-01 00:23:26 +03:00

README.md

micro-wrapper-sql

Example for For postgres

package storage

import (
	"fmt"
	"net/url"
	"time"

	"github.com/jackc/pgx/v4"
	"github.com/jackc/pgx/v4/stdlib"
	"github.com/jmoiron/sqlx"
	wrapper "go.unistack.org/micro-wrapper-sql/v3"
)

func Connect(cfg *PostgresConfig) (*sqlx.DB, error) {
	// format connection string
	cstr := fmt.Sprintf(
		"postgres://%s:%s@%s/%s?sslmode=disable&statement_cache_mode=describe",
		cfg.Login,
		url.QueryEscape(cfg.Passw),
		cfg.Addr,
		cfg.DBName,
	)

	// parse connection string
	dbConf, err := pgx.ParseConfig(cstr)
	if err != nil {
		return nil, err
	}

	// needed for pgbouncer
	dbConf.RuntimeParams = map[string]string{
		"standard_conforming_strings": "on",
		"application_name":            cfg.AppName,
	}
	// may be needed for pbbouncer, needs to check
	// dbConf.PreferSimpleProtocol = true
	// register pgx conn
	dsn := stdlib.RegisterConnConfig(dbConf)


  wrapper.DefaultMeterStatsInterval = 1 * time.Second
	logger.DefaultLogger = logger.NewLogger(logger.WithLevel(logger.DebugLevel))

	if err := logger.DefaultLogger.Init(); err != nil {
		t.Fatal(err)
	}

  // for postgres user stdlib.GetDefaultDriver() or it fails
	sql.Register("micro-wrapper-sql", wrapper.NewWrapper(&sqlite.Driver{},
		wrapper.DatabaseHost("localhost"),
		wrapper.DatabaseName("mydb"),
		wrapper.LoggerLevel(logger.DebugLevel),
		wrapper.LoggerEnabled(true),
	))

  wdb, err := sql.Open("micro-wrapper-sql", dsn)
	if err != nil {
		return nil, err
	}

	db := sqlx.NewDb(wdb, "pgx")
	db.SetMaxOpenConns(int(cfg.ConnMax))
	db.SetMaxIdleConns(int(cfg.ConnMaxIdle))
	db.SetConnMaxLifetime(time.Duration(cfg.ConnLifetime) * time.Second)
	db.SetConnMaxIdleTime(time.Duration(cfg.ConnMaxIdleTime) * time.Second)
	
	return db, nil
}