query_builder

package
v1.0.1 Latest Latest
Warning

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

Go to latest
Published: Sep 15, 2022 License: MIT Imports: 6 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type IQueryBuilder

type IQueryBuilder interface {
	Distinct() IQueryBuilder
	Table(table spansql.SelectFromTable) IQueryBuilder
	Select(_select []spansql.Expr) IQueryBuilder
	Join(join SelectFromJoin) IQueryBuilder
	Where(expr spansql.BoolExpr) IQueryBuilder
	Order(order spansql.Order) IQueryBuilder
	Limit(limit spansql.LiteralOrParam) IQueryBuilder
	Offset(offset spansql.LiteralOrParam) IQueryBuilder
	Param(name string, value interface{}) spansql.Param
	ParamUnique(name string, value interface{}) spansql.Param
	Query() *spansql.Query
	SQL() (string, map[string]interface{})
}

func New

func New() IQueryBuilder

New initalize/setup a new query builder

func main(){
	var queryBuilder = query_builder.New()
}

type QueryBuilder

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

func (*QueryBuilder) Distinct

func (queryBuilder *QueryBuilder) Distinct() IQueryBuilder

Distinct discards duplicate rows and returns only the remaining rows. For more informations please see Google Standard SQL distinct specification.

func main(){
	var queryBuilder = query_builder.New().
		Distinct()

	// SELECT DISTINCT
}

func (*QueryBuilder) Join

func (queryBuilder *QueryBuilder) Join(join SelectFromJoin) IQueryBuilder

Join merges two from_items so that the SELECT clause can query them as one source. For more informations please see Google Standard SQL join specification.

func main(){
	var queryBuilder = query_builder.New().
		Select([]spansql.Expr{
			spansql.ID("Todos.Id"),
			spansql.ID("Places.Name"),
		}).
		Table(spansql.SelectFromTable{
			Table: "Todos",
		}).
		Join(query_builder.SelectFromJoin{
			Type: spansql.InnerJoin,
			LHS:  spansql.SelectFromTable{Table: "Places"},
			On:   spansql.ComparisonOp{Op: spansql.Eq, LHS: spansql.PathExp{"Todos", "Id"}, RHS: spansql.PathExp{"Places.TodoId"}},
   		})

	// SELECT Todos.Id, Places.Name FROM Todos INNER JOIN Places ON Todos.Id = Places.TodoId
}

func (*QueryBuilder) Limit

func (queryBuilder *QueryBuilder) Limit(limit spansql.LiteralOrParam) IQueryBuilder

Limit specifies a non-negative count of type INT64, and no more than count rows will be returned. For more informations please see Google Standard SQL limit specification.

func main(){
	var queryBuilder = query_builder.New().
		Select([]spansql.Expr{
			spansql.ID("Id"),
		}).
		Table(spansql.SelectFromTable{
			Table: "Todos",
		}).
		Limit(spansql.IntegerLiteral(10))

	// SELECT Id FROM Todos LIMIT 10
}

func (*QueryBuilder) Offset

func (queryBuilder *QueryBuilder) Offset(offset spansql.LiteralOrParam) IQueryBuilder

Offset specifies a non-negative number of rows to skip before applying Limit. Limit works without Offset, while Offset gets ignored without Limit For more informations please see Google Standard SQL offset specification.

func main(){
	var queryBuilder = query_builder.New().
		Select([]spansql.Expr{
			spansql.ID("Id"),
		}).
		Table(spansql.SelectFromTable{
			Table: "Todos",
		}).
		Limit(spansql.IntegerLiteral(10)).
		Offset(spansql.IntegerLiteral(10))

	// SELECT Id FROM Todos LIMIT 10 OFFSET 10
}

func (*QueryBuilder) Order

func (queryBuilder *QueryBuilder) Order(order spansql.Order) IQueryBuilder

Order specifies a column or expression as the sort criterion for the result set. For more informations please see Google Standard SQL order specification.

func main(){
	var queryBuilder = query_builder.New().
		Select([]spansql.Expr{
			spansql.ID("Id"),
		}).
		Table(spansql.SelectFromTable{
			Table: "Todos",
		}).
		Order(spansql.Order{Expr: spansql.ID("Name"), Desc: true})

	// SELECT Id FROM Todos ORDER BY Name
}

func (*QueryBuilder) Param added in v0.2.0

func (queryBuilder *QueryBuilder) Param(name string, value interface{}) spansql.Param

