queries

package
v1.0.7 Latest Latest
Warning

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

Go to latest
Published: Apr 29, 2025 License: GPL-2.0 Imports: 18 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ErrNoDatabase        errs.Error = "No database connection"
	ErrUnknownDriver     errs.Error = "Unknown driver"
	ErrNoTableName       errs.Error = "No table name"
	ErrNoWhereClause     errs.Error = "No where clause in query"
	ErrFieldNull         errs.Error = "Field cannot be null"
	ErrLastInsertId      errs.Error = "Last insert id is not valid"
	ErrUnsupportedLookup errs.Error = "Unsupported lookup type"

	ErrNoRows       errs.Error = "No rows in result set"
	ErrMultipleRows errs.Error = "Multiple rows in result set"

	ErrTransactionStarted     errs.Error = "Transaction already started"
	ErrFailedStartTransaction errs.Error = "Failed to start transaction"
	ErrNoTransaction          errs.Error = "Transaction was not started"
)
View Source
const MAX_GET_RESULTS = 21

Variables

This section is empty.

Functions

func CT_GetObject

func CT_GetObject[T attrs.Definer](identifier any) (interface{}, error)

func CT_ListObjects

func CT_ListObjects[T attrs.Definer](amount, offset uint) ([]interface{}, error)

func CT_ListObjectsByIDs

func CT_ListObjectsByIDs[T attrs.Definer](i []interface{}) ([]interface{}, error)

func CountObjects

func CountObjects[T attrs.Definer](obj T) (int64, error)

func CreateObject

func CreateObject[T attrs.Definer](obj T) error

func DefinerListToList added in v1.0.7

func DefinerListToList[T attrs.Definer](list []attrs.Definer) []T

func DeleteObject

func DeleteObject[T attrs.Definer](obj T) (int64, error)

func GetObject

func GetObject[T attrs.Definer](identifier any) (T, error)

func ListObjects

func ListObjects[T attrs.Definer](offset, limit uint64, ordering ...string) ([]T, error)

func ListObjectsByIDs

func ListObjectsByIDs[T attrs.Definer, T2 any](offset, limit uint64, ids []T2) ([]T, error)

func RegisterCompiler added in v1.0.7

func RegisterCompiler(driver driver.Driver, compiler func(model attrs.Definer) QueryCompiler)

func RegisterDriver added in v1.0.2

func RegisterDriver(driver driver.Driver, database string, supportsReturning ...SupportsReturning)

RegisterDriver registers a driver with the given database name.

This is used to determine the database type when using sqlx.

If your driver is not one of: - github.com/go-sql-driver/mysql.MySQLDriver - github.com/mattn/go-sqlite3.SQLiteDriver - github.com/jackc/pgx/v5/stdlib.Driver

Then it explicitly needs to be registered here.

func RegisterLookup added in v1.0.7

func RegisterLookup(lookup string, fn func(col string, value []any) (sql string, args []any, err error), drivers ...driver.Driver)

func SaveObject

func SaveObject[T attrs.Definer](obj T) error

func UpdateObject

func UpdateObject[T attrs.Definer](obj T) (int64, error)

Types

type CountQuery added in v1.0.3

type CountQuery Query[int64]

type DB added in v1.0.7

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

type ErrorQuery added in v1.0.7

type ErrorQuery[T any] struct {
	Obj attrs.Definer
	Err error
}

func (*ErrorQuery[T]) Args added in v1.0.7

func (e *ErrorQuery[T]) Args() []any

func (*ErrorQuery[T]) Exec added in v1.0.7

func (e *ErrorQuery[T]) Exec() (T, error)

func (*ErrorQuery[T]) Model added in v1.0.7

func (e *ErrorQuery[T]) Model() attrs.Definer

func (*ErrorQuery[T]) SQL added in v1.0.7

func (e *ErrorQuery[T]) SQL() string

type ExistsQuery added in v1.0.3

type ExistsQuery Query[bool]

type ExprGroup

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

ExprGroup

func (*ExprGroup) And

func (g *ExprGroup) And(exprs ...Expression) Expression

func (*ExprGroup) Args

func (g *ExprGroup) Args() []any

func (*ExprGroup) Clone

func (g *ExprGroup) Clone() Expression

func (*ExprGroup) IsNot

func (g *ExprGroup) IsNot() bool

func (*ExprGroup) Not

func (g *ExprGroup) Not(not bool) Expression

func (*ExprGroup) Or

func (g *ExprGroup) Or(exprs ...Expression) Expression

func (*ExprGroup) SQL

func (g *ExprGroup) SQL(sb *strings.Builder)

