code: func composeConditionWithBinaryOp(ctx sessionctx.Context, conditions []Expression, funcName string) Expression {
  	length := len(conditions)
  	if length == 0 {
  		return nil
  	}
  	if length == 1 {
  		return conditions[0]
  	}
  	expr := NewFunctionInternal(ctx, funcName,
  		types.NewFieldType(mysql.TypeTiny),
  		composeConditionWithBinaryOp(ctx, conditions[:length/2], funcName),
  		composeConditionWithBinaryOp(ctx, conditions[length/2:], funcName))
  	return expr
  }
docs: // composeConditionWithBinaryOp composes condition with binary operator into a balance deep tree, which benefits a lot for pb decoder/encoder.