sqlbuilder

package
v0.30.0 Latest Latest
Warning

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

Go to latest
Published: Mar 28, 2023 License: MIT Imports: 6 Imported by: 0

Documentation

Overview

Package sqlbuilder contains functionality for building SQL from the ast.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func BaseOps

func BaseOps() map[string]string

BaseOps returns a default map of SLQ operator (e.g. "==" or "!=") to its default SQL rendering. The returned map is a copy and can be safely modified by the caller.

Types

type BaseFragmentBuilder

type BaseFragmentBuilder struct {
	Log lg.Log
	// Quote is the driver-specific quote rune, e.g. " or `
	Quote string

	// QuoteFn quotes an identifier.
	QuoteFn func(string) string
	Ops     map[string]string
}

BaseFragmentBuilder is a default implementation of sqlbuilder.FragmentBuilder.

func (*BaseFragmentBuilder) Distinct added in v0.30.0

func (fb *BaseFragmentBuilder) Distinct(n *ast.UniqueNode) (string, error)

Distinct implements FragmentBuilder.

func (*BaseFragmentBuilder) Expr

func (fb *BaseFragmentBuilder) Expr(expr *ast.ExprNode) (string, error)

Expr implements FragmentBuilder.

func (*BaseFragmentBuilder) FromTable

func (fb *BaseFragmentBuilder) FromTable(tblSel *ast.TblSelectorNode) (string, error)

FromTable implements FragmentBuilder.

func (*BaseFragmentBuilder) Function

func (fb *BaseFragmentBuilder) Function(fn *ast.FuncNode) (string, error)

Function implements FragmentBuilder.

func (*BaseFragmentBuilder) GroupBy added in v0.28.0

func (fb *BaseFragmentBuilder) GroupBy(gb *ast.GroupByNode) (string, error)

GroupBy implements FragmentBuilder.

func (*BaseFragmentBuilder) Join

func (fb *BaseFragmentBuilder) Join(fnJoin *ast.JoinNode) (string, error)

Join implements FragmentBuilder.

func (*BaseFragmentBuilder) Operator

func (fb *BaseFragmentBuilder) Operator(op *ast.OperatorNode) (string, error)

Operator implements FragmentBuilder.

func (*BaseFragmentBuilder) OrderBy added in v0.27.0

func (fb *BaseFragmentBuilder) OrderBy(ob *ast.OrderByNode) (string, error)

OrderBy implements FragmentBuilder.

func (*BaseFragmentBuilder) Range

func (fb *BaseFragmentBuilder) Range(rr *ast.RowRangeNode) (string, error)

Range implements FragmentBuilder.

func (*BaseFragmentBuilder) SelectCols

func (fb *BaseFragmentBuilder) SelectCols(cols []ast.ResultColumn) (string, error)

SelectCols implements FragmentBuilder.

func (*BaseFragmentBuilder) Where

func (fb *BaseFragmentBuilder) Where(where *ast.WhereNode) (string, error)

Where implements FragmentBuilder.

type BaseQueryBuilder

type BaseQueryBuilder struct {
	Distinct string
	Columns  string
	From     string
	Where    string
	GroupBy  string
	OrderBy  string
	Range    string
}

BaseQueryBuilder is a default implementation of sqlbuilder.QueryBuilder.

func (*BaseQueryBuilder) Render added in v0.30.0

func (qb *BaseQueryBuilder) Render() (string, error)

Render implements QueryBuilder.

func (*BaseQueryBuilder) SetColumns added in v0.30.0

func (qb *BaseQueryBuilder) SetColumns(cols string)

SetColumns implements QueryBuilder.

func (*BaseQueryBuilder) SetDistinct added in v0.30.0

func (qb *BaseQueryBuilder) SetDistinct(d string)

SetDistinct implements QueryBuilder.

func (*BaseQueryBuilder) SetFrom

func (qb *BaseQueryBuilder) SetFrom(from string)

SetFrom implements QueryBuilder.

func (*BaseQueryBuilder) SetGroupBy added in v0.28.0

func (qb *BaseQueryBuilder) SetGroupBy(gb string)

SetGroupBy implements QueryBuilder.

func (*BaseQueryBuilder) SetOrderBy added in v0.27.0

func (qb *BaseQueryBuilder) SetOrderBy(ob string)

SetOrderBy implements QueryBuilder.

func (*BaseQueryBuilder) SetRange

func (qb *BaseQueryBuilder) SetRange(rng string)

SetRange implements QueryBuilder.

func (*BaseQueryBuilder) SetWhere

func (qb *BaseQueryBuilder) SetWhere(where string)

SetWhere implements QueryBuilder.

type FragmentBuilder

type FragmentBuilder interface {
	// FromTable renders a FROM table fragment.
	FromTable(tblSel *ast.TblSelectorNode) (string, error)

	// SelectCols renders a column names/expression fragment.
	// It shouldn't render the actual SELECT keyword. Example:
	//
	//   "first_name", "last name" AS given_name
	SelectCols(cols []ast.ResultColumn) (string, error)

	// Range renders a row range fragment.
	Range(rr *ast.RowRangeNode) (string, error)

	// OrderBy renders the ORDER BY fragment.
	OrderBy(ob *ast.OrderByNode) (string, error)

	// GroupBy renders the GROUP BY fragment.
	GroupBy(gb *ast.GroupByNode) (string, error)

	// Join renders a join fragment.
	Join(fnJoin *ast.JoinNode) (string, error)

	// Function renders a function fragment.
	Function(fn *ast.FuncNode) (string, error)

	// Where renders a WHERE fragment.
	Where(where *ast.WhereNode) (string, error)

	// Expr renders an expression fragment.
	Expr(expr *ast.ExprNode) (string, error)

	// Operator renders an operator fragment.
	Operator(op *ast.OperatorNode) (string, error)

	// Distinct renders the DISTINCT fragment. Returns an
	// empty string if n is nil.
	Distinct(n *ast.UniqueNode) (string, error)
}

FragmentBuilder renders driver-specific SQL fragments.

type QueryBuilder

type QueryBuilder interface {
	// SetColumns sets the columns to select.
	SetColumns(cols string)

	// SetFrom sets the FROM clause.
	SetFrom(from string)

	// SetWhere sets the WHERE clause.
	SetWhere(where string)

	// SetRange sets the LIMIT ... OFFSET clause.
	SetRange(rng string)

	// SetOrderBy sets the ORDER BY clause.
	SetOrderBy(ob string)

	// SetGroupBy sets the GROUP BY clause.
	SetGroupBy(gb string)

	// SetDistinct sets the DISTINCT clause.
	SetDistinct(d string)

	// Render renders the SQL query.
	Render() (string, error)
}

QueryBuilder provides an abstraction for building a SQL query.

Jump to

Keyboard shortcuts

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