2016-10-06 29 views
0

我在OrientDB Studio中發現了SQL查詢的奇怪行爲(也在REST協議中重複)。SQL查詢中的Orientdb引用

我的服務器版本是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)" 

}

在這種情況下我獲得意想不到的第三結果。

下一頁:

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括號中起作用。

感謝。

+0

你可以嘗試在最新的版本?如果它仍然存在,你可以在github上打開一個問題。 –

+0

是的,我轉載它在2.2.12-SNAPSHOT,在github問題 - https://github.com/orientechnologies/orientdb/issues/6786 – Montekidlo

回答

0

ODB ver2.2.12

使用不同類型的報價。

我的數據:

select from V

{ 
    "result": [ 
     { 
      "@type": "d", 
      "@rid": "#9:0", 
      "@version": 1, 
      "@class": "V", 
      "name": "O'Brian" 
     }, 
     { 
      "@type": "d", 
      "@rid": "#10:0", 
      "@version": 1, 
      "@class": "V", 
      "name": "Pippo" 
     } 
    ], 
    "notification": "Query executed in 0.013 sec. Returned 2 record(s)" 
} 

select from V where NOT (name = "O'Brian")

{ 
    "result": [ 
     { 
      "@type": "d", 
      "@rid": "#10:0", 
      "@version": 1, 
      "@class": "V", 
      "name": "Pippo" 
     } 
    ], 
    "notification": "Query executed in 0.023 sec. Returned 1 record(s)" 
} 
+0

是的,它的工作原理,但如果我想在查詢中使用雙引號,它仍然不起作用: – Montekidlo

+0

select * from foo where NOT(name =「Bar \」Baz「) – Montekidlo