github.com/kcmvp/gob@v1.0.17/dbx/clause.go (about)

     1  package dbx
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/kcmvp/gob/internal"
     7  	"github.com/samber/lo"
     8  )
     9  
    10  type IEntity interface {
    11  	Table() string
    12  }
    13  
    14  type Key interface {
    15  	string | int64
    16  }
    17  
    18  type SQL interface {
    19  	SQLStr() string
    20  }
    21  
    22  type Order string
    23  
    24  const (
    25  	ASC  Order = "ASC"
    26  	DESC Order = "DESC"
    27  )
    28  
    29  type Attr internal.Mapper
    30  
    31  func (a Attr) SQLStr() string {
    32  	return a.B
    33  }
    34  
    35  type Set lo.Tuple2[Attr, any]
    36  
    37  // Criteria attribute predicate
    38  type Criteria struct {
    39  	expression string
    40  }
    41  
    42  func (criteria Criteria) SQLStr() string {
    43  	return criteria.expression
    44  }
    45  
    46  func (criteria Criteria) Or(rp Criteria) Criteria {
    47  	return Criteria{
    48  		expression: fmt.Sprintf("(%s or %s)", criteria.expression, rp.SQLStr()),
    49  	}
    50  }
    51  
    52  func (criteria Criteria) Add(rp Criteria) Criteria {
    53  	return Criteria{
    54  		expression: fmt.Sprintf("(%s and %s)", criteria.expression, rp.SQLStr()),
    55  	}
    56  }
    57  
    58  func LT(attr Attr) Criteria {
    59  	return Criteria{expression: fmt.Sprintf("%s < ?", attr.SQLStr())}
    60  }
    61  
    62  func LTE(attr Attr) Criteria {
    63  	return Criteria{expression: fmt.Sprintf("%s <= ?", attr.SQLStr())}
    64  }
    65  
    66  func GT(attr Attr) Criteria {
    67  	return Criteria{expression: fmt.Sprintf("%s > ?", attr.SQLStr())}
    68  }
    69  
    70  func GTE(attr Attr) Criteria {
    71  	return Criteria{expression: fmt.Sprintf("%s >= ?", attr.SQLStr())}
    72  }
    73  
    74  func Null(attr Attr) Criteria {
    75  	return Criteria{expression: fmt.Sprintf("%s is null", attr.SQLStr())}
    76  }
    77  
    78  func NotNull(attr Attr) Criteria {
    79  	return Criteria{expression: fmt.Sprintf("%s is not null", attr.SQLStr())}
    80  }
    81  
    82  func Like(attr Attr) Criteria {
    83  	return Criteria{expression: fmt.Sprintf("%s like '%%?%%'", attr.SQLStr())}
    84  }
    85  
    86  func NotLike(attr Attr) Criteria {
    87  	return Criteria{expression: fmt.Sprintf("%s not like '%%?%%'", attr.SQLStr())}
    88  }
    89  
    90  func Prefix(attr Attr) Criteria {
    91  	return Criteria{expression: fmt.Sprintf("%s like '?%%'", attr.SQLStr())}
    92  }
    93  
    94  func Suffix[E IEntity](attr Attr) Criteria {
    95  	return Criteria{expression: fmt.Sprintf("%s like '%%?'", attr.SQLStr())}
    96  }
    97  
    98  type OrderBy lo.Tuple2[Attr, Order]
    99  
   100  func (orderBy OrderBy) SQLStr() string {
   101  	return fmt.Sprintf("%s %s", orderBy.A.SQLStr(), orderBy.B)
   102  }
   103  
   104  var (
   105  	_ SQL = (*Attr)(nil)
   106  	_ SQL = (*Criteria)(nil)
   107  	_ SQL = (*OrderBy)(nil)
   108  )