123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- package clause
- import "strings"
- type AddConditions []Interface
- func (cs AddConditions) Build(builder BuilderInterface) {
- for idx, c := range cs {
- if idx > 0 {
- builder.Write(" AND ")
- }
- c.Build(builder)
- }
- }
- type ORConditions []Interface
- func (cs ORConditions) Build(builder BuilderInterface) {
- for idx, c := range cs {
- if idx > 0 {
- builder.Write(" OR ")
- }
- c.Build(builder)
- }
- }
- type NotConditions []Interface
- func (cs NotConditions) Build(builder BuilderInterface) {
- for idx, c := range cs {
- if idx > 0 {
- builder.Write(" AND ")
- }
- if negationBuilder, ok := c.(NegationBuilder); ok {
- negationBuilder.NegationBuild(builder)
- } else {
- builder.Write(" NOT ")
- c.Build(builder)
- }
- }
- }
- // Raw raw sql for where
- type Raw struct {
- SQL string
- Values []interface{}
- }
- func (raw Raw) Build(builder BuilderInterface) {
- sql := raw.SQL
- for _, v := range raw.Values {
- sql = strings.Replace(sql, " ? ", " "+builder.AddVar(v)+" ", 1)
- }
- builder.Write(sql)
- }
- // IN Whether a value is within a set of values
- type IN struct {
- Column interface{}
- Values []interface{}
- }
- func (in IN) Build(builder BuilderInterface) {
- builder.WriteQuoted(in.Column)
- if len(in.Values) == 0 {
- builder.Write(" IN (NULL)")
- } else {
- builder.Write(" IN (", builder.AddVar(in.Values...), ")")
- }
- }
- func (in IN) NegationBuild(builder BuilderInterface) {
- if len(in.Values) != 0 {
- builder.WriteQuoted(in.Column)
- builder.Write(" NOT IN (", builder.AddVar(in.Values...), ")")
- }
- }
- // Eq equal to for where
- type Eq struct {
- Column interface{}
- Value interface{}
- }
- func (eq Eq) Build(builder BuilderInterface) {
- builder.WriteQuoted(eq.Column)
- if eq.Value == nil {
- builder.Write(" IS NULL")
- } else {
- builder.Write(" = ", builder.AddVar(eq.Value))
- }
- }
- func (eq Eq) NegationBuild(builder BuilderInterface) {
- Neq{eq.Column, eq.Value}.Build(builder)
- }
- // Neq not equal to for where
- type Neq struct {
- Column interface{}
- Value interface{}
- }
- func (neq Neq) Build(builder BuilderInterface) {
- builder.WriteQuoted(neq.Column)
- if neq.Value == nil {
- builder.Write(" IS NOT NULL")
- } else {
- builder.Write(" <> ", builder.AddVar(neq.Value))
- }
- }
- func (neq Neq) NegationBuild(builder BuilderInterface) {
- Eq{neq.Column, neq.Value}.Build(builder)
- }
- // Gt greater than for where
- type Gt struct {
- Column interface{}
- Value interface{}
- }
- func (gt Gt) Build(builder BuilderInterface) {
- builder.WriteQuoted(gt.Column)
- builder.Write(" > ", builder.AddVar(gt.Value))
- }
- func (gt Gt) NegationBuild(builder BuilderInterface) {
- Lte{gt.Column, gt.Value}.Build(builder)
- }
- // Gte greater than or equal to for where
- type Gte struct {
- Column interface{}
- Value interface{}
- }
- func (gte Gte) Build(builder BuilderInterface) {
- builder.WriteQuoted(gte.Column)
- builder.Write(" >= ", builder.AddVar(gte.Value))
- }
- func (gte Gte) NegationBuild(builder BuilderInterface) {
- Lt{gte.Column, gte.Value}.Build(builder)
- }
- // Lt less than for where
- type Lt struct {
- Column interface{}
- Value interface{}
- }
- func (lt Lt) Build(builder BuilderInterface) {
- builder.WriteQuoted(lt.Column)
- builder.Write(" < ", builder.AddVar(lt.Value))
- }
- func (lt Lt) NegationBuild(builder BuilderInterface) {
- Gte{lt.Column, lt.Value}.Build(builder)
- }
- // Lte less than or equal to for where
- type Lte struct {
- Column interface{}
- Value interface{}
- }
- func (lte Lte) Build(builder BuilderInterface) {
- builder.WriteQuoted(lte.Column)
- builder.Write(" <= ", builder.AddVar(lte.Value))
- }
- func (lte Lte) NegationBuild(builder BuilderInterface) {
- Gt{lte.Column, lte.Value}.Build(builder)
- }
- // Like whether string matches regular expression
- type Like struct {
- Column interface{}
- Value interface{}
- }
- func (like Like) Build(builder BuilderInterface) {
- builder.WriteQuoted(like.Column)
- builder.Write(" LIKE ", builder.AddVar(like.Value))
- }
- func (like Like) NegationBuild(builder BuilderInterface) {
- builder.WriteQuoted(like.Column)
- builder.Write(" NOT LIKE ", builder.AddVar(like.Value))
- }
|