错误:插入选择边缘会创建无效的 TO 引用



我怀疑这是一个严重的错误,并且对OrientDB如何在各种DML操作期间管理图形数据的完整性提出了怀疑。

一个 Edge 如何具有多个 TO?

下面概述了使用"插入到选择"来复制顶点的简单操作。

初始状态

{
"result": [
    {
        "@type": "d",
        "@rid": "#-2:1",
        "@version": 0,
        "rid": "#133:46",
        "version": 1,
        "class": "RuleSet",
        "out_HasRule": [
            "#80:32"
        ],
        "@fieldTypes": "rid=x,out_HasRule=g"
    },
    {
        "@type": "d",
        "@rid": "#-2:2",
        "@version": 0,
        "rid": "#130:39",
        "version": 1,
        "class": "Rule",
        "in_HasRule": [
            "#80:32"
        ],
        "@fieldTypes": "rid=x,in_HasRule=g"
    }
],
"notification": "Query executed  in 0.213 sec. Returned 2 record(s)" }

如果我执行以下操作,则会创建错误的边缘数据。请注意,#80:32 是多个顶点的 IN

insert into Rule from select * from #130:39;

{
"result": [
    {
        "@type": "d",
        "@rid": "#-2:1",
        "@version": 0,
        "rid": "#133:46",
        "version": 1,
        "class": "RuleSet",
        "out_HasRule": [
            "#80:32"
        ],
        "@fieldTypes": "rid=x,out_HasRule=g"
    },
    {
        "@type": "d",
        "@rid": "#-2:2",
        "@version": 0,
        "rid": "#131:38",
        "version": 1,
        "class": "Rule",
        "in_HasRule": [
            "#80:32"
        ],
        "@fieldTypes": "rid=x,in_HasRule=g"
    },
    {
        "@type": "d",
        "@rid": "#-2:3",
        "@version": 0,
        "rid": "#130:39",
        "version": 1,
        "class": "Rule",
        "in_HasRule": [
            "#80:32"
        ],
        "@fieldTypes": "rid=x,in_HasRule=g"
    }
],
"notification": "Query executed  in 0.151 sec. Returned 3 record(s)"}

是的,INSERT/SELECT 旨在复制文档,而不是顶点,因此它也复制边缘指针。

我认为值得通过以下两种方式之一修复它:

  • 删除边缘链接
  • 同时复制边缘

你能在这里打开一个问题吗:https://github.com/orientechnologies/orientdb/issues讨论会更容易讨论

谢谢路易吉!

这个问题

是我们期望从任何数据库获得的核心,即数据完整性,所以我希望这个问题能成为堆栈的顶部。

问题已在此处打开 -> https://github.com/orientechnologies/orientdb/issues/7826

相关内容

最新更新