You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
go-library/vendor/github.com/upper/db/v4/internal/sqladapter/exql/raw.go

49 lines
980 B

package exql
import (
"fmt"
"github.com/upper/db/v4/internal/cache"
)
var (
_ = fmt.Stringer(&Raw{})
)
// Raw represents a value that is meant to be used in a query without escaping.
type Raw struct {
Value string
}
func NewRawValue(v interface{}) (*Raw, error) {
switch t := v.(type) {
case string:
return &Raw{Value: t}, nil
case int, uint, int64, uint64, int32, uint32, int16, uint16:
return &Raw{Value: fmt.Sprintf("%d", t)}, nil
case fmt.Stringer:
return &Raw{Value: t.String()}, nil
}
return nil, fmt.Errorf("unexpected type: %T", v)
}
// Hash returns a unique identifier for the struct.
func (r *Raw) Hash() uint64 {
if r == nil {
return cache.NewHash(FragmentType_Raw, nil)
}
return cache.NewHash(FragmentType_Raw, r.Value)
}
// Compile returns the raw value.
func (r *Raw) Compile(*Template) (string, error) {
return r.Value, nil
}
// String returns the raw value.
func (r *Raw) String() string {
return r.Value
}
var _ = Fragment(&Raw{})