OrientDB Studio で SQL クエリの奇妙な動作を見つけました (REST プロトコルでも繰り返されます)。
サーバーのバージョンは 2.2.5 です
私のクラスのデータ:
select * from name
結果:
{
"result": [
{
"@type": "d",
"@rid": "#25:0",
"@version": 1,
"@class": "name",
"surname": "foo surname",
"name": "foo name"
},
{
"@type": "d",
"@rid": "#26:0",
"@version": 1,
"@class": "name",
"surname": "bar surname",
"name": "bar name"
},
{
"@type": "d",
"@rid": "#27:0",
"@version": 1,
"@class": "name",
"surname": "O'brien",
"name": "baz"
}
],
"notification": "Query executed in 0.069 sec. Returned 3 record(s)"
}
プロパティの姓と名前はテキスト フィールドです。
Studio でいくつかの SQL クエリを作成します。
select * from name WHERE surname='O\'brien'
結果:
{
"result": [
{
"@type": "d",
"@rid": "#27:0",
"@version": 1,
"@class": "name",
"surname": "O'brien",
"name": "baz"
}
],
"notification": "Query executed in 0.016 sec. Returned 1 record(s)"
}
うまくいきます。
次:
select * from name WHERE NOT (surname='O\'brien')
結果:
{
"result": [
{
"@type": "d",
"@rid": "#25:0",
"@version": 1,
"@class": "name",
"surname": "foo surname",
"name": "foo name"
},
{
"@type": "d",
"@rid": "#26:0",
"@version": 1,
"@class": "name",
"surname": "bar surname",
"name": "bar name"
},
{
"@type": "d",
"@rid": "#27:0",
"@version": 1,
"@class": "name",
"surname": "O'brien",
"name": "baz"
}
],
"notification": "Query executed in 0.015 sec. Returned 3 record(s)"
}
この場合、予期しない 3 番目の結果が得られました。
次:
select * from name WHERE (NOT (surname='bar surname'))
結果:
{
"result": [
{
"@type": "d",
"@rid": "#25:0",
"@version": 1,
"@class": "name",
"surname": "foo surname",
"name": "foo name"
},
{
"@type": "d",
"@rid": "#27:0",
"@version": 1,
"@class": "name",
"surname": "O'brien",
"name": "baz"
}
],
"notification": "Query executed in 0.017 sec. Returned 2 record(s)"
}
良さそう。
次:
select * from name WHERE (NOT (surname='O\'brien'))
結果:
java.lang.NullPointerException
次:
select * from name WHERE (surname='O\'brien')
結果:
Empty result
私の質問 - それはバグですか、それとも何か間違っていますか?
これらのクエリはクエリ ビルダーの一部であるため、OrientDB の括弧内でどのように機能するかを理解する必要があります。
ありがとう。