47 lines
1.1 KiB
Go
47 lines
1.1 KiB
Go
package database
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/photoview/photoview/api/database/drivers"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// DateComponent a component of a date (day, month, year)
|
|
type DateComponent string
|
|
|
|
const (
|
|
DateCompYear DateComponent = "YEAR"
|
|
DateCompMonth DateComponent = "MONTH"
|
|
DateCompDay DateComponent = "DAY"
|
|
)
|
|
|
|
// DateExtract is a helper function that is used to generate the proper SQL syntax
|
|
// for extracting date components (day, month, year) for different database backends.
|
|
func DateExtract(db *gorm.DB, component DateComponent, attribute string) string {
|
|
|
|
var result string
|
|
|
|
switch drivers.GetDatabaseDriverType(db) {
|
|
case drivers.MYSQL, drivers.POSTGRES:
|
|
result = fmt.Sprintf("EXTRACT(%s FROM %s)", component, attribute)
|
|
case drivers.SQLITE:
|
|
var sqliteFormatted string
|
|
switch component {
|
|
case DateCompYear:
|
|
sqliteFormatted = "%Y"
|
|
case DateCompMonth:
|
|
sqliteFormatted = "%m"
|
|
case DateCompDay:
|
|
sqliteFormatted = "%d"
|
|
}
|
|
|
|
result = fmt.Sprintf("CAST(strftime('%s', %s) AS INTEGER)", sqliteFormatted, attribute)
|
|
default:
|
|
log.Panicf("unsupported database backend: %s", drivers.GetDatabaseDriverType(db))
|
|
}
|
|
|
|
return result
|
|
}
|