sql

package
v1.9.0 Latest Latest
Warning

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

Go to latest
Published: Jun 11, 2024 License: Apache-2.0 Imports: 18 Imported by: 3

Documentation

Overview

Package sql provides functionalities to interact with SQL databases using the database/sql package.This package includes a wrapper around sql.DB and sql.Tx to provide additional features such as query logging, metrics recording, and error handling.

Package sql is a generated GoMock package.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DeleteByQuery added in v1.6.0

func DeleteByQuery(dialect, tableName, field string) string

func InsertQuery added in v1.6.0

func InsertQuery(dialect, tableName string, fieldNames []string) string

func NewSQLMocks added in v1.3.0

func NewSQLMocks(t *testing.T) (*DB, sqlmock.Sqlmock, *MockMetrics)

func NewSQLMocksWithConfig added in v1.5.0

func NewSQLMocksWithConfig(t *testing.T, config *DBConfig) (*DB, sqlmock.Sqlmock, *MockMetrics)

func SelectByQuery added in v1.6.0

func SelectByQuery(dialect, tableName, field string) string

func SelectQuery added in v1.6.0

func SelectQuery(dialect, tableName string) string

func ToSnakeCase

func ToSnakeCase(str string) string

func UpdateByQuery added in v1.6.0

func UpdateByQuery(dialect, tableName string, fieldNames []string, field string) string

Types

type BindVarType added in v1.5.0

type BindVarType uint

BindVarType represents different type of bindvars in SQL queries.

const (
	UNKNOWN BindVarType = iota + 1
	QUESTION
	DOLLAR
)

type DB

type DB struct {
	// contains unexported or private fields
	*sql.DB
	// contains filtered or unexported fields
}

DB is a wrapper around sql.DB which provides some more features.

func NewSQL added in v0.2.0

func NewSQL(configs config.Config, logger datasource.Logger, metrics Metrics) *DB

func (*DB) Begin

func (d *DB) Begin() (*Tx, error)

func (*DB) Dialect added in v1.4.1

func (d *DB) Dialect() string

func (*DB) Exec

func (d *DB) Exec(query string, args ...interface{}) (sql.Result, error)

func (*DB) ExecContext added in v1.1.1

func (d *DB) ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error)

func (*DB) HealthCheck

func (d *DB) HealthCheck() *datasource.Health

func (*DB) Prepare

func (d *DB) Prepare(query string) (*sql.Stmt, error)

func (*DB) Query

func (d *DB) Query(query string, args ...interface{}) (*sql.Rows, error)

func (*DB) QueryContext added in v1.8.1

func (d *DB) QueryContext(ctx context.Context, query string, args ...any) (*sql.Rows, error)

func (*DB) QueryRow

func (d *DB) QueryRow(query string, args ...interface{}) *sql.Row

func (*DB) QueryRowContext

func (d *DB) QueryRowContext(ctx context.Context, query string, args ...interface{}) *sql.Row

func (*DB) Select

func (d *DB) Select(ctx context.Context, data interface{}, query string, args ...interface{})

Select runs a query with args and binds the result of the query to the data. data should ba a point to a slice, struct or any type. Slice will return multiple objects whereas struct will return a single object.

Example Usages:

  1. Get multiple rows with only one column ids := make([]int, 0) db.Select(ctx, &ids, "select id from users")

  2. Get a single object from database type user struct { Name string ID int Image string } u := user{} db.Select(ctx, &u, "select * from users where id=?", 1)

  3. Get array of objects from multiple rows type user struct { Name string ID int Image string `db:"image_url"` } users := []user{} db.Select(ctx, &users, "select * from users")

type DBConfig

type DBConfig struct {
	Dialect  string
	HostName string
	User     string
	Password string
	Port     string
	Database string
}

DBConfig has those members which are necessary variables while connecting to database.

type DBStats added in v0.2.0

