>> I deliberately chose not to allow vector parameters because I think
>> it's reasonable to say: "Each R function only ever generates a single
>> query to the database", leaving the onus of looping on the user, and
>> forcing them to think about how to ensure the vectors don't contain
>> bad values.  This the same principle behind disallowing multiple
>> queries (separated by ";") in a single string.

> However, there are optimisation opportunities that the db driver could 
> exploit if multiple values are to be inserted at once. For example, a 
> database connection in auto commit mode could switch of auto commit, and try 
> to insert all values in a transaction to get all-or-nothing semantics. 
> Another opportunity would be a bulk load if the vectors are large.

Agreed, but it's also fundamentally dangerous. I think this should be
a separate function with that clearly describes the performance-safety
trade off, maybe dbBindAll()?  Alternatively, you could have an
additional `vectorise` argument that defaulted to FALSE.

That said, can you think of a use case apart from doing bulk inserts?
In RSQLite, I use an internal function to get optimal performance for
dbReadTable without generally exposing a more dangerous api.

>>> Generally, I would be in favour of the “list of params” approach. Also, 
>>> please note that the “bind by name” is not supported by all databases. 
>>> Sticking to position-only parameter binding using ? would be most 
>>> compatible (also used in JDBC for example).
>>
>> Yup, postgresql doesn't support names either. In that case, providing
>> a named list would be an error. But where named binding is supported,
>> I think it's better to use it because it eliminates a class of
>> potential errors.

> I think a script using DBI should not need to know which DBI implementation 
> is running behind it. But if someone uses named parameters on a MySQL backend 
> (possibly out of order), that script will not run with Postgres or others.

That's a noble goal, but extremely difficult in principle because of
the variations in SQL support across backends. I'd prefer not to take
a lowest common denominator approach.

Hadley

-- 
http://had.co.nz/

_______________________________________________
R-sig-DB mailing list -- R Special Interest Group
R-sig-DB@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-sig-db

Reply via email to