func (*ExprGroup) With

func (g *ExprGroup) With(d driver.Driver, m attrs.Definer, quote string) Expression

type ExprNode

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

func Expr

func Expr(field string, operation string, value ...any) *ExprNode

func Q

func Q(fieldLookup string, value ...any) *ExprNode

func (*ExprNode) And

func (e *ExprNode) And(exprs ...Expression) Expression

func (*ExprNode) Args

func (e *ExprNode) Args() []any

func (*ExprNode) Clone

func (e *ExprNode) Clone() Expression

func (*ExprNode) IsNot

func (e *ExprNode) IsNot() bool

func (*ExprNode) Not

func (e *ExprNode) Not(not bool) Expression

func (*ExprNode) Or

func (e *ExprNode) Or(exprs ...Expression) Expression

func (*ExprNode) SQL

func (e *ExprNode) SQL(sb *strings.Builder)

func (*ExprNode) With

func (e *ExprNode) With(d driver.Driver, m attrs.Definer, quote string) Expression

type Expression

type Expression interface {
	SQL(sb *strings.Builder)
	Args() []any
	IsNot() bool
	Not(b bool) Expression
	And(...Expression) Expression
	Or(...Expression) Expression
	Clone() Expression
	With(d driver.Driver, model attrs.Definer, quote string) Expression
}

func And

func And(exprs ...Expression) Expression

func Or

func Or(exprs ...Expression) Expression

type FieldInfo added in v1.0.3

type FieldInfo struct {
	SourceField attrs.Field
	Model       attrs.Definer
	Table       string
	Chain       []string
	Fields      []attrs.Field
}

func (*FieldInfo) WriteFields added in v1.0.7

func (f *FieldInfo) WriteFields(sb *strings.Builder, quote string)

type GenericQueryBuilder added in v1.0.7

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

func (*GenericQueryBuilder) BuildCountQuery added in v1.0.7

func (g *GenericQueryBuilder) BuildCountQuery(
	ctx context.Context,
	qs *QuerySet,
	where []Expression,
	joins []JoinDef,
	groupBy []FieldInfo,
	limit int,
	offset int,
) CountQuery

func (*GenericQueryBuilder) BuildCreateQuery added in v1.0.7

func (g *GenericQueryBuilder) BuildCreateQuery(
	ctx context.Context,
	qs *QuerySet,
	fields FieldInfo,
	primary attrs.Field,
	values []any,
) Query[[]interface{}]

func (*GenericQueryBuilder) BuildDeleteQuery added in v1.0.7

func (g *GenericQueryBuilder) BuildDeleteQuery(
	ctx context.Context,
	qs *QuerySet,
	where []Expression,
	joins []JoinDef,
	groupBy []FieldInfo,
) CountQuery

func (*GenericQueryBuilder) BuildSelectQuery added in v1.0.7

func (g *GenericQueryBuilder) BuildSelectQuery(
	ctx context.Context,
	qs *QuerySet,
	fields []FieldInfo,
	where []Expression,
	having []Expression,
	joins []JoinDef,
	groupBy []FieldInfo,
	orderBy []OrderBy,
	limit int,
	offset int,
	union []Union,
	forUpdate bool,
	distinct bool,
) Query[[][]interface{}]

func (*GenericQueryBuilder) BuildUpdateQuery added in v1.0.7

func (g *GenericQueryBuilder) BuildUpdateQuery(
	ctx context.Context,
	qs *QuerySet,
	fields FieldInfo,
	where []Expression,
	joins []JoinDef,
	groupBy []FieldInfo,
	values []any,
) CountQuery

func (*GenericQueryBuilder) CommitTransaction added in v1.0.7

func (g *GenericQueryBuilder) CommitTransaction() error

func (*GenericQueryBuilder) DB added in v1.0.7

func (g *GenericQueryBuilder) DB() DB

func (*GenericQueryBuilder) InTransaction added in v1.0.7

func (g *GenericQueryBuilder) InTransaction() bool

func (*GenericQueryBuilder) Quote added in v1.0.7

func (g *GenericQueryBuilder) Quote() (string, string)

func (*GenericQueryBuilder) RollbackTransaction added in v1.0.7

func (g *GenericQueryBuilder) RollbackTransaction() error

func (*GenericQueryBuilder) StartTransaction added in v1.0.7

func (g *GenericQueryBuilder) StartTransaction(ctx context.Context) (Transaction, error)

func (*GenericQueryBuilder) SupportsReturning added in v1.0.7

func (g *GenericQueryBuilder) SupportsReturning() SupportsReturning

