code: func builtinIn(args []types.Datum, ctx context.Context) (d types.Datum, err error) {
  	if args[0].IsNull() {
  		return
  	}
  	sc := ctx.GetSessionVars().StmtCtx
  	var hasNull bool
  	for _, v := range args[1:] {
  		if v.IsNull() {
  			hasNull = true
  			continue
  		}
  
  		a, b, err := types.CoerceDatum(sc, args[0], v)
  		if err != nil {
  			return d, errors.Trace(err)
  		}
  		ret, err := a.CompareDatum(sc, b)
  		if err != nil {
  			return d, errors.Trace(err)
  		}
  		if ret == 0 {
  			d.SetInt64(1)
  			return d, nil
  		}
  	}
  
  	if hasNull {
  		// If it's no matched but we get null in In, returns null.
  		// e.g 1 in (null, 2, 3) returns null.
  		return
  	}
  	d.SetInt64(0)
  	return
  }
docs: // See http://dev.mysql.com/doc/refman/5.7/en/any-in-some-subqueries.html