sql

package
v0.2.2 Latest Latest
Warning

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

Go to latest
Published: Feb 8, 2026 License: Apache-2.0 Imports: 23 Imported by: 0

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

func DeleteByQuery(dialect, tableName, field string) string

func InsertQuery

func InsertQuery(dialect, tableName string, fieldNames []string, values []any,
	constraints map[string]FieldConstraints) (string, error)

func IsSupabaseDialect

func IsSupabaseDialect(dialect string) bool

IsSupabaseDialect checks if the provided dialect is the Supabase dialect. Returns true if the dialect is "supabase", false otherwise.

func NewSQLMocks

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

func NewSQLMocksWithConfig

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

func SelectByQuery

func SelectByQuery(dialect, tableName, field string) string

func SelectQuery

func SelectQuery(dialect, tableName string) string

func ToSnakeCase

func ToSnakeCase(str string) string

func UpdateByQuery

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

Types

type BindVarType

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

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

func NewSupabaseSQL

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

NewSupabaseSQL creates a new DB instance configured for Supabase connectivity. It initializes a DB with Supabase-specific settings based on the provided configs. If Supabase dialect is not specified, it returns nil.

func (*DB) Begin

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

func (*DB) Close

func (d *DB) Close() error

func (*DB) Dialect

func (d *DB) Dialect() string

func (*DB) Exec

func (d *DB) Exec(query string, args ...any) (sql.Result, error)

func (*DB) ExecContext

func (d *DB) ExecContext(ctx context.Context, query string, args ...any) (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 ...any) (*sql.Rows, error)

func (*DB) QueryContext

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

func (*DB) QueryRow

func (d *DB) QueryRow(query string, args ...any) *sql.Row

func (*DB) QueryRowContext

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

func (*DB) Select

func (d *DB) Select(ctx context.Context, data any, query string, args ...any) error

Select runs a query with args and binds the result of the query to data. data should be a pointer to a slice or struct.

Example:

  1. Get multiple rows with only one column ids := make([]int, 0) err := 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{} err := 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{} err := db.Select(ctx, &users, "select * from users")

type DBConfig

type DBConfig struct {
	Dialect     string
	HostName    string
	User        string
	Password    string
	Port        string
	Database    string
	SSLMode     string
	MaxIdleConn int
	MaxOpenConn int
	Charset     string
}

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

type DBStats

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 Executor added in v0.2.2

type Executor interface {
	ExecContext(ctx context.Context, query string, args ...any) (sql.Result, error)
	QueryContext(ctx context.Context, query string, args ...any) (*sql.Rows, error)
	QueryRowContext(ctx context.Context, query string, args ...any) *sql.Row
	Select(ctx context.Context, data any, query string, args ...any) error
}

Executor captures the query operations shared by DB and Tx. It is useful for transaction-aware repositories that can run against either.

type FieldConstraints

type FieldConstraints struct {
	AutoIncrement bool
	NotNull       bool
}

type Log

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

func (*Log) PrettyPrint

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

type Metrics

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

type MockMetrics

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

MockMetrics is a mock of Metrics interface.

func NewMockMetrics

func NewMockMetrics(ctrl *gomock.Controller) *MockMetrics

NewMockMetrics creates a new mock instance.

func (*MockMetrics) EXPECT

func (m *MockMetrics) EXPECT() *MockMetricsMockRecorder

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

func (*MockMetrics) RecordHistogram

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

RecordHistogram mocks base method.

func (*MockMetrics) SetGauge

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

SetGauge mocks base method.

type MockMetricsMockRecorder

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

MockMetricsMockRecorder is the mock recorder for MockMetrics.

func (*MockMetricsMockRecorder) RecordHistogram

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

RecordHistogram indicates an expected call of RecordHistogram.

func (*MockMetricsMockRecorder) SetGauge

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

SetGauge indicates an expected call of SetGauge.

type SupabaseConfig

type SupabaseConfig struct {
	*DBConfig
	ConnectionType string // direct, session, transaction
	ProjectRef     string // Supabase project reference
	Region         string // Supabase region
}

SupabaseConfig extends DBConfig to include Supabase-specific configuration.

func GetSupabaseConfig

func GetSupabaseConfig(configs config.Config) *SupabaseConfig

GetSupabaseConfig builds a Supabase configuration from general config. It extracts Supabase-specific settings from the provided configs object. If the database dialect is not supabase, it returns nil.

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 ...any) (sql.Result, error)

func (*Tx) ExecContext

func (t *Tx) ExecContext(ctx context.Context, query string, args ...any) (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 ...any) (*sql.Rows, error)

func (*Tx) QueryContext added in v0.2.2

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

func (*Tx) QueryRow

func (t *Tx) QueryRow(query string, args ...any) *sql.Row

func (*Tx) QueryRowContext

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

func (*Tx) Rollback

func (t *Tx) Rollback() error

func (*Tx) Select added in v0.2.2

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

Select executes query using the active transaction and binds rows into data.

Directories

Path Synopsis
Package qb provides SQL query builder utilities for dynamic WHERE/ORDER/GROUP/LIMIT style queries and bulk insert/update/delete statements.
Package qb provides SQL query builder utilities for dynamic WHERE/ORDER/GROUP/LIMIT style queries and bulk insert/update/delete statements.

Jump to

Keyboard shortcuts

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