Claus Ibsen created CAMEL-24869:
-----------------------------------

             Summary: camel-jbang - validator hint for sql endpoint queries 
with :name parameters (camel-sql uses :#name)
                 Key: CAMEL-24869
                 URL: https://issues.apache.org/jira/browse/CAMEL-24869
             Project: Camel
          Issue Type: Improvement
          Components: camel-jbang, camel-yaml-dsl
            Reporter: Claus Ibsen
             Fix For: 4.23.0


Found in the camel-jbang-mcp stepwise benchmark on the connect-service/sql 
example (H2): in 5 of 6 runs the local model's first insert used a parameter 
syntax that camel-sql does not have:

{noformat}
VALUES (:customer, :country, 1)
VALUES (:body[customer], :body[country], 1)
{noformat}

camel-sql named parameters are {{:#name}} (looked up in headers, then a Map 
body) or {{:#${simple}}}; a bare {{:name}} goes to the JDBC driver as it is and 
fails at runtime with a syntax error, after the file consumer has retried it a 
hundred times. Nothing in the validator or the write tool says so, and the 
model's own knowledge is the Spring/JPA {{:name}} form.

Add a validator row for {{sql}} and {{sql-stored}}/{{jdbc}} endpoint queries: a 
{{:name}} that is not {{:#name}}, {{:#${...}}}, {{:?name}} (stored procedure 
out parameter) or a {{::}} cast gets the hint "camel-sql named parameters are 
:#name (a header or a key of a Map body) or :#${simple}; use :#customer". The 
check is deterministic (a regex on the query option), so the write tool refuses 
the file with the corrected form before the app runs it.

The dialect mistakes in the same runs (Postgres ON CONFLICT and MySQL ON 
DUPLICATE KEY UPDATE against H2) are not a validator matter; the sql tool of 
CAMEL-24867 lets a model try a statement against the actual database first.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to