gorm/clause/function.go
2022-10-17 12:19:47 -03:00

49 lines
996 B
Go

package clause
import (
"fmt"
"log"
)
type Database string
var (
Postgres Database = "postgres"
Sqlite Database = "sqlite"
Mysql Database = "mysql"
SqlServer Database = "sqlserver"
)
type Function interface {
GetSql() string
}
type FuncDateWithoutTime struct {
Database Database
Field string
Alias string
SQL string
}
func (fnc FuncDateWithoutTime) GetSql() string {
alias := fnc.Alias
if fnc.Alias == "" {
alias = fnc.Field
}
switch fnc.Database {
case Postgres:
fnc.SQL = fmt.Sprintf(" to_char(%s, %s) as %s", fnc.Field, "'YYYY-MM-DD'", alias)
case Sqlite:
fnc.SQL = fmt.Sprintf(" strftime(%s, %s) as %s", "'%Y-%m-%d' ", fnc.Field, alias)
case Mysql:
fnc.SQL = fmt.Sprintf(" DATE_FORMAT(%s, %s) as %s", fnc.Field, "'%Y-%m-%d' ", alias)
case SqlServer:
fnc.SQL = fmt.Sprintf(" FORMAT(%s, %s) as %s", fnc.Field, "'yyyy-MM-dd' ", alias)
default:
log.Print("database not implemented yet for this function")
return ""
}
return fnc.SQL
}