sqlb

package
v0.0.1 Latest Latest
Warning

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

Go to latest
Published: Jan 13, 2026 License: MIT Imports: 10 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AddSqlKeyword

func AddSqlKeyword(keyword string)

AddSqlKeyword adds a SQL keyword to be double-quoted when used as table or column name.

func GetRegisteredTablesName

func GetRegisteredTablesName() []string

Types

type ColumnInsertSpec

type ColumnInsertSpec[T any] func(T) (insertArg any)

type ColumnMetadata

type ColumnMetadata[T any] struct {
	// contains filtered or unexported fields
}

func (ColumnMetadata[T]) InsertSpec

func (c ColumnMetadata[T]) InsertSpec() (columnName string, spec ColumnInsertSpec[T])

func (ColumnMetadata[T]) Name

func (c ColumnMetadata[T]) Name() string

func (ColumnMetadata[T]) SelectSpec

func (c ColumnMetadata[T]) SelectSpec() (columnName string, spec ColumnSelectSpec[T])

type ColumnMetadataBuilder

type ColumnMetadataBuilder[T any] struct {
	// contains filtered or unexported fields
}

func NewColumnMetadata

func NewColumnMetadata[T any](
	name string,
) *ColumnMetadataBuilder[T]

func (*ColumnMetadataBuilder[T]) InsertSpec

func (b *ColumnMetadataBuilder[T]) InsertSpec(spec ColumnInsertSpec[T]) *ColumnMetadataBuilder[T]

InsertSpec sets the insert spec for this column

func (*ColumnMetadataBuilder[T]) PrimaryKey

func (b *ColumnMetadataBuilder[T]) PrimaryKey() *ColumnMetadataBuilder[T]

PrimaryKey marks this column is a part of multi-columns-PK

func (*ColumnMetadataBuilder[T]) SelectSpec

func (b *ColumnMetadataBuilder[T]) SelectSpec(spec ColumnSelectSpec[T]) *ColumnMetadataBuilder[T]

SelectSpec sets the select spec for this column

type ColumnSelectSpec

type ColumnSelectSpec[T any] func(*T) ResultColumnSelectSpec

type GenericColumnToUse

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

func (GenericColumnToUse) EqualsToCurrent

func (c GenericColumnToUse) EqualsToCurrent() string

EqualsToCurrent generates statement '[column] = [table].[column]', used in ON CONFLICT DO UPDATE

func (GenericColumnToUse) Excluded

func (c GenericColumnToUse) Excluded() string

Excluded returns excluded.[column]

func (GenericColumnToUse) FromCoalesceWithExcluded

func (c GenericColumnToUse) FromCoalesceWithExcluded() string

FromCoalesceWithExcluded generates statement '[column] = COALESCE([table].[column], excluded.[column])', used in ON CONFLICT DO UPDATE

func (GenericColumnToUse) FromExcluded

func (c GenericColumnToUse) FromExcluded() string

FromExcluded generates statement '[column] = excluded.[column]', used in ON CONFLICT DO UPDATE

func (GenericColumnToUse) Gin2DimensionalByteArrayContains

func (c GenericColumnToUse) Gin2DimensionalByteArrayContains(argumentNumber int) string

Gin2DimensionalByteArrayContains generates statement '[column] @> ARRAY[$1]::BYTEA[]'

func (GenericColumnToUse) GinStringArrayContains

func (c GenericColumnToUse) GinStringArrayContains(argumentNumber int) string

GinStringArrayContains generates statement '[column] @> ARRAY[$1]::TEXT[]'

func (GenericColumnToUse) Greatest

func (c GenericColumnToUse) Greatest() string

Greatest generates statement '[column] = GREATEST([table].[column], excluded.[column])', used in ON CONFLICT DO UPDATE

func (GenericColumnToUse) InNumbers

func (c GenericColumnToUse) InNumbers(numbers ...int) string

InNumbers generates statement '[column] IN (1,2,3)'

func (GenericColumnToUse) Least

func (c GenericColumnToUse) Least() string

Least generates statement '[column] = LEAST([table].[column], excluded.[column])', used in ON CONFLICT DO UPDATE

func (GenericColumnToUse) NameOnly

func (c GenericColumnToUse) NameOnly() string

NameOnly returns [column]

func (GenericColumnToUse) NameWithTableName

func (c GenericColumnToUse) NameWithTableName() string

NameWithTableName returns [table].[column]

type GenericTableToUse

type GenericTableToUse interface {
	// contains filtered or unexported methods
}

type JoinType

type JoinType uint8
const (
	InnerJoin JoinType = iota
	LeftJoin
	RightJoin
)

type OptionalTransform_ColumnSelectSpec

type OptionalTransform_ColumnSelectSpec func() error

type OrderType

type OrderType bool

OrderType is used to specify the order of the results

const (
	ASC  OrderType = true
	DESC OrderType = false
)

type Pagination

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

func NewPaginationFromPagingConfig

