[
https://issues.apache.org/jira/browse/CAMEL-25074?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Claus Ibsen resolved CAMEL-25074.
---------------------------------
Resolution: Fixed
> camel-sql - say in the outputType description that a StreamList body is an
> Iterator with no size
> ------------------------------------------------------------------------------------------------
>
> Key: CAMEL-25074
> URL: https://issues.apache.org/jira/browse/CAMEL-25074
> Project: Camel
> Issue Type: Improvement
> Components: camel-sql
> Reporter: Claus Ibsen
> Assignee: Claus Ibsen
> Priority: Minor
> Fix For: 4.23.0
>
>
> {{outputType=StreamList}} makes the body a {{ResultSetIterator}}. The
> option's description says the result is streamed "using an Iterator" and that
> it "can be used with the Splitter EIP in streaming mode", which is accurate
> but leaves out what it costs: the body has no size, and it can be read only
> once.
> Anyone who then treats the body as a list gets an error that does not mention
> the option they chose:
> {noformat}
> org.apache.camel.component.bean.MethodNotFoundException: Method with name:
> size() not found on bean:
> org.apache.camel.component.sql.ResultSetIterator@1bdc4d7c
> {noformat}
> Measured while benchmarking how well a local model writes Camel routes. A
> step that selects the rows of a table, logs {{${body.size()}}} and splits the
> list was written 30 times across three 10-pass runs. The model chose
> {{outputType}} freely, and:
> * {{SelectList}} or no {{outputType}} -- worked;
> * {{StreamList}} -- failed *8 times out of 8*, always on {{${body.size()}}}.
> It reads "streams the result using an Iterator ... can be used with the
> Splitter", picks it, and then sizes the body anyway. The description is not
> wrong; it just stops one sentence short of the consequence.
> Adding that sentence to the option's description, so it reaches the catalog,
> the component page and every tool that reads them:
> {noformat}
> The body is then a ResultSetIterator and not a List: it has no size, and it
> can only be read once, so split it
> to work on the rows instead of calling size() or indexing it. Use SelectList
> when the whole result is wanted as
> a List of Map.
> {noformat}
> Same shape as CAMEL-25040: the catalog names an option but not what follows
> from choosing it, and that is the part an author needs.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)