Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
Vanessa 2024-04-10 18:35:56 +08:00
commit b0fecae66e
2 changed files with 40 additions and 7 deletions

View file

@ -248,7 +248,7 @@ func (value *Value) filter(other *Value, relativeDate, relativeDate2 *RelativeDa
direction := relativeDate.Direction
relativeTimeStart, relativeTimeEnd := calcRelativeTimeRegion(count, unit, direction)
_, relativeTimeEnd2 := calcRelativeTimeRegion(relativeDate2.Count, relativeDate2.Unit, relativeDate2.Direction)
return filterTime(value.Date.Content, value.Date.IsNotEmpty, relativeTimeStart, relativeTimeEnd, relativeTimeEnd2, operator)
return filterRelativeTime(value.Date.Content, value.Date.IsNotEmpty, relativeTimeStart, relativeTimeEnd, relativeTimeEnd2, operator)
} else { // 使用具体时间比较
if nil == other.Date {
return true
@ -257,7 +257,7 @@ func (value *Value) filter(other *Value, relativeDate, relativeDate2 *RelativeDa
otherTime := time.UnixMilli(other.Date.Content)
otherStart := time.Date(otherTime.Year(), otherTime.Month(), otherTime.Day(), 0, 0, 0, 0, otherTime.Location())
otherEnd := time.Date(otherTime.Year(), otherTime.Month(), otherTime.Day(), 23, 59, 59, 999999999, otherTime.Location())
return filterTime(value.Date.Content, value.Date.IsNotEmpty, otherStart, otherEnd, time.Now(), operator)
return filterTime(value.Date.Content, value.Date.IsNotEmpty, otherStart, otherEnd, operator)
}
}
case KeyTypeCreated:
@ -269,7 +269,7 @@ func (value *Value) filter(other *Value, relativeDate, relativeDate2 *RelativeDa
unit := relativeDate.Unit
direction := relativeDate.Direction
relativeTimeStart, relativeTimeEnd := calcRelativeTimeRegion(count, unit, direction)
return filterTime(value.Created.Content, true, relativeTimeStart, relativeTimeEnd, time.Now(), operator)
return filterRelativeTime(value.Created.Content, true, relativeTimeStart, relativeTimeEnd, time.Now(), operator)
} else { // 使用具体时间比较
if nil == other.Created {
return true
@ -278,7 +278,7 @@ func (value *Value) filter(other *Value, relativeDate, relativeDate2 *RelativeDa
otherTime := time.UnixMilli(other.Created.Content)
otherStart := time.Date(otherTime.Year(), otherTime.Month(), otherTime.Day(), 0, 0, 0, 0, otherTime.Location())
otherEnd := time.Date(otherTime.Year(), otherTime.Month(), otherTime.Day(), 23, 59, 59, 999999999, otherTime.Location())
return filterTime(value.Created.Content, value.Created.IsNotEmpty, otherStart, otherEnd, time.Now(), operator)
return filterTime(value.Created.Content, value.Created.IsNotEmpty, otherStart, otherEnd, operator)
}
}
case KeyTypeUpdated:
@ -290,7 +290,7 @@ func (value *Value) filter(other *Value, relativeDate, relativeDate2 *RelativeDa
unit := relativeDate.Unit
direction := relativeDate.Direction
relativeTimeStart, relativeTimeEnd := calcRelativeTimeRegion(count, unit, direction)
return filterTime(value.Updated.Content, true, relativeTimeStart, relativeTimeEnd, time.Now(), operator)
return filterRelativeTime(value.Updated.Content, true, relativeTimeStart, relativeTimeEnd, time.Now(), operator)
} else { // 使用具体时间比较
if nil == other.Updated {
return true
@ -299,7 +299,7 @@ func (value *Value) filter(other *Value, relativeDate, relativeDate2 *RelativeDa
otherTime := time.UnixMilli(other.Updated.Content)
otherStart := time.Date(otherTime.Year(), otherTime.Month(), otherTime.Day(), 0, 0, 0, 0, otherTime.Location())
otherEnd := time.Date(otherTime.Year(), otherTime.Month(), otherTime.Day(), 23, 59, 59, 999999999, otherTime.Location())
return filterTime(value.Updated.Content, value.Updated.IsNotEmpty, otherStart, otherEnd, time.Now(), operator)
return filterTime(value.Updated.Content, value.Updated.IsNotEmpty, otherStart, otherEnd, operator)
}
}
case KeyTypeSelect, KeyTypeMSelect:
@ -520,7 +520,7 @@ func (value *Value) filter(other *Value, relativeDate, relativeDate2 *RelativeDa
return false
}
func filterTime(valueMills int64, valueIsNotEmpty bool, otherValueStart, otherValueEnd, otherValueEnd2 time.Time, operator FilterOperator) bool {
func filterRelativeTime(valueMills int64, valueIsNotEmpty bool, otherValueStart, otherValueEnd, otherValueEnd2 time.Time, operator FilterOperator) bool {
valueTime := time.UnixMilli(valueMills)
switch operator {
case FilterOperatorIsEqual:
@ -545,6 +545,31 @@ func filterTime(valueMills int64, valueIsNotEmpty bool, otherValueStart, otherVa
return false
}
func filterTime(valueMills int64, valueIsNotEmpty bool, otherValueStart, otherValueEnd time.Time, operator FilterOperator) bool {
valueTime := time.UnixMilli(valueMills)
switch operator {
case FilterOperatorIsEqual:
return (valueTime.After(otherValueStart) || valueTime.Equal(otherValueStart)) && valueTime.Before(otherValueEnd)
case FilterOperatorIsNotEqual:
return valueTime.Before(otherValueStart) || valueTime.After(otherValueEnd)
case FilterOperatorIsGreater:
return valueTime.After(otherValueEnd) || valueTime.Equal(otherValueEnd)
case FilterOperatorIsGreaterOrEqual:
return valueTime.After(otherValueStart) || valueTime.Equal(otherValueStart)
case FilterOperatorIsLess:
return valueTime.Before(otherValueStart)
case FilterOperatorIsLessOrEqual:
return valueTime.Before(otherValueEnd) || valueTime.Equal(otherValueEnd)
case FilterOperatorIsBetween:
return (valueTime.After(otherValueStart) || valueTime.Equal(otherValueStart)) && (valueTime.Before(otherValueEnd) || valueTime.Equal(otherValueEnd))
case FilterOperatorIsEmpty:
return !valueIsNotEmpty
case FilterOperatorIsNotEmpty:
return valueIsNotEmpty
}
return false
}
// 根据 Count、Unit 和 Direction 计算相对当前时间的开始时间和结束时间
func calcRelativeTimeRegion(count int, unit RelativeDateUnit, direction RelativeDateDirection) (start, end time.Time) {
now := time.Now()

View file

@ -959,6 +959,10 @@ func deleteByBoxTx(tx *sql.Tx, box string) (err error) {
}
func deleteBlocksByIDs(tx *sql.Tx, ids []string) (err error) {
if 1 > len(ids) {
return
}
var ftsIDs []string
for _, id := range ids {
removeBlockCache(id)
@ -1136,6 +1140,10 @@ func deleteByRootID(tx *sql.Tx, rootID string, context map[string]interface{}) (
}
func batchDeleteByRootIDs(tx *sql.Tx, rootIDs []string, context map[string]interface{}) (err error) {
if 1 > len(rootIDs) {
return
}
ids := strings.Join(rootIDs, "','")
ids = "('" + ids + "')"
stmt := "DELETE FROM blocks WHERE root_id IN " + ids