[ 
https://issues.apache.org/jira/browse/CALCITE-1671?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15898241#comment-15898241
 ] 

Francis Chuang commented on CALCITE-1671:
-----------------------------------------

The spec is quite "loose" as it defers to the underlying databases for 
implementation. Any behavior it defines pertains to the client only. For Go 1.8 
(where named parameteres are supported), the changes are here: 
https://docs.google.com/document/d/1F778e7ZSNiSmbju3jsEWzShcb8lIO4kDyfKDNm4PNd8/edit

- It makes no recommendations for how parameters are embedded in SQL nor what 
characters are allowed. Go has built in unicode support, so any character can 
be used.
- It makes no recommendations for whether a parameter can be used more than 
once.
- Parameters have both an ordinal and named value. If it has a name, then we 
only use the name for parameter substitution. If the parameter is unnamed, then 
use the ordinal position for substitution.

In terms of named bind parameters, driver implementers should:

- Use the `sql.Named("parameter", value)" when working with named parameters. 
For example, as a user of the database/sql package and a given driver, you 
would write the following:
{code}
db.ExecContext(ctx, `
    delete from Invoice
    where
        TimeCreated < @end
        and TimeCreated >= @start;`,
    sql.Named("start", startTime),
    sql.Named("end", endTime),
)
{code}

- Defer the placeholder value to the driver or database, for example using `?` 
for ordinal values.
- If both named and ordinal values are used in a statement, named parameters 
should be bound to named values and ordinal parameters should use ordinal 
values.
- Drivers must add any symbol prefix to named parameters. The database/sql will 
pass in something like "ID" or "Name" and the driver shoudl prepend the symbol 
if required: ":NAME" or "@NAME".
- If the database does not support named parameters, return an error if they 
are used.

> Support for named bind parameters
> ---------------------------------
>
>                 Key: CALCITE-1671
>                 URL: https://issues.apache.org/jira/browse/CALCITE-1671
>             Project: Calcite
>          Issue Type: New Feature
>            Reporter: Francis Chuang
>            Assignee: Julian Hyde
>            Priority: Minor
>
> As discussed on the mailing list, there is some interest in supporting named 
> bind parameters:
> {code}
> SELECT * FROM my_table WHERE my_column > :parameter1 AND mycolumn2 > 
> :parameter2
> {code}
> Will mixing of named and unnamed parameters be allowed?
> {code}
> SELECT * FROM my_table WHERE my_column > :parameter1 AND mycolumn2 > ? AND 
> mycolumn3 > :parameter3
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to