52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
// Query building functions for expressions components
|
|
package jet
|
|
|
|
import (
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
type intervalExpression struct {
|
|
expressionInterfaceImpl
|
|
duration time.Duration
|
|
}
|
|
|
|
const intervalSep = ":"
|
|
|
|
func (c *intervalExpression) serialize(statement statementType, out *queryData, options ...serializeOption) error {
|
|
out.writeString("INTERVAL '")
|
|
|
|
duration := c.duration
|
|
|
|
if duration < 0 {
|
|
duration = -duration
|
|
out.writeString("-")
|
|
}
|
|
|
|
hours := duration / time.Hour
|
|
minutes := (duration % time.Hour) / time.Minute
|
|
sec := (duration % time.Minute) / time.Second
|
|
msec := (duration % time.Second) / time.Microsecond
|
|
|
|
out.writeString(strconv.FormatInt(int64(hours), 10))
|
|
out.writeString(intervalSep)
|
|
out.writeString(strconv.FormatInt(int64(minutes), 10))
|
|
out.writeString(intervalSep)
|
|
out.writeString(strconv.FormatInt(int64(sec), 10))
|
|
out.writeString(intervalSep)
|
|
out.writeString(strconv.FormatInt(int64(msec), 10))
|
|
out.writeString("' HOUR_MICROSECOND")
|
|
|
|
return nil
|
|
}
|
|
|
|
//// Interval returns a representation of duration
|
|
//func Interval(duration time.Duration) expressions {
|
|
// intervalExp := &intervalExpression{
|
|
// duration: duration,
|
|
// }
|
|
//
|
|
// intervalExp.expressionInterfaceImpl.parent = intervalExp
|
|
//
|
|
// return intervalExp
|
|
//}
|