type JoinDef added in v1.0.3

type JoinDef struct {
	Table      string
	TypeJoin   string
	ConditionA string
	Logic      string
	ConditionB string
}

type LogicalOp

type LogicalOp string
const (
	OpAnd LogicalOp = "AND"
	OpOr  LogicalOp = "OR"
)

type OrderBy added in v1.0.3

type OrderBy struct {
	Table string
	Field string
	Desc  bool
}

type Query added in v1.0.3

type Query[T1 any] interface {
	SQL() string
	Args() []any
	Model() attrs.Definer
	Exec() (T1, error)
}

type QueryCompiler added in v1.0.7

type QueryCompiler interface {
	// DB returns the database connection used by the query compiler.
	//
	// If a transaction was started, it will return the transaction instead of the database connection.
	DB() DB

	// Quote returns the quotes used by the database.
	//
	// This is used to quote table and field names.
	// For example, MySQL uses backticks (`) and PostgreSQL uses double quotes (").
	Quote() (front string, back string)

	// SupportsReturning returns the type of returning supported by the database.
	// It can be one of the following:
	//
	// - SupportsReturningNone: no returning supported
	// - SupportsReturningLastInsertId: last insert id supported
	// - SupportsReturningColumns: returning columns supported
	SupportsReturning() SupportsReturning

	// StartTransaction starts a new transaction.
	StartTransaction(ctx context.Context) (Transaction, error)

	// CommitTransaction commits the current ongoing transaction.
	CommitTransaction() error

	// RollbackTransaction rolls back the current ongoing transaction.
	RollbackTransaction() error

	// InTransaction returns true if the current query compiler is in a transaction.
	InTransaction() bool

	// BuildSelectQuery builds a select query with the given parameters.
	BuildSelectQuery(
		ctx context.Context,
		qs *QuerySet,
		fields []FieldInfo,
		where []Expression,
		having []Expression,
		joins []JoinDef,
		groupBy []FieldInfo,
		orderBy []OrderBy,
		limit int,
		offset int,
		union []Union,
		forUpdate bool,
		distinct bool,
	) Query[[][]interface{}]

	// BuildCountQuery builds a count query with the given parameters.
	BuildCountQuery(
		ctx context.Context,
		qs *QuerySet,
		where []Expression,
		joins []JoinDef,
		groupBy []FieldInfo,
		limit int,
		offset int,
	) CountQuery

	// BuildCreateQuery builds a create query with the given parameters.
	BuildCreateQuery(
		ctx context.Context,
		qs *QuerySet,
		fields FieldInfo,
		primary attrs.Field,
		values []any,
	) Query[[]interface{}]

	// BuildValuesListQuery builds a values list query with the given parameters.
	BuildUpdateQuery(
		ctx context.Context,
		qs *QuerySet,
		fields FieldInfo,
		where []Expression,
		joins []JoinDef,
		groupBy []FieldInfo,
		values []any,
	) CountQuery

	// BuildUpdateQuery builds an update query with the given parameters.
	BuildDeleteQuery(
		ctx context.Context,
		qs *QuerySet,
		where []Expression,
		joins []JoinDef,
		groupBy []FieldInfo,
	) CountQuery
}

func Compiler added in v1.0.7

func Compiler(model attrs.Definer) QueryCompiler

func NewGenericQueryBuilder added in v1.0.7

func NewGenericQueryBuilder(model attrs.Definer) QueryCompiler

type QueryObject added in v1.0.7

type QueryObject[T1 any] struct {
	// contains filtered or unexported fields
}

func (*QueryObject[T1]) Args added in v1.0.7

func (q *QueryObject[T1]) Args() []any

func (*QueryObject[T1]) Exec added in v1.0.7

func (q *QueryObject[T1]) Exec() (T1, error)

func (*QueryObject[T1]) Model added in v1.0.7

func (q *QueryObject[T1]) Model() attrs.Definer

func (*QueryObject[T1]) SQL added in v1.0.7

func (q *QueryObject[T1]) SQL() string

type QuerySet

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

func Objects

func Objects(model attrs.Definer) *QuerySet

func (*QuerySet) All

func (qs *QuerySet) All() Query[[]attrs.Definer]

func (*QuerySet) Clone

func (qs *QuerySet) Clone() *QuerySet

func (*QuerySet) Compiler added in v1.0.7

func (qs *QuerySet) Compiler() QueryCompiler

func (*QuerySet) Count

func (qs *QuerySet) Count() CountQuery

func (*QuerySet) Create added in v1.0.7

func (qs *QuerySet) Create(value attrs.Definer) Query[attrs.Definer]

