From 8b71a91a0c9f08086a4a4edc7bf3c6dca3dc209d Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Thu, 7 Mar 2024 09:37:49 +0800 Subject: [PATCH 1/5] :bug: Fix db tv date sort https://ld246.com/article/1709727211377 --- kernel/av/av.go | 22 ++++++++++++++++------ kernel/model/attribute_view.go | 31 ++++++++++++++++++++----------- 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/kernel/av/av.go b/kernel/av/av.go index f96199b01..b1e88263c 100644 --- a/kernel/av/av.go +++ b/kernel/av/av.go @@ -290,6 +290,13 @@ func SaveAttributeView(av *AttributeView) (err error) { v.KeyID = kv.Key.ID } + // 校验日期 IsNotEmpty + if KeyTypeDate == kv.Key.Type { + if 0 != v.Date.Content && !v.Date.IsNotEmpty { + v.Date.IsNotEmpty = true + } + } + for _, view := range av.Views { switch view.LayoutType { case LayoutTypeTable: @@ -307,12 +314,15 @@ func SaveAttributeView(av *AttributeView) (err error) { if "" == v.ID { v.ID = ast.NewNodeID() } - createdStr := v.ID[:len("20060102150405")] - created, parseErr := time.ParseInLocation("20060102150405", createdStr, time.Local) - if nil == parseErr { - v.CreatedAt = created.UnixMilli() - } else { - v.CreatedAt = now + + if 0 == v.CreatedAt { + createdStr := v.ID[:len("20060102150405")] + created, parseErr := time.ParseInLocation("20060102150405", createdStr, time.Local) + if nil == parseErr { + v.CreatedAt = created.UnixMilli() + } else { + v.CreatedAt = now + } } if 0 == v.UpdatedAt { diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index d35401355..89f26367a 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -675,18 +675,27 @@ func renderAttributeView(attrView *av.AttributeView, viewID string, page, pageSi } } - // 补全值的创建时间和更新时间 for _, v := range kv.Values { + // 校验日期 IsNotEmpty + if av.KeyTypeDate == kv.Key.Type { + if 0 != v.Date.Content && !v.Date.IsNotEmpty { + v.Date.IsNotEmpty = true + } + } + + // 补全值的创建时间和更新时间 if "" == v.ID { v.ID = ast.NewNodeID() } - createdStr := v.ID[:len("20060102150405")] - created, parseErr := time.ParseInLocation("20060102150405", createdStr, time.Local) - if nil == parseErr { - v.CreatedAt = created.UnixMilli() - } else { - v.CreatedAt = currentTimeMillis + if 0 == v.CreatedAt { + createdStr := v.ID[:len("20060102150405")] + created, parseErr := time.ParseInLocation("20060102150405", createdStr, time.Local) + if nil == parseErr { + v.CreatedAt = created.UnixMilli() + } else { + v.CreatedAt = currentTimeMillis + } } if 0 == v.UpdatedAt { @@ -1904,11 +1913,11 @@ func addAttributeViewBlock(avID, blockID, previousBlockID, addingBlockID string, sameKeyFilterSort := false // 是否在同一个字段上同时存在过滤和排序 if 0 < len(viewable.Sorts) { filterKeys, sortKeys := map[string]bool{}, map[string]bool{} - for _, filter := range view.Table.Filters { - filterKeys[filter.Column] = true + for _, f := range view.Table.Filters { + filterKeys[f.Column] = true } - for _, sort := range view.Table.Sorts { - sortKeys[sort.Column] = true + for _, s := range view.Table.Sorts { + sortKeys[s.Column] = true } for key := range filterKeys { From 0d32479a5d9966d6ec8ceab19691d925538787a0 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Thu, 7 Mar 2024 09:45:27 +0800 Subject: [PATCH 2/5] :bug: Database filtering for specific dates not working Fix https://github.com/siyuan-note/siyuan/issues/10518 --- kernel/model/attribute_view.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index 89f26367a..f29ff860e 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -2689,6 +2689,7 @@ func UpdateAttributeViewCell(tx *Transaction, avID, keyID, rowID, cellID string, } } + now := time.Now().UnixMilli() var val *av.Value oldIsDetached := true if nil != blockVal { @@ -2708,7 +2709,7 @@ func UpdateAttributeViewCell(tx *Transaction, avID, keyID, rowID, cellID string, } if nil == val { - val = &av.Value{ID: cellID, KeyID: keyValues.Key.ID, BlockID: rowID, Type: keyValues.Key.Type} + val = &av.Value{ID: cellID, KeyID: keyValues.Key.ID, BlockID: rowID, Type: keyValues.Key.Type, CreatedAt: now, UpdatedAt: now} keyValues.Values = append(keyValues.Values, val) } break @@ -2786,7 +2787,6 @@ func UpdateAttributeViewCell(tx *Transaction, avID, keyID, rowID, cellID string, } } - now := time.Now().UnixMilli() if nil != blockVal { blockVal.Block.Updated = now blockVal.UpdatedAt = now From 4df344559960bcaf1b982beec66f94a873b2fcf6 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Thu, 7 Mar 2024 09:49:36 +0800 Subject: [PATCH 3/5] :bug: Database filtering for specific dates not working Fix https://github.com/siyuan-note/siyuan/issues/10518 --- kernel/model/attribute_view.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index f29ff860e..1bd890617 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -2795,6 +2795,9 @@ func UpdateAttributeViewCell(tx *Transaction, avID, keyID, rowID, cellID string, } } val.UpdatedAt = now + if val.CreatedAt == val.UpdatedAt { + val.UpdatedAt += 1000 // 防止更新时间和创建时间一样 + } key, _ := attrView.GetKey(val.KeyID) if nil != key && av.KeyTypeRelation == key.Type && nil != key.Relation { From 8827a5d523cf5e867c6bd59368f7bf15b8fb9a97 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Thu, 7 Mar 2024 09:51:27 +0800 Subject: [PATCH 4/5] :bug: Database filtering for specific dates not working Fix https://github.com/siyuan-note/siyuan/issues/10518 --- kernel/model/attribute_view.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index 1bd890617..e8589f9c6 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -2790,6 +2790,9 @@ func UpdateAttributeViewCell(tx *Transaction, avID, keyID, rowID, cellID string, if nil != blockVal { blockVal.Block.Updated = now blockVal.UpdatedAt = now + if val.CreatedAt == val.UpdatedAt { + val.UpdatedAt += 1000 // 防止更新时间和创建时间一样 + } if isUpdatingBlockKey { blockVal.IsDetached = val.IsDetached } From b53a224f9cc8ff445243d435ab78195826ed064b Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Thu, 7 Mar 2024 10:05:55 +0800 Subject: [PATCH 5/5] :art: Improve av --- kernel/av/av.go | 9 ++++++++- kernel/model/attribute_view.go | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/kernel/av/av.go b/kernel/av/av.go index b1e88263c..a695a9736 100644 --- a/kernel/av/av.go +++ b/kernel/av/av.go @@ -292,11 +292,18 @@ func SaveAttributeView(av *AttributeView) (err error) { // 校验日期 IsNotEmpty if KeyTypeDate == kv.Key.Type { - if 0 != v.Date.Content && !v.Date.IsNotEmpty { + if nil != v.Date && 0 != v.Date.Content && !v.Date.IsNotEmpty { v.Date.IsNotEmpty = true } } + // 校验数字 IsNotEmpty + if KeyTypeNumber == kv.Key.Type { + if nil != v.Number && 0 != v.Number.Content && !v.Number.IsNotEmpty { + v.Number.IsNotEmpty = true + } + } + for _, view := range av.Views { switch view.LayoutType { case LayoutTypeTable: diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index e8589f9c6..36f99d506 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -678,11 +678,18 @@ func renderAttributeView(attrView *av.AttributeView, viewID string, page, pageSi for _, v := range kv.Values { // 校验日期 IsNotEmpty if av.KeyTypeDate == kv.Key.Type { - if 0 != v.Date.Content && !v.Date.IsNotEmpty { + if nil != v.Date && 0 != v.Date.Content && !v.Date.IsNotEmpty { v.Date.IsNotEmpty = true } } + // 校验数字 IsNotEmpty + if av.KeyTypeNumber == kv.Key.Type { + if nil != v.Number && 0 != v.Number.Content && !v.Number.IsNotEmpty { + v.Number.IsNotEmpty = true + } + } + // 补全值的创建时间和更新时间 if "" == v.ID { v.ID = ast.NewNodeID()