[
https://issues.apache.org/jira/browse/CAMEL-25039?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18119608#comment-18119608
]
Claus Ibsen commented on CAMEL-25039:
-------------------------------------
Sibling: CAMEL-25040 (the catalog documentation does not carry the syntax
either).
> camel-sql - say when a query uses a named parameter without the # placeholder
> instead of passing it to the database
> -------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-25039
> URL: https://issues.apache.org/jira/browse/CAMEL-25039
> Project: Camel
> Issue Type: Improvement
> Components: camel-sql
> Reporter: Claus Ibsen
> Priority: Major
>
> The sql component takes named parameters as {{:#name}} or {{:#${simple}}}. A
> query that uses any other shape is passed through to the database untouched,
> and the database's complaint names neither Camel nor the right syntax.
> {{DefaultSqlPrepareStatementStrategy.prepareQuery}} asks
> {{hasNamedParameters(query)}} and, when the answer is no, returns the query
> unchanged:
> {code:java}
> if (allowNamedParameters && hasNamedParameters(query)) {
> ...
> answer = replaceParams(query);
> } else {
> answer = query;
> }
> {code}
> The patterns it parses are {{:?name}} / {{:?${...}}} -- {{SqlComponent}} has
> already regex-replaced the {{placeholder}} character ({{#}} by default) with
> {{?}}. So {{:customer}} and {{:${body[customer]}}} match nothing, reach H2
> verbatim, and come back as:
> {noformat}
> Syntax error in SQL statement "INSERT INTO customers (id, country, orders)
> VALUES ([*]:$ body[customer] , :$ body[country] , 1) ..."
> {noformat}
> (the braces are blanked by H2's own JDBC-escape handling, which makes the
> message harder still to connect back to the query as written).
> Suggestion: when the query is passed through because nothing was recognised,
> but it contains a {{:}} followed by a letter or {{$}}, say so once -- either
> a WARN when the endpoint starts or a hint added to the failure -- naming the
> supported form. It should stay a hint and never reject a query: a colon
> appears legitimately in a Postgres {{::}} cast and in time literals, so the
> check must skip a doubled colon and must not fail the endpoint.
> Evidence: measuring how well a local model writes Camel routes, a step that
> registers a row with named parameters was failed by all 20 attempts across
> two 10-pass runs. The attempts were {{:customer}} (Spring JDBC style, no
> {{#}}), {{:${body[customer]}}} (no {{#}}), and the correct
> {{:#${body[customer]}}} paired with a MySQL-dialect upsert. Only the last of
> those is the author's own fault; the first two are shapes Camel could
> recognise as a mistake and name.
> See also the sibling issue about the catalog documentation of a component not
> carrying the syntax at all, only the option list.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)