Explorar o código

:bug: Primary key value unexpectedly updated when database adds row https://github.com/siyuan-note/siyuan/issues/11018

Daniel hai 1 ano
pai
achega
bc8b295733
Modificáronse 2 ficheiros con 7 adicións e 7 borrados
  1. 6 0
      kernel/av/av.go
  2. 1 7
      kernel/model/attribute_view.go

+ 6 - 0
kernel/av/av.go

@@ -340,6 +340,7 @@ func SaveAttributeView(av *AttributeView) (err error) {
 			// 补全 block 的创建时间和更新时间
 			for _, v := range kv.Values {
 				if 0 == v.Block.Created {
+					logging.LogWarnf("block [%s] created time is empty", v.BlockID)
 					if "" == v.Block.ID {
 						v.Block.ID = v.BlockID
 						if "" == v.Block.ID {
@@ -357,6 +358,7 @@ func SaveAttributeView(av *AttributeView) (err error) {
 					}
 				}
 				if 0 == v.Block.Updated {
+					logging.LogWarnf("block [%s] updated time is empty", v.BlockID)
 					v.Block.Updated = v.Block.Created
 				}
 			}
@@ -375,6 +377,7 @@ func SaveAttributeView(av *AttributeView) (err error) {
 					val.KeyID = kv.Key.ID
 				}
 				if "" == v.KeyID {
+					logging.LogWarnf("value [%s] key id is empty", v.ID)
 					v.KeyID = kv.Key.ID
 				}
 
@@ -417,10 +420,12 @@ func SaveAttributeView(av *AttributeView) (err error) {
 
 			// 补全值的创建时间和更新时间
 			if "" == v.ID {
+				logging.LogWarnf("value id is empty")
 				v.ID = ast.NewNodeID()
 			}
 
 			if 0 == v.CreatedAt {
+				logging.LogWarnf("value [%s] created time is empty", v.ID)
 				createdStr := v.ID[:len("20060102150405")]
 				created, parseErr := time.ParseInLocation("20060102150405", createdStr, time.Local)
 				if nil == parseErr {
@@ -431,6 +436,7 @@ func SaveAttributeView(av *AttributeView) (err error) {
 			}
 
 			if 0 == v.UpdatedAt {
+				logging.LogWarnf("value [%s] updated time is empty", v.ID)
 				v.UpdatedAt = v.CreatedAt
 			}
 		}

+ 1 - 7
kernel/model/attribute_view.go

@@ -2971,7 +2971,7 @@ func UpdateAttributeViewCell(tx *Transaction, avID, keyID, rowID, cellID string,
 		}
 
 		for _, value := range keyValues.Values {
-			if cellID == value.ID {
+			if cellID == value.ID || rowID == value.BlockID {
 				val = value
 				val.Type = keyValues.Key.Type
 				break
@@ -3003,12 +3003,6 @@ func UpdateAttributeViewCell(tx *Transaction, avID, keyID, rowID, cellID string,
 		return
 	}
 
-	if "" == val.ID {
-		// 有时前端会误调用该接口(比如创建完快速切换),这里判断一下,避免误更新刚刚创建的值
-		// Primary key value unexpectedly updated when database adds row https://github.com/siyuan-note/siyuan/issues/11018
-		return
-	}
-
 	if av.KeyTypeNumber == val.Type {
 		if nil != val.Number && !val.Number.IsNotEmpty {
 			val.Number.Content = 0