func NewPaginationFromPagingConfig(page, size int) *Pagination

func (*Pagination) Limit

func (p *Pagination) Limit() uint

func (*Pagination) Offset

func (p *Pagination) Offset() uint

func (*Pagination) Set

func (p *Pagination) Set(offset, limit uint)

type QueryArg_ColumnSelectSpec

type QueryArg_ColumnSelectSpec func() any

type ResultColumnSelectSpec

type ResultColumnSelectSpec struct {
	ToQueryArg        QueryArg_ColumnSelectSpec
	OptionalTransform OptionalTransform_ColumnSelectSpec
}

type ScannedRows

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

func (*ScannedRows) Count

func (sr *ScannedRows) Count() int

func (*ScannedRows) GetTable

func (sr *ScannedRows) GetTable(byAlias string) any

func (*ScannedRows) Next

func (sr *ScannedRows) Next() bool

type SqlBuilder

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

func InsertInto

func InsertInto[T any](use *TableToUse[T], columns ...GenericColumnToUse) *SqlBuilder

func Select

func Select(selectColumns ...GenericColumnToUse) *SqlBuilder

func SelectCount

func SelectCount() *SqlBuilder

func SelectExists

func SelectExists() *SqlBuilder

func (*SqlBuilder) And

func (b *SqlBuilder) And(whereTokens ...any) *SqlBuilder

And continues the WHERE clause with AND.

func (*SqlBuilder) AnyWhereTokens

func (b *SqlBuilder) AnyWhereTokens() bool

func (*SqlBuilder) Args

func (b *SqlBuilder) Args(whereArgs ...any) *SqlBuilder

Args provides args for the WHERE clause.

func (*SqlBuilder) Build

func (b *SqlBuilder) Build() (sql string, args []any)

func (*SqlBuilder) DoNothing

func (b *SqlBuilder) DoNothing() *SqlBuilder

DoNothing adds the ON CONFLICT DO NOTHING clause.

func (*SqlBuilder) DoUpdate

func (b *SqlBuilder) DoUpdate(tokens ...any) *SqlBuilder

DoUpdate adds the ON CONFLICT UPDATE clause.

func (*SqlBuilder) DoUpdateExceptPrimaryKeys

func (b *SqlBuilder) DoUpdateExceptPrimaryKeys() *SqlBuilder

DoUpdateExceptPrimaryKeys adds the ON CONFLICT UPDATE clause to excluded, except the primary keys.

func (*SqlBuilder) Exec

func (b *SqlBuilder) Exec(sqlDB *sql.DB) (sql.Result, error)

func (*SqlBuilder) ExecContext

func (b *SqlBuilder) ExecContext(ctx context.Context, sqlTx *sql.Tx) (sql.Result, error)

func (*SqlBuilder) From

func (b *SqlBuilder) From(tables ...GenericTableToUse) *SqlBuilder

From specifies the tables to SELECT FROM

func (*SqlBuilder) Join

func (b *SqlBuilder) Join(joinType JoinType, joinOnTable GenericTableToUse, onKeyPairs ...GenericColumnToUse) *SqlBuilder

Join add JOIN...ON clause.

func (*SqlBuilder) Limit

func (b *SqlBuilder) Limit(limit uint) *SqlBuilder

func (*SqlBuilder) Offset

func (b *SqlBuilder) Offset(offset uint) *SqlBuilder

func (*SqlBuilder) OnConflict

func (b *SqlBuilder) OnConflict(columns ...GenericColumnToUse) *SqlBuilder

OnConflict adds the ON CONFLICT clause with the columns to be checked.

func (*SqlBuilder) Or

func (b *SqlBuilder) Or(whereTokens ...any) *SqlBuilder

Or continues the WHERE clause with OR.

func (*SqlBuilder) OrderBy

func (b *SqlBuilder) OrderBy(column GenericColumnToUse, asc OrderType) *SqlBuilder

OrderBy adds the ORDER BY clause.

func (*SqlBuilder) Pagination

func (b *SqlBuilder) Pagination(pagination *Pagination) *SqlBuilder

Pagination adds the OFFSET and LIMIT clauses if the pagination is not nil and the values are greater than 0.

func (*SqlBuilder) Query

func (b *SqlBuilder) Query(sqlDB *sql.DB) (*ScannedRows, error)

func (*SqlBuilder) QueryCount

func (b *SqlBuilder) QueryCount(sqlDB *sql.DB) (count int, err error)

func (*SqlBuilder) QueryCountWithContext

func (b *SqlBuilder) QueryCountWithContext(ctx context.Context, sqlTx *sql.Tx) (count int, err error)

func (*SqlBuilder) QueryExists

func (b *SqlBuilder) QueryExists(sqlDB *sql.DB) (exists bool, err error)

func (*SqlBuilder) QueryExistsWithContext

func (b *SqlBuilder) QueryExistsWithContext(ctx context.Context, sqlTx *sql.Tx) (exists bool, err error)

