github.com/aacfactory/fns-contrib/databases/sql@v1.2.84/dac/specifications/orders.go (about)

     1  package specifications
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/aacfactory/errors"
     6  	"github.com/aacfactory/fns-contrib/databases/sql/dac/orders"
     7  	"github.com/valyala/bytebufferpool"
     8  	"io"
     9  )
    10  
    11  type Orders orders.Orders
    12  
    13  func (o Orders) Render(ctx Context, w io.Writer) (argument []any, err error) {
    14  	if len(o) == 0 {
    15  		return
    16  	}
    17  	buf := bytebufferpool.Get()
    18  	defer bytebufferpool.Put(buf)
    19  	_, _ = buf.Write(ORDER)
    20  	_, _ = buf.Write(SPACE)
    21  	_, _ = buf.Write(BY)
    22  	_, _ = buf.Write(SPACE)
    23  	for i, order := range o {
    24  		if i > 0 {
    25  			_, _ = buf.Write(COMMA)
    26  		}
    27  		content, has := ctx.Localization(order.Name)
    28  		if !has {
    29  			err = errors.Warning("sql: render order by failed").WithCause(fmt.Errorf("%s was not found", order.Name))
    30  			return
    31  		}
    32  		_, _ = buf.WriteString(content[0])
    33  		if order.Desc {
    34  			_, _ = buf.Write(SPACE)
    35  			_, _ = buf.Write(DESC)
    36  		}
    37  	}
    38  	_, err = w.Write([]byte(buf.String()))
    39  	if err != nil {
    40  		err = errors.Warning("sql: render order by failed").WithCause(err)
    41  		return
    42  	}
    43  	return
    44  }