type DBStats struct {
	MaxOpenConnections int `json:"maxOpenConnections"` // Maximum number of open connections to the database.

	// Pool Status
	OpenConnections int `json:"openConnections"` // The number of established connections both in use and idle.
	InUse           int `json:"inUse"`           // The number of connections currently in use.
	Idle            int `json:"idle"`            // The number of idle connections.

	// Counters
	WaitCount         int64         `json:"waitCount"`         // The total number of connections waited for.
	WaitDuration      time.Duration `json:"waitDuration"`      // The total time blocked waiting for a new connection.
	MaxIdleClosed     int64         `json:"maxIdleClosed"`     // The total number of connections closed due to SetMaxIdleConns.
	MaxIdleTimeClosed int64         `json:"maxIdleTimeClosed"` // The total number of connections closed due to SetConnMaxIdleTime.
	MaxLifetimeClosed int64         `json:"maxLifetimeClosed"` // The total number of connections closed due to SetConnMaxLifetime.
}

type Log

type Log struct {
	Type     string        `json:"type"`
	Query    string        `json:"query"`
	Duration int64         `json:"duration"`
	Args     []interface{} `json:"args,omitempty"`
}

func (*Log) PrettyPrint added in v1.4.0

func (l *Log) PrettyPrint(writer io.Writer)

type Metrics added in v0.3.0

type Metrics interface {
	RecordHistogram(ctx context.Context, name string, value float64, labels ...string)
	SetGauge(name string, value float64, labels ...string)
}

type MockMetrics added in v1.1.1

type MockMetrics struct {
	// contains filtered or unexported fields
}

MockMetrics is a mock of Metrics interface.

func NewMockMetrics added in v1.1.1

func NewMockMetrics(ctrl *gomock.Controller) *MockMetrics

NewMockMetrics creates a new mock instance.

func (*MockMetrics) EXPECT added in v1.1.1

func (m *MockMetrics) EXPECT() *MockMetricsMockRecorder

EXPECT returns an object that allows the caller to indicate expected use.

func (*MockMetrics) RecordHistogram added in v1.1.1

func (m *MockMetrics) RecordHistogram(ctx context.Context, name string, value float64, labels ...string)

RecordHistogram mocks base method.

func (*MockMetrics) SetGauge added in v1.1.1

func (m *MockMetrics) SetGauge(name string, value float64, labels ...string)

SetGauge mocks base method.

type MockMetricsMockRecorder added in v1.1.1

type MockMetricsMockRecorder struct {
	// contains filtered or unexported fields
}

MockMetricsMockRecorder is the mock recorder for MockMetrics.

func (*MockMetricsMockRecorder) RecordHistogram added in v1.1.1

func (mr *MockMetricsMockRecorder) RecordHistogram(ctx, name, value any, labels ...any) *gomock.Call

RecordHistogram indicates an expected call of RecordHistogram.

func (*MockMetricsMockRecorder) SetGauge added in v1.1.1

func (mr *MockMetricsMockRecorder) SetGauge(name, value any, labels ...any) *gomock.Call

SetGauge indicates an expected call of SetGauge.

type Tx

type Tx struct {
	*sql.Tx
	// contains filtered or unexported fields
}

func (*Tx) Commit

func (t *Tx) Commit() error

func (*Tx) Exec

func (t *Tx) Exec(query string, args ...interface{}) (sql.Result, error)

func (*Tx) ExecContext added in v1.1.1

func (t *Tx) ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error)

func (*Tx) Prepare

func (t *Tx) Prepare(query string) (*sql.Stmt, error)

func (*Tx) Query

func (t *Tx) Query(query string, args ...interface{}) (*sql.Rows, error)

func (*Tx) QueryRow

func (t *Tx) QueryRow(query string, args ...interface{}) *sql.Row

func (*Tx) QueryRowContext

func (t *Tx) QueryRowContext(ctx context.Context, query string, args ...interface{}) *sql.Row

func (*Tx) Rollback

func (t *Tx) Rollback() error

Jump to

Keyboard shortcuts

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