瀏覽代碼

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

Vanessa 1 年之前
父節點
當前提交
b0fecae66e
共有 2 個文件被更改,包括 40 次插入7 次删除
  1. 32 7
      kernel/av/filter.go
  2. 8 0
      kernel/sql/database.go

+ 32 - 7
kernel/av/filter.go

@@ -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()

+ 8 - 0
kernel/sql/database.go

@@ -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