From 7b127694330ce669c1487f64dffcc1681b356b89 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Fri, 13 Sep 2024 21:59:54 +0800 Subject: [PATCH] :art: Improve database relation and rollup field exporting https://github.com/siyuan-note/siyuan/issues/12003 --- kernel/model/export.go | 78 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 72 insertions(+), 6 deletions(-) diff --git a/kernel/model/export.go b/kernel/model/export.go index 47e53b532..02c379b25 100644 --- a/kernel/model/export.go +++ b/kernel/model/export.go @@ -2379,8 +2379,17 @@ func exportTree(tree *parse.Tree, wysiwyg, keepFold, avHiddenCol bool, val = strings.ReplaceAll(val, "|", "\\|") } - val = strings.ReplaceAll(val, "\n", " ") - mdTableCell.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(val)}) + col := table.GetColumn(cell.Value.KeyID) + if nil != col && col.Wrap { + lines := strings.Split(val, "\n") + for _, line := range lines { + mdTableCell.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(line)}) + mdTableCell.AppendChild(&ast.Node{Type: ast.NodeHardBreak}) + } + } else { + val = strings.ReplaceAll(val, "\n", " ") + mdTableCell.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(val)}) + } } if i < len(cell.Value.Relation.Contents)-1 { mdTableCell.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(", ")}) @@ -2402,8 +2411,17 @@ func exportTree(tree *parse.Tree, wysiwyg, keepFold, avHiddenCol bool, val = strings.ReplaceAll(val, "|", "\\|") } - val = strings.ReplaceAll(val, "\n", " ") - mdTableCell.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(val)}) + col := table.GetColumn(cell.Value.KeyID) + if nil != col && col.Wrap { + lines := strings.Split(val, "\n") + for _, line := range lines { + mdTableCell.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(line)}) + mdTableCell.AppendChild(&ast.Node{Type: ast.NodeHardBreak}) + } + } else { + val = strings.ReplaceAll(val, "\n", " ") + mdTableCell.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(val)}) + } } } else if av.KeyTypeText == v.Type { val = v.Text.Content @@ -2413,8 +2431,17 @@ func exportTree(tree *parse.Tree, wysiwyg, keepFold, avHiddenCol bool, val = strings.ReplaceAll(val, "|", "\\|") } - val = strings.ReplaceAll(val, "\n", " ") - mdTableCell.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(val)}) + col := table.GetColumn(cell.Value.KeyID) + if nil != col && col.Wrap { + lines := strings.Split(val, "\n") + for _, line := range lines { + mdTableCell.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(line)}) + mdTableCell.AppendChild(&ast.Node{Type: ast.NodeHardBreak}) + } + } else { + val = strings.ReplaceAll(val, "\n", " ") + mdTableCell.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(val)}) + } } else { mdTableCell.AppendChild(&ast.Node{Type: ast.NodeText, Tokens: []byte(v.String(true))}) } @@ -2924,3 +2951,42 @@ func getExportBlockRefLinkText(blockRef *ast.Node, blockRefTextLeft, blockRefTex linkText = blockRefTextLeft + linkText + blockRefTextRight return } + +func getDestViewVal(attrView *av.AttributeView, keyID, blockID string) *av.TableColumn { + rollupKey, _ := attrView.GetKey(keyID) + if nil == rollupKey || nil == rollupKey.Rollup { + return nil + } + + relKey, _ := attrView.GetKey(rollupKey.Rollup.RelationKeyID) + if nil == relKey || nil == relKey.Relation { + return nil + } + + relVal := attrView.GetValue(relKey.ID, blockID) + if nil == relVal || nil == relVal.Relation { + return nil + } + + destAv, _ := av.ParseAttributeView(relKey.Relation.AvID) + if nil == destAv { + return nil + } + + destKey, _ := destAv.GetKey(rollupKey.Rollup.KeyID) + if nil == destKey { + return nil + } + + destView, _ := destAv.GetCurrentView(destAv.ViewID) + if nil == destView { + return nil + } + + destTable := sql.RenderAttributeViewTable(destAv, destView, "", GetBlockAttrsWithoutWaitWriting) + if nil == destTable { + return nil + } + + return destTable.GetColumn(rollupKey.Rollup.KeyID) +}