2017-10-17 9 views
0

これは重大なバグであり、OrientDBがさまざまなDML操作中にグラフデータの整合性をどのように管理するかに疑問を投げかけています。BUG:insert edgeを挿入すると無効なTO参照が作成される

Edgeには複数のTOがありますか?

以下は、「insert into select」を使用して頂点をコピーする単純な操作の概要を示しています。

初期状態

{ 
"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)"} 

答えて

0

はい、INSERT/SELECTは、頂点ではなくドキュメントをコピーするように設計されているため、エッジポインタもコピーされます。また

はあなたがここでの問題を開いてもらえ縁がコピー

0

ありがとうルイージ!

この問題は、データベースから期待されているものの中核であるデータの整合性が得られるため、この問題がスタックの先頭に届くことを願っています。

問題は、ここで開かれている - >https://github.com/orientechnologies/orientdb/issues/7826

+0

素晴らしい、おかげで、私たちはできるだけ早く –

+0

クイック更新、それに対処します、問題が修正されました、それは2.2.30でリリースされます –

関連する問題