[ 
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)

Reply via email to