apache / apache/hugegraph

[Bug] Wrong result for where(count().is(lt(0))) when counted traversal is empty

Open
#3,084 1 comment 0 reactions 0 assignees View on GitHub
bug gremlin
Dominant language
Java
Stars
3.2k
Forks
636
Avg merge
3d 11h
Merged PRs (30d)
14

Description

### Bug Type (问题类型)

gremlin (结果不合预期)

### Before submit

- [x] 我已经确认现有的 [Issues](https://github.com/apache/hugegraph/issues) 与 [FAQ](https://hugegraph.apache.org/docs/guides/faq/) 中没有相同 / 重复问题 (I have confirmed and searched that there are no similar problems in the historical issue and documents)

### Environment (环境信息)

- Server Version: 1.7.0
- gremlin: 3.5.1
- Docker Image: `hugegraph/hugegraph:latest`
- Backend: default Docker standalone backend
- Data Size: 1 vertex, 0 edges

### Expected & Actual behavior (期望与实际表现)

HugeGraph keeps a traverser for a `where()` child traversal whose `count()` is 0 and whose predicate is `lt(0)`.

Minimal graph:
(a:A {i: 1})

No R edges exist.

Bug-triggering query:
g.V('a').where(__.both('R').count().is(lt(0))).values('i')

Expected:
[]

Actual:
[1]

Since the counted traversal returns 0, the predicate lt(0) should be false.

### Vertex/Edge example (问题点 / 边数据举例)

```javascript
**Vertex/Edge example**

curl -fsS --compressed -X DELETE \
"http://127.0.0.1:8080/graphs/hugegraph/clear?confirm_message=I'm%20sure%20to%20delete%20all%20data"

curl -fsS --compressed -H 'Content-Type: application/json' -X POST \
-d '{"id":"a","label":"A","properties":{"i":1}}' \
"http://127.0.0.1:8080/graphs/hugegraph/graph/vertices"
```

### Schema [VertexLabel, EdgeLabel, IndexLabel] (元数据结构)

```javascript
**Schema**

curl -fsS --compressed -H 'Content-Type: application/json' -X POST \
-d '{"name":"i","data_type":"LONG","cardinality":"SINGLE"}' \
"http://127.0.0.1:8080/graphs/hugegraph/schema/propertykeys"

curl -fsS --compressed -H 'Content-Type: application/json' -X POST \
-d '{"name":"A","id_strategy":"CUSTOMIZE_STRING","properties":["i"],"nullable_keys":["i"],"enable_label_index":true}' \
"http://127.0.0.1:8080/graphs/hugegraph/schema/vertexlabels"

curl -fsS --compressed -H 'Content-Type: application/json' -X POST \
-d '{"name":"B","id_strategy":"CUSTOMIZE_STRING","properties":[],"nullable_keys":[],"enable_label_index":true}' \
"http://127.0.0.1:8080/graphs/hugegraph/schema/vertexlabels"

curl -fsS --compressed -H 'Content-Type: application/json' -X POST \
-d '{"name":"R","source_label":"B","target_label":"A","frequency":"SINGLE","properties":[],"nullable_keys":[],"enable_label_index":true}' \
"http://127.0.0.1:8080/graphs/hugegraph/schema/edgelabels"
```

Contributor guide

Open the contributing guide

Research direction

Start by reproducing the minimal graph and query `g.V('a').where(__.both('R').count().is(lt(0))).values('i')` against the stated HugeGraph 1.7.0 environment. Trace the `where()` child traversal behavior for an empty `both('R')` result and add coverage for this case; done means the query returns `[]` rather than `[1]].

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
backend, databases
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.