[ 
https://issues.apache.org/jira/browse/CAMEL-24574?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Claus Ibsen updated CAMEL-24574:
--------------------------------
    Fix Version/s: 4.23.0

> camel-google-bigquery - clarify that ${name} is literal substitution and 
> steer value parameters to @name
> --------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-24574
>                 URL: https://issues.apache.org/jira/browse/CAMEL-24574
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-google-bigquery
>            Reporter: Andrea Cosentino
>            Assignee: Andrea Cosentino
>            Priority: Minor
>             Fix For: 4.23.0
>
>
> The google-bigquery-sql endpoint accepts two placeholder forms in its query
> string, and they behave differently:
> * ${name} is replaced by SqlHelper.translateQuery with the literal string
>   value of the matching message header or exchange property. The result is
>   spliced into the query text before the job is built.
> * @name is collected by GoogleBigQuerySQLProducer.extractParameters and bound
>   through QueryParameterValue as a named query parameter.
> The two forms exist because BigQuery named parameters can bind values but
> cannot bind identifiers. ${name} therefore covers dataset and table names,
> which is how the documented example uses it:
>     delete * from ${datasetId}.${tableId} where id=@myId
> and how SqlHelperTest exercises it (${report} / ${import} for dataset names,
> @date / @id for values).
> The documentation does not convey this split. It says only:
>     parameters in form ${name} are extracted from message headers and formed
>     the translated query
> That sentence is accurate but incomplete. It does not state that the
> substitution is literal text rather than parameter binding, does not mention
> the identifier intent, and gives no guidance that values should use @name.
> A reader can reasonably conclude that ${name} is a binding mechanism, and use
> it for values where @name is the correct form.
> Proposed changes:
> 1. Documentation (components/camel-google/camel-google-bigquery/src/main/docs/
>    google-bigquery-sql-component.adoc)
>    - State that ${name} performs literal text substitution into the query.
>    - State that it is intended for dataset and table identifiers, and explain
>      that BigQuery named parameters cannot bind identifiers.
>    - State that @name is the correct form for any value, and that values
>      derived from message content should always use @name.
> 2. Optional runtime guard (SqlHelper.translateQuery)
>    - Validate ${name} substitutions against a BigQuery identifier shape, or
>      log a warning when a substituted value does not match one.
>    - This is a behaviour change for anyone currently using ${name} to carry
>      values. It should be evaluated separately from the documentation change
>      and, if adopted, recorded in the upgrade guide.
> Affected classes:
> * 
> components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/
>   component/google/bigquery/sql/SqlHelper.java (translateQuery)
> * 
> components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/
>   component/google/bigquery/sql/GoogleBigQuerySQLProducer.java (process,
>   extractParameters, setQueryParameters)
> * components/camel-google/camel-google-bigquery/src/main/docs/
>   google-bigquery-sql-component.adoc
> The behaviour is unchanged since CAMEL-12930 and is identical on main,
> camel-4.22.x and camel-4.18.x.



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

Reply via email to