如何在房间数据库中使用递归 CTE 构建闭包表

问题描述

下面的类是从 API 调用返回的结构,减去主键、父 ID 和深度。我的目标是使用递归 CTE 在 Room DB 中构建一个闭包表。

homePageId

当返回的 POJO 从 observable 发出时,我尝试遍历树。问题是对于一些 categoryId==parentId 的传递闭包,深度不正确。

const Notion = require("notion-api-js").default;
const token_v2 = "543f8f8529f361ab34596f5be9bc972b96ab8d8dc9e6e41546c05751b51a18a6c7d40b689d80794babae3a91aeb5dd5e47c34edb724cc356ceceacf3a8061158bfab92e68b7614516a0699295990"
const notion = new Notion({
  token: token_v2,});

const fetchPage = (id) => {
  return notion.getPagesByIndexId(id);
};

const homePageId = "3be663ea-90ce-4c45-b04e-41161b992dda" 
var crawledIdsList = [];
buildTree(tree={},homePageId).then(tree => {console.log(tree)}) 
function buildTree(tree,id) {
  return fetchPage(id).then((pages) => {
    tree.subpages = [];
    tree.slug = pages[0].Attributes.slug;
    tree.id = id;
    crawledIdsList.push(id);
    return Promise.all(
      pages.flatMap((page) => {
        var currentCrawlId = page.Attributes.id;
        if (crawledIdsList.indexOf(currentCrawlId) === -1) {
          // executes code block if currentCrawlId is not used in fetchPage(id) yet
          crawledIdsList.push(currentCrawlId);
          return buildTree({},currentCrawlId).then((futureData) => {
            tree.subpages.push(futureData);
            return tree;
          });
        } else {
          if (crawledIdsList.indexOf(id) >= 0) {
            return [];
          }
          return tree; // end case. futureData passed to earlier calls is tree,which looks like {subpages: [],slug: someSlug,id: someId}
        }
      })
    )
  });
}

那么...如何使用递归 CTE 在 Room DB 中构建闭包表?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)