func (*SqlBuilder) QueryWithContext

func (b *SqlBuilder) QueryWithContext(ctx context.Context, sqlTx *sql.Tx) (*ScannedRows, error)

func (*SqlBuilder) Select

func (b *SqlBuilder) Select(columns ...GenericColumnToUse) *SqlBuilder

Select adds more columns to the SELECT statement.

func (*SqlBuilder) ThenBy

func (b *SqlBuilder) ThenBy(column GenericColumnToUse, asc OrderType) *SqlBuilder

ThenBy continues the ORDER BY clause with another column.

func (*SqlBuilder) Values

func (b *SqlBuilder) Values(values ...any) *SqlBuilder

Values put the values to be inserted.

func (*SqlBuilder) Where

func (b *SqlBuilder) Where(whereTokens ...any) *SqlBuilder

Where adds the WHERE clause. If having argument on SELECT, need to call Args

type SqlRows

type SqlRows interface {
	Next() bool
	Scan(dest ...any) error
	Close() error
}

type TableMetadata

type TableMetadata[T any] struct {
	// contains filtered or unexported fields
}

func GetTableMetadata

func GetTableMetadata[T any]() TableMetadata[T]

func (TableMetadata[T]) Columns

func (t TableMetadata[T]) Columns() []ColumnMetadata[T]

func (TableMetadata[T]) ColumnsName

func (t TableMetadata[T]) ColumnsName() []string

func (TableMetadata[T]) MustGetColumnByName

func (t TableMetadata[T]) MustGetColumnByName(name string) ColumnMetadata[T]

func (TableMetadata[T]) Name

func (t TableMetadata[T]) Name() string

func (TableMetadata[T]) NewRow

func (t TableMetadata[T]) NewRow() T

NewRow returns new struct of type T

func (TableMetadata[T]) PrimaryKeyColumns

func (t TableMetadata[T]) PrimaryKeyColumns() []ColumnMetadata[T]

type TableMetadataBuildOption

type TableMetadataBuildOption struct {
	ExpectedPkColumns []string // used to double-check the primary key columns
}

type TableMetadataBuilder

type TableMetadataBuilder[T any] struct {
	// contains filtered or unexported fields
}

func NewTableMetadata

func NewTableMetadata[T any](name string) *TableMetadataBuilder[T]

func (*TableMetadataBuilder[T]) AddColumns

func (b *TableMetadataBuilder[T]) AddColumns(columns ...*ColumnMetadataBuilder[T]) *TableMetadataBuilder[T]

func (*TableMetadataBuilder[T]) Build

type TableToUse

type TableToUse[T any] struct {
	// contains filtered or unexported fields
}

func UseTable

func UseTable[T any]() *TableToUse[T]

UseTable returns table to use.

func (*TableToUse[T]) Alias

func (t *TableToUse[T]) Alias(alias string) *TableToUse[T]

Alias sets the table alias.

func (*TableToUse[T]) As

func (t *TableToUse[T]) As(name string) *TableToUse[T]

As provides a way to alter the table name working on, when using partitioned tables.

func (*TableToUse[T]) Col

func (t *TableToUse[T]) Col(column string) GenericColumnToUse

Col returns column by name.

An alias of Column.

func (*TableToUse[T]) Column

func (t *TableToUse[T]) Column(column string) GenericColumnToUse

Column returns column by name.

func (*TableToUse[T]) Columns

func (t *TableToUse[T]) Columns(columns ...string) []GenericColumnToUse

Columns returns columns by names.

func (*TableToUse[T]) ColumnsExcept

func (t *TableToUse[T]) ColumnsExcept(exceptColumns ...string) []GenericColumnToUse

ColumnsExcept returns columns by names, except the given columns.

func (*TableToUse[T]) Metadata

func (t *TableToUse[T]) Metadata() TableMetadata[T]

func (*TableToUse[T]) PrimaryKeyColumns

func (t *TableToUse[T]) PrimaryKeyColumns() []GenericColumnToUse

func (*TableToUse[T]) ReadAllFromRows

func (t *TableToUse[T]) ReadAllFromRows(scanner *ScannedRows) []T

ReadAllFromRows reads all the table from the scanned rows.

func (*TableToUse[T]) ReadFromRow

func (t *TableToUse[T]) ReadFromRow(scanner *ScannedRows) T

ReadFromRow reads the table from the scanned rows.

func (*TableToUse[T]) Seal

func (t *TableToUse[T]) Seal() *TableToUse[T]

Seal ensures that the table properties already set up correctly and prevent future changes to them.

func (*TableToUse[T]) ValueToAny

func (t *TableToUse[T]) ValueToAny(value T) any

ValueToAny converts value to any.

func (*TableToUse[T]) ValuesToAny

func (t *TableToUse[T]) ValuesToAny(values []T) []any

ValuesToAny converts values to any.

Jump to

Keyboard shortcuts

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