Ken Hu created TINKERPOP-3156:
---------------------------------
Summary: Check consistency of partial result handling in GLVs
Key: TINKERPOP-3156
URL: https://issues.apache.org/jira/browse/TINKERPOP-3156
Project: TinkerPop
Issue Type: Improvement
Components: dotnet, driver, go, javascript, python
Affects Versions: 3.8.0
Reporter: Ken Hu
Check behavior of GLVs when handling partial results for both the Client and
Traversal APIs. It isn't entirely clear if GLVs should allow the user to
retrieve results that were received before the error or if errors will discard
the results.
Let's say there are five results that were received and then an error before
the user requests for the data. Should _HasNext()_ return true for the first
five results without error or should it throw an exception (or equivalent
depending on language) right away. What should _One()_ or _ToList()_ in
ResultSet do?
An example of this is the Go driver's behavior. Let's take the following test
(if it were in resultSet_test.go) as an example
{code:java}
t.Run("Test ResultSet reads partial results with error.", func(t
*testing.T) {
channelResultSet := newChannelResultSet(mockID, getSyncMap())
AddResults(channelResultSet, 5)
channelResultSet.setError(fmt.Errorf("injected %s error", "ResultSet"))
assert.False(t, channelResultSet.IsEmpty())
one, _, _ := channelResultSet.One()
assert.NotNil(t, one)
}) {code}
The assert.NotNil(t, one) portion fails even though the ResultSet has results.
The same would be true for Traversal.Next(). Ideally, the API should give the
user the option to either handle the error immediately (thus discarding the
results) or read the results first and then handle the error. The other thing
to consider is that it should be very clear to a user whether a query was
successful (all results), partially successful (some results but ended with
error), or failed (no results with error).
--
This message was sent by Atlassian Jira
(v8.20.10#820010)