42 lines
897 B
Go
42 lines
897 B
Go
|
package exql
|
||
|
|
||
|
import (
|
||
|
"git.hexq.cn/tiglog/mydb/internal/cache"
|
||
|
)
|
||
|
|
||
|
// Returning represents a RETURNING clause.
|
||
|
type Returning struct {
|
||
|
*Columns
|
||
|
}
|
||
|
|
||
|
// Hash returns a unique identifier for the struct.
|
||
|
func (r *Returning) Hash() uint64 {
|
||
|
if r == nil {
|
||
|
return cache.NewHash(FragmentType_Returning, nil)
|
||
|
}
|
||
|
return cache.NewHash(FragmentType_Returning, r.Columns)
|
||
|
}
|
||
|
|
||
|
var _ = Fragment(&Returning{})
|
||
|
|
||
|
// ReturningColumns creates and returns an array of Column.
|
||
|
func ReturningColumns(columns ...Fragment) *Returning {
|
||
|
return &Returning{Columns: &Columns{Columns: columns}}
|
||
|
}
|
||
|
|
||
|
// Compile transforms the clause into its equivalent SQL representation.
|
||
|
func (r *Returning) Compile(layout *Template) (compiled string, err error) {
|
||
|
if z, ok := layout.Read(r); ok {
|
||
|
return z, nil
|
||
|
}
|
||
|
|
||
|
compiled, err = r.Columns.Compile(layout)
|
||
|
if err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
|
||
|
layout.Write(r, compiled)
|
||
|
|
||
|
return
|
||
|
}
|