Param sets and store query parameters.

func main(){
	var queryBuilder = query_builder.New().
		Select([]spansql.Expr{
			spansql.ID("Id"),
		}).
		Table(spansql.SelectFromTable{
			Table: "Todos",
		}).
		Where(spansql.ComparisonOp{Op: spansql.Eq, LHS: spansql.ID("Id"), RHS: query_builder.Param("Id", spansql.IntegerLiteral(1))})

	// SELECT Id FROM Todos WHERE Id = @Id
}

func (*QueryBuilder) ParamUnique added in v1.0.0

func (queryBuilder *QueryBuilder) ParamUnique(name string, value interface{}) spansql.Param

ParamUnique sets and store query parameters with a unique name (uuid suffix).

func main(){
	var queryBuilder = query_builder.New().
		Select([]spansql.Expr{
			spansql.ID("Id"),
		}).
		Table(spansql.SelectFromTable{
			Table: "Todos",
		}).
		Where(spansql.ComparisonOp{Op: spansql.Eq, LHS: spansql.ID("Id"), RHS: query_builder.ParamUnique("Id", spansql.IntegerLiteral(1))})

	// SELECT Id FROM Todos WHERE Id = @Id92730f9147e24499b4b4b02a0939bc06
}

func (*QueryBuilder) Query

func (queryBuilder *QueryBuilder) Query() *spansql.Query

Query resolves all given query parts and returns the filled spansql.Query struct.

func (*QueryBuilder) SQL

func (queryBuilder *QueryBuilder) SQL() (string, map[string]interface{})

SQL returns the query sql statement and all named paramters.

func (*QueryBuilder) Select

func (queryBuilder *QueryBuilder) Select(_select []spansql.Expr) IQueryBuilder

Select defines the columns that the query will return. For more informations please see Google Standard SQL select specification.

func main(){
	var queryBuilder = query_builder.New().
		Select([]spansql.Expr{
			spansql.ID("Id"),
			spansql.ID("Name"),
			spansql.ID("Content"),
		}).
		Table(spansql.SelectFromTable{
			Table: "Todos",
		})

	// SELECT Id FROM Todos
}

func (*QueryBuilder) Table

func (queryBuilder *QueryBuilder) Table(table spansql.SelectFromTable) IQueryBuilder

Table indicates the table or tables from which to retrieve rows. For more informations please see Google Standard SQL from specification.

func main(){
	var queryBuilder = query_builder.New().
		Select([]spansql.Expr{
			spansql.ID("Todos.Id"),
			spansql.ID("Places.Name"),
		}).
		Table(spansql.SelectFromTable{
			Table: "Todos",
		}).
		Table(spansql.SelectFromTable{
			Table: "Places",
		})

	// SELECT Todos.Id, Places.Name FROM Todos, Places
}

func (*QueryBuilder) Where

func (queryBuilder *QueryBuilder) Where(expr spansql.BoolExpr) IQueryBuilder

Where filters the results of the FROM clause. For more informations please see Google Standard SQL where specification.

func main(){
	var queryBuilder = query_builder.New().
		Select([]spansql.Expr{
			spansql.ID("Todos.Id"),
			spansql.ID("Places.Name"),
		}).
		Where(spansql.ComparisonOp{Op: spansql.Eq, LHS: spansql.ID("Todos.Id"), RHS: qb.Param("TodosId", spansql.IntegerLiteral(1))})

	// SELECT Todos.Id, Places.Name FROM Todos, Places WHERE Todos.Id = @TodosId
}

type SelectFromJoin

type SelectFromJoin struct {
	spansql.SelectFrom
	Type spansql.JoinType
	LHS  spansql.SelectFrom

	// Join condition.
	// At most one of {On,Using} may be set.
	On    spansql.BoolExpr
	Using []spansql.ID

	// Hints are suggestions for how to evaluate a join.
	// https://cloud.google.com/spanner/docs/query-syntax#join-hints
	Hints map[string]string
}

SelectFromJoin is a custom SelectFrom/SelectFromJoin implementation. It does not include the original LHS because it conflicts with the SelectFromTable implementation. RHS is renamed to LHS.

func (SelectFromJoin) SQL

func (selectFromJoin SelectFromJoin) SQL() string

SQL creates a spansql.SelectFromJoin "clone" to remove the LHS implementation. With this spansql is pretty safe to upgrade.

Jump to

Keyboard shortcuts

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