github.com/wanlay/gorm-dm8@v1.0.5/clauses/in.go (about)

     1  package clauses
     2  
     3  import "gorm.io/gorm/clause"
     4  
     5  // IN Whether a value is within a set of values
     6  type IN struct {
     7  	Column interface{}
     8  	Values []interface{}
     9  }
    10  
    11  func (in IN) Build(builder clause.Builder) {
    12  	builder.WriteQuoted(in.Column)
    13  	switch len(in.Values) {
    14  	case 0:
    15  		builder.WriteString(" IN (NULL)")
    16  	case 1:
    17  		if _, ok := in.Column.([]clause.Column); ok {
    18  			builder.WriteString(" = (")
    19  			builder.AddVar(builder, in.Values...)
    20  			builder.WriteString(")")
    21  		} else {
    22  			builder.WriteString(" = ")
    23  			builder.AddVar(builder, in.Values...)
    24  		}
    25  
    26  	default:
    27  		builder.WriteString(" IN (")
    28  		builder.AddVar(builder, in.Values...)
    29  		builder.WriteByte(')')
    30  
    31  	}
    32  }