🎨 Shallow clone the corresponding database when the template contains database blocks https://github.com/siyuan-note/siyuan/issues/9494
This commit is contained in:
parent
d8bb02fb20
commit
7145460c18
2 changed files with 57 additions and 0 deletions
|
@ -46,6 +46,45 @@ type AttributeView struct {
|
|||
Views []*View `json:"views"` // 视图
|
||||
}
|
||||
|
||||
func CloneAttributeView(av *AttributeView) (ret *AttributeView) {
|
||||
ret = &AttributeView{}
|
||||
data, err := gulu.JSON.MarshalJSON(av)
|
||||
if nil != err {
|
||||
logging.LogErrorf("marshal attribute view [%s] failed: %s", av.ID, err)
|
||||
return nil
|
||||
}
|
||||
if err = gulu.JSON.UnmarshalJSON(data, ret); nil != err {
|
||||
logging.LogErrorf("unmarshal attribute view [%s] failed: %s", av.ID, err)
|
||||
return nil
|
||||
}
|
||||
|
||||
ret.ID = ast.NewNodeID()
|
||||
view, err := ret.GetView()
|
||||
if nil == err {
|
||||
view.ID = ast.NewNodeID()
|
||||
ret.ViewID = view.ID
|
||||
} else {
|
||||
view = NewView()
|
||||
ret.ViewID = view.ID
|
||||
ret.Views = append(ret.Views, view)
|
||||
}
|
||||
|
||||
keyIDMap := map[string]string{}
|
||||
for _, kv := range ret.KeyValues {
|
||||
newID := ast.NewNodeID()
|
||||
keyIDMap[kv.Key.ID] = newID
|
||||
kv.Key.ID = newID
|
||||
kv.Values = []*Value{}
|
||||
}
|
||||
|
||||
view.Table.ID = ast.NewNodeID()
|
||||
for _, column := range view.Table.Columns {
|
||||
column.ID = keyIDMap[column.ID]
|
||||
}
|
||||
view.Table.RowIDs = []string{}
|
||||
return
|
||||
}
|
||||
|
||||
// KeyValues 描述了属性视图属性列值的结构。
|
||||
type KeyValues struct {
|
||||
Key *Key `json:"key"` // 属性视图属性列
|
||||
|
|
|
@ -20,6 +20,7 @@ import (
|
|||
"bytes"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/siyuan-note/siyuan/kernel/av"
|
||||
"io/fs"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
@ -277,6 +278,23 @@ func renderTemplate(p, id string) (string, error) {
|
|||
n.TextMarkInlineMathContent = strings.ReplaceAll(n.TextMarkInlineMathContent, "|", "|")
|
||||
}
|
||||
}
|
||||
|
||||
if ast.NodeAttributeView == n.Type {
|
||||
// 重新生成数据库视图
|
||||
attrView, parseErr := av.ParseAttributeView(n.AttributeViewID)
|
||||
if nil != parseErr {
|
||||
logging.LogErrorf("parse attribute view [%s] failed: %s", n.AttributeViewID, parseErr)
|
||||
} else {
|
||||
cloned := av.CloneAttributeView(attrView)
|
||||
if nil != cloned {
|
||||
n.AttributeViewID = cloned.ID
|
||||
if saveErr := av.SaveAttributeView(cloned); nil != saveErr {
|
||||
logging.LogErrorf("save attribute view [%s] failed: %s", cloned.ID, saveErr)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ast.WalkContinue
|
||||
})
|
||||
for _, n := range nodesNeedAppendChild {
|
||||
|
|
Loading…
Add table
Reference in a new issue