db

package
v1.64.11 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 19, 2026 License: MIT Imports: 8 Imported by: 1

README

Package db

Пакет db предоставляет клиент-обёртку над библиотекой sqlx с интеграцией pgx для работы с PostgreSQL. Реализует функциональность подключения к базе данных, выполнения запросов, транзакций и настройки трассировки запросов

Types

Client

Основная структура-клиент для взаимодействия с базой данных PostgreSQL

Methods:

Содержит все методы клиента-предшественника из sqlx.

Open(ctx context.Context, dsn string, opts ...Option) (*Client, error)

Создать подключение к базе данных по переданному dsn. Доступные опции:

  • WithQueryTracer(tracers ...pgx.QueryTracer) Option – трассировка запросов с объектами реализующими интерфейс pgx.QueryTracer.
(db *Client) Select(ctx context.Context, ptr any, query string, args ...any) error

Выполнить sql-запрос с возвращением данных из БД. Использует стандартные плейсхолдеры для позиционирования параметров.

(db *Client) SelectRow(ctx context.Context, ptr any, query string, args ...any) error

Выполнить sql-запрос с возвращением одной строки данных из БД. Использует стандартные плейсхолдеры для позиционирования параметров.

(db *Client) Exec(ctx context.Context, query string, args ...any) (sql.Result, error)

Выполнить sql-запрос без возврата данных из БД. Использует стандартные плейсхолдеры для позиционирования параметров.

(db *Client) ExecNamed(ctx context.Context, query string, arg any) (sql.Result, error)

Выполнить sql-запрос без возврата данных из БД. Позволяет использовать имена полей вместо плейсхолдеров для позиционирования параметров в sql-запросе.

(db *Client) RunInTransaction(ctx context.Context, txFunc TxFunc, opts ...TxOption) (err error)

Выполнить функцию txFunc в рамках транзакции. Доступны опции:

  • IsolationLevel(level sql.IsolationLevel) TxOption – изменить уровень изоляции транзакции
  • ReadOnly() TxOption – режим транзакции только на чтение

Usage

Default usage flow
package main

import (
	"context"
	"database/sql"
	"log"

	"github.com/txix-open/isp-kit/db"
)

type user struct {
	Name     string
	IsActive bool
}

func main() {
	ctx := context.Background()
	client, err := db.Open(ctx, "postgres://user:pass@localhost:5432/db")
	if err != nil {
		log.Fatal(err)
	}

	var users []user
	err = client.Select(ctx, &users, "SELECT * FROM users WHERE is_active = $1", true) /* read data */

	/* transaction */
	err = client.RunInTransaction(ctx, func(ctx context.Context, tx *db.Tx) error {
		res, err := tx.Exec(ctx, "UPDATE accounts SET balance = balance - $1", 100)
		if err != nil {
			return err
		}
		/* put here some business logic */
		return nil
	}, db.IsolationLevel(sql.LevelRepeatableRead))
	if err != nil {
		log.Fatal(err)
	}
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ToSnakeCase

func ToSnakeCase(s string) string

Types

type Client

type Client struct {
	*sqlx.DB
	// contains filtered or unexported fields
}

func Open

func Open(ctx context.Context, dsn string, opts ...Option) (*Client, error)

func (*Client) Exec

func (db *Client) Exec(ctx context.Context, query string, args ...any) (sql.Result, error)

func (*Client) ExecNamed

func (db *Client) ExecNamed(ctx context.Context, query string, arg any) (sql.Result, error)

func (*Client) IsReadOnly added in v1.50.1

func (db *Client) IsReadOnly(ctx context.Context) (bool, error)

func (*Client) RunInTransaction

func (db *Client) RunInTransaction(ctx context.Context, txFunc TxFunc, opts ...TxOption) (err error)

func (*Client) Select

func (db *Client) Select(ctx context.Context, ptr any, query string, args ...any) error

func (*Client) SelectRow

func (db *Client) SelectRow(ctx context.Context, ptr any, query string, args ...any) error

type DB

type DB interface {
	Select(ctx context.Context, ptr any, query string, args ...any) error
	SelectRow(ctx context.Context, ptr any, query string, args ...any) error
	Exec(ctx context.Context, query string, args ...any) (sql.Result, error)
	ExecNamed(ctx context.Context, query string, arg any) (sql.Result, error)
}

type Option

type Option func(db *Client)

func WithQueryTracer

func WithQueryTracer(tracers ...pgx.QueryTracer) Option

type Transactional

type Transactional interface {
	RunInTransaction(ctx context.Context, txFunc TxFunc, opts ...TxOption) error
}

type Tx

type Tx struct {
	*sqlx.Tx
}

func (*Tx) Exec

func (t *Tx) Exec(ctx context.Context, query string, args ...any) (sql.Result, error)

func (*Tx) ExecNamed

func (t *Tx) ExecNamed(ctx context.Context, query string, arg any) (sql.Result, error)

func (*Tx) Select

func (t *Tx) Select(ctx context.Context, ptr any, query string, args ...any) error

func (*Tx) SelectRow

func (t *Tx) SelectRow(ctx context.Context, ptr any, query string, args ...any) error

type TxFunc

type TxFunc func(ctx context.Context, tx *Tx) error

type TxOption

type TxOption func(options *txOptions)

func IsolationLevel

func IsolationLevel(level sql.IsolationLevel) TxOption

func MetricsLabel added in v1.55.0

func MetricsLabel(name string) TxOption

func ReadOnly

func ReadOnly() TxOption

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL