d28f005552
Fix limit for databases other than sqlite go mod tidy && go mod vendor Remove unneeded break statements Make everything work with the new xorm version Fix xorm logging Fix lint Fix redis init Fix using id field Fix database init for testing Change default database log level Add xorm logger Use const for postgres go mod tidy Merge branch 'master' into update/xorm # Conflicts: # go.mod # go.sum # vendor/modules.txt go mod vendor Fix loading fixtures for postgres Go mod vendor1 Update xorm to version 1 Co-authored-by: kolaente <k@knt.li> Reviewed-on: https://kolaente.dev/vikunja/api/pulls/323
143 lines
3.7 KiB
Go
143 lines
3.7 KiB
Go
// Copyright 2017 The Xorm Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package xorm
|
|
|
|
import (
|
|
"reflect"
|
|
"strings"
|
|
"time"
|
|
|
|
"xorm.io/xorm/schemas"
|
|
)
|
|
|
|
func setColumnInt(bean interface{}, col *schemas.Column, t int64) {
|
|
v, err := col.ValueOf(bean)
|
|
if err != nil {
|
|
return
|
|
}
|
|
if v.CanSet() {
|
|
switch v.Type().Kind() {
|
|
case reflect.Int, reflect.Int64, reflect.Int32:
|
|
v.SetInt(t)
|
|
case reflect.Uint, reflect.Uint64, reflect.Uint32:
|
|
v.SetUint(uint64(t))
|
|
}
|
|
}
|
|
}
|
|
|
|
func setColumnTime(bean interface{}, col *schemas.Column, t time.Time) {
|
|
v, err := col.ValueOf(bean)
|
|
if err != nil {
|
|
return
|
|
}
|
|
if v.CanSet() {
|
|
switch v.Type().Kind() {
|
|
case reflect.Struct:
|
|
v.Set(reflect.ValueOf(t).Convert(v.Type()))
|
|
case reflect.Int, reflect.Int64, reflect.Int32:
|
|
v.SetInt(t.Unix())
|
|
case reflect.Uint, reflect.Uint64, reflect.Uint32:
|
|
v.SetUint(uint64(t.Unix()))
|
|
}
|
|
}
|
|
}
|
|
|
|
func getFlagForColumn(m map[string]bool, col *schemas.Column) (val bool, has bool) {
|
|
if len(m) == 0 {
|
|
return false, false
|
|
}
|
|
|
|
n := len(col.Name)
|
|
|
|
for mk := range m {
|
|
if len(mk) != n {
|
|
continue
|
|
}
|
|
if strings.EqualFold(mk, col.Name) {
|
|
return m[mk], true
|
|
}
|
|
}
|
|
|
|
return false, false
|
|
}
|
|
|
|
// Incr provides a query string like "count = count + 1"
|
|
func (session *Session) Incr(column string, arg ...interface{}) *Session {
|
|
session.statement.Incr(column, arg...)
|
|
return session
|
|
}
|
|
|
|
// Decr provides a query string like "count = count - 1"
|
|
func (session *Session) Decr(column string, arg ...interface{}) *Session {
|
|
session.statement.Decr(column, arg...)
|
|
return session
|
|
}
|
|
|
|
// SetExpr provides a query string like "column = {expression}"
|
|
func (session *Session) SetExpr(column string, expression interface{}) *Session {
|
|
session.statement.SetExpr(column, expression)
|
|
return session
|
|
}
|
|
|
|
// Select provides some columns to special
|
|
func (session *Session) Select(str string) *Session {
|
|
session.statement.Select(str)
|
|
return session
|
|
}
|
|
|
|
// Cols provides some columns to special
|
|
func (session *Session) Cols(columns ...string) *Session {
|
|
session.statement.Cols(columns...)
|
|
return session
|
|
}
|
|
|
|
// AllCols ask all columns
|
|
func (session *Session) AllCols() *Session {
|
|
session.statement.AllCols()
|
|
return session
|
|
}
|
|
|
|
// MustCols specify some columns must use even if they are empty
|
|
func (session *Session) MustCols(columns ...string) *Session {
|
|
session.statement.MustCols(columns...)
|
|
return session
|
|
}
|
|
|
|
// UseBool automatically retrieve condition according struct, but
|
|
// if struct has bool field, it will ignore them. So use UseBool
|
|
// to tell system to do not ignore them.
|
|
// If no parameters, it will use all the bool field of struct, or
|
|
// it will use parameters's columns
|
|
func (session *Session) UseBool(columns ...string) *Session {
|
|
session.statement.UseBool(columns...)
|
|
return session
|
|
}
|
|
|
|
// Distinct use for distinct columns. Caution: when you are using cache,
|
|
// distinct will not be cached because cache system need id,
|
|
// but distinct will not provide id
|
|
func (session *Session) Distinct(columns ...string) *Session {
|
|
session.statement.Distinct(columns...)
|
|
return session
|
|
}
|
|
|
|
// Omit Only not use the parameters as select or update columns
|
|
func (session *Session) Omit(columns ...string) *Session {
|
|
session.statement.Omit(columns...)
|
|
return session
|
|
}
|
|
|
|
// Nullable Set null when column is zero-value and nullable for update
|
|
func (session *Session) Nullable(columns ...string) *Session {
|
|
session.statement.Nullable(columns...)
|
|
return session
|
|
}
|
|
|
|
// NoAutoTime means do not automatically give created field and updated field
|
|
// the current time on the current session temporarily
|
|
func (session *Session) NoAutoTime() *Session {
|
|
session.statement.UseAutoTime = false
|
|
return session
|
|
}
|