2016-10-06 33 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