func (*QuerySet) DB added in v1.0.7

func (qs *QuerySet) DB() DB

func (*QuerySet) Delete added in v1.0.3

func (qs *QuerySet) Delete() CountQuery

func (*QuerySet) Distinct added in v1.0.3

func (qs *QuerySet) Distinct() *QuerySet

func (*QuerySet) Exists added in v1.0.3

func (qs *QuerySet) Exists() ExistsQuery

func (*QuerySet) Filter

func (qs *QuerySet) Filter(key interface{}, vals ...interface{}) *QuerySet

func (*QuerySet) First

func (qs *QuerySet) First() Query[attrs.Definer]

func (*QuerySet) ForUpdate

func (qs *QuerySet) ForUpdate() *QuerySet

func (*QuerySet) Get added in v1.0.7

func (qs *QuerySet) Get() Query[attrs.Definer]

func (*QuerySet) GetOrCreate added in v1.0.7

func (qs *QuerySet) GetOrCreate(value attrs.Definer) (attrs.Definer, error)

func (*QuerySet) GroupBy

func (qs *QuerySet) GroupBy(fields ...string) *QuerySet

func (*QuerySet) Having

func (qs *QuerySet) Having(key interface{}, vals ...interface{}) *QuerySet

func (*QuerySet) Last added in v1.0.3

func (qs *QuerySet) Last() Query[attrs.Definer]

func (*QuerySet) Limit

func (qs *QuerySet) Limit(n int) *QuerySet

func (*QuerySet) Model added in v1.0.7

func (qs *QuerySet) Model() attrs.Definer

func (*QuerySet) Offset

func (qs *QuerySet) Offset(n int) *QuerySet

func (*QuerySet) OrderBy

func (qs *QuerySet) OrderBy(fields ...string) *QuerySet

func (*QuerySet) Reverse added in v1.0.3

func (qs *QuerySet) Reverse() *QuerySet

func (*QuerySet) Select added in v1.0.3

func (qs *QuerySet) Select(fields ...string) *QuerySet

func (*QuerySet) Union

func (qs *QuerySet) Union(f func(*QuerySet) *QuerySet) *QuerySet

func (*QuerySet) Update added in v1.0.3

func (qs *QuerySet) Update(value attrs.Definer) CountQuery

func (*QuerySet) ValuesList added in v1.0.3

func (qs *QuerySet) ValuesList(fields ...string) ValuesListQuery

type RawExpr added in v1.0.3

type RawExpr struct {
	Statement string
	Fields    []string
	Params    []any
	// contains filtered or unexported fields
}

RawExpr is a function expression for SQL queries. It is used to represent a function call in SQL queries.

It can be used like so:

	RawExpr{
		// Represent the SQL function call, with each %s being replaced by the corresponding field in fields.
		sql:    `SUBSTR(TRIM(%s, " "), 0, 2) = ?``,
     	// The fields to be used in the SQL function call. Each field will be replaced by the corresponding value in args.
		fields: []string{"myField"},
		// The arguments to be used in the SQL function call. Each argument will be replaced by the corresponding value in args.
		args:   []any{"ab"},
	}

func (*RawExpr) And added in v1.0.3

func (e *RawExpr) And(exprs ...Expression) Expression

func (*RawExpr) Args added in v1.0.3

func (e *RawExpr) Args() []any

func (*RawExpr) Clone added in v1.0.3

func (e *RawExpr) Clone() Expression

func (*RawExpr) IsNot added in v1.0.3

func (e *RawExpr) IsNot() bool

func (*RawExpr) Not added in v1.0.3

func (e *RawExpr) Not(not bool) Expression

func (*RawExpr) Or added in v1.0.3

func (e *RawExpr) Or(exprs ...Expression) Expression

func (*RawExpr) SQL added in v1.0.3

func (e *RawExpr) SQL(sb *strings.Builder)

func (*RawExpr) With added in v1.0.3

func (e *RawExpr) With(d driver.Driver, m attrs.Definer, quote string) Expression

type SupportsReturning added in v1.0.7

type SupportsReturning string
const (
	SupportsReturningNone         SupportsReturning = ""
	SupportsReturningLastInsertId SupportsReturning = "last_insert_id"
	SupportsReturningColumns      SupportsReturning = "columns"
)

type Transaction added in v1.0.7

type Transaction interface {
	DB
	Commit() error
	Rollback() error
}

type Union

type Union func(*QuerySet) *QuerySet

type ValuesListQuery added in v1.0.3

type ValuesListQuery Query[[][]any]

Jump to

Keyboard shortcuts

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