github.com/RevenueMonster/sqlike@v1.0.6/sqlike/actions/find_one.go (about)

     1  package actions
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/RevenueMonster/sqlike/sql/expr"
     7  )
     8  
     9  // SelectOneStatement :
    10  type SelectOneStatement interface {
    11  	Distinct() SelectOneStatement
    12  	Select(fields ...interface{}) SelectOneStatement
    13  	From(values ...string) SelectOneStatement
    14  	Where(fields ...interface{}) SelectOneStatement
    15  	Having(fields ...interface{}) SelectOneStatement
    16  	GroupBy(fields ...interface{}) SelectOneStatement
    17  	OrderBy(fields ...interface{}) SelectOneStatement
    18  }
    19  
    20  // FindOneActions :
    21  type FindOneActions struct {
    22  	FindActions
    23  }
    24  
    25  // Select :
    26  func (act *FindOneActions) Select(fields ...interface{}) SelectOneStatement {
    27  	act.Projections = fields
    28  	return act
    29  }
    30  
    31  // Distinct :
    32  func (act *FindOneActions) Distinct() SelectOneStatement {
    33  	act.DistinctOn = true
    34  	return act
    35  }
    36  
    37  // From :
    38  func (act *FindOneActions) From(values ...string) SelectOneStatement {
    39  	length := len(values)
    40  	if length == 0 {
    41  		panic("empty table name")
    42  	}
    43  	if length > 0 {
    44  		act.Table = strings.TrimSpace(values[0])
    45  	}
    46  	if length > 1 {
    47  		act.Database = strings.TrimSpace(values[0])
    48  		act.Table = strings.TrimSpace(values[1])
    49  	}
    50  	return act
    51  }
    52  
    53  // Where :
    54  func (act *FindOneActions) Where(fields ...interface{}) SelectOneStatement {
    55  	act.Conditions = expr.And(fields...)
    56  	return act
    57  }
    58  
    59  // Having :
    60  func (act *FindOneActions) Having(fields ...interface{}) SelectOneStatement {
    61  	act.Havings = expr.And(fields...)
    62  	return act
    63  }
    64  
    65  // OrderBy :
    66  func (act *FindOneActions) OrderBy(fields ...interface{}) SelectOneStatement {
    67  	act.Sorts = fields
    68  	return act
    69  }
    70  
    71  // GroupBy :
    72  func (act *FindOneActions) GroupBy(fields ...interface{}) SelectOneStatement {
    73  	act.GroupBys = fields
    74  	return act
    75  }