Source File
select.go
Belonging Package
github.com/Masterminds/squirrel
package squirrel
import (
)
type selectData struct {
PlaceholderFormat PlaceholderFormat
RunWith BaseRunner
Prefixes []Sqlizer
Options []string
Columns []Sqlizer
From Sqlizer
Joins []Sqlizer
WhereParts []Sqlizer
GroupBys []string
HavingParts []Sqlizer
OrderByParts []Sqlizer
Limit string
Offset string
Suffixes []Sqlizer
}
func ( *selectData) () (sql.Result, error) {
if .RunWith == nil {
return nil, RunnerNotSet
}
return ExecWith(.RunWith, )
}
func ( *selectData) () (*sql.Rows, error) {
if .RunWith == nil {
return nil, RunnerNotSet
}
return QueryWith(.RunWith, )
}
func ( *selectData) () RowScanner {
if .RunWith == nil {
return &Row{err: RunnerNotSet}
}
, := .RunWith.(QueryRower)
if ! {
return &Row{err: RunnerNotQueryRunner}
}
return QueryRowWith(, )
}
func ( *selectData) () ( string, []interface{}, error) {
, , = .toSql()
if != nil {
return
}
, = .PlaceholderFormat.ReplacePlaceholders()
return
}
func ( *selectData) () ( string, []interface{}, error) {
return .toSql()
}
func ( *selectData) () ( string, []interface{}, error) {
if len(.Columns) == 0 {
= fmt.Errorf("select statements must have at least one result column")
return
}
:= &bytes.Buffer{}
if len(.Prefixes) > 0 {
, = appendToSql(.Prefixes, , " ", )
if != nil {
return
}
.WriteString(" ")
}
.WriteString("SELECT ")
if len(.Options) > 0 {
.WriteString(strings.Join(.Options, " "))
.WriteString(" ")
}
if len(.Columns) > 0 {
, = appendToSql(.Columns, , ", ", )
if != nil {
return
}
}
if .From != nil {
.WriteString(" FROM ")
, = appendToSql([]Sqlizer{.From}, , "", )
if != nil {
return
}
}
if len(.Joins) > 0 {
.WriteString(" ")
, = appendToSql(.Joins, , " ", )
if != nil {
return
}
}
if len(.WhereParts) > 0 {
.WriteString(" WHERE ")
, = appendToSql(.WhereParts, , " AND ", )
if != nil {
return
}
}
if len(.GroupBys) > 0 {
.WriteString(" GROUP BY ")
.WriteString(strings.Join(.GroupBys, ", "))
}
if len(.HavingParts) > 0 {
.WriteString(" HAVING ")
, = appendToSql(.HavingParts, , " AND ", )
if != nil {
return
}
}
if len(.OrderByParts) > 0 {
.WriteString(" ORDER BY ")
, = appendToSql(.OrderByParts, , ", ", )
if != nil {
return
}
}
if len(.Limit) > 0 {
.WriteString(" LIMIT ")
.WriteString(.Limit)
}
if len(.Offset) > 0 {
.WriteString(" OFFSET ")
.WriteString(.Offset)
}
if len(.Suffixes) > 0 {
.WriteString(" ")
, = appendToSql(.Suffixes, , " ", )
if != nil {
return
}
}
= .String()
return
}
type SelectBuilder builder.Builder
func () {
builder.Register(SelectBuilder{}, selectData{})
}
func ( SelectBuilder) ( PlaceholderFormat) SelectBuilder {
return builder.Set(, "PlaceholderFormat", ).(SelectBuilder)
}
func ( SelectBuilder) ( BaseRunner) SelectBuilder {
return setRunWith(, ).(SelectBuilder)
}
func ( SelectBuilder) () (sql.Result, error) {
:= builder.GetStruct().(selectData)
return .Exec()
}
func ( SelectBuilder) () (*sql.Rows, error) {
:= builder.GetStruct().(selectData)
return .Query()
}
func ( SelectBuilder) () RowScanner {
:= builder.GetStruct().(selectData)
return .QueryRow()
}
func ( SelectBuilder) ( ...interface{}) error {
return .QueryRow().Scan(...)
}
func ( SelectBuilder) () (string, []interface{}, error) {
:= builder.GetStruct().(selectData)
return .ToSql()
}
func ( SelectBuilder) () (string, []interface{}) {
, , := .ToSql()
if != nil {
panic()
}
return ,
}
func ( SelectBuilder) () (string, []interface{}, error) {
:= builder.GetStruct().(selectData)
return .toSqlRaw()
}
func ( SelectBuilder) ( string, ...interface{}) SelectBuilder {
return .PrefixExpr(Expr(, ...))
}
func ( SelectBuilder) ( Sqlizer) SelectBuilder {
return builder.Append(, "Prefixes", ).(SelectBuilder)
}
func ( SelectBuilder) () SelectBuilder {
return .Options("DISTINCT")
}
func ( SelectBuilder) ( ...string) SelectBuilder {
return builder.Extend(, "Options", ).(SelectBuilder)
}
func ( SelectBuilder) ( ...string) SelectBuilder {
:= make([]interface{}, 0, len())
for , := range {
= append(, newPart())
}
return builder.Extend(, "Columns", ).(SelectBuilder)
}
func ( SelectBuilder) ( interface{}, ...interface{}) SelectBuilder {
return builder.Append(, "Columns", newPart(, ...)).(SelectBuilder)
}
func ( SelectBuilder) ( string) SelectBuilder {
return builder.Set(, "From", newPart()).(SelectBuilder)
}
= .PlaceholderFormat(Question)
return builder.Set(, "From", Alias(, )).(SelectBuilder)
}
func ( SelectBuilder) ( interface{}, ...interface{}) SelectBuilder {
return builder.Append(, "Joins", newPart(, ...)).(SelectBuilder)
}
func ( SelectBuilder) ( string, ...interface{}) SelectBuilder {
return .JoinClause("JOIN "+, ...)
}
func ( SelectBuilder) ( string, ...interface{}) SelectBuilder {
return .JoinClause("LEFT JOIN "+, ...)
}
func ( SelectBuilder) ( string, ...interface{}) SelectBuilder {
return .JoinClause("RIGHT JOIN "+, ...)
}
func ( SelectBuilder) ( interface{}, ...interface{}) SelectBuilder {
if == nil || == "" {
return
}
return builder.Append(, "WhereParts", newWherePart(, ...)).(SelectBuilder)
}
func ( SelectBuilder) ( ...string) SelectBuilder {
return builder.Extend(, "GroupBys", ).(SelectBuilder)
}
func ( SelectBuilder) ( interface{}, ...interface{}) SelectBuilder {
return builder.Append(, "HavingParts", newWherePart(, ...)).(SelectBuilder)
}
func ( SelectBuilder) ( interface{}, ...interface{}) SelectBuilder {
return builder.Append(, "OrderByParts", newPart(, ...)).(SelectBuilder)
}
func ( SelectBuilder) ( ...string) SelectBuilder {
for , := range {
= .OrderByClause()
}
return
}
func ( SelectBuilder) ( uint64) SelectBuilder {
return builder.Set(, "Limit", fmt.Sprintf("%d", )).(SelectBuilder)
}
func ( SelectBuilder) () SelectBuilder {
return builder.Delete(, "Limit").(SelectBuilder)
}
func ( SelectBuilder) ( uint64) SelectBuilder {
return builder.Set(, "Offset", fmt.Sprintf("%d", )).(SelectBuilder)
}
func ( SelectBuilder) () SelectBuilder {
return builder.Delete(, "Offset").(SelectBuilder)
}
func ( SelectBuilder) ( string, ...interface{}) SelectBuilder {
return .SuffixExpr(Expr(, ...))
}
func ( SelectBuilder) ( Sqlizer) SelectBuilder {
return builder.Append(, "Suffixes", ).(SelectBuilder)
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |