[Lazarus] TSQLQuery: Getting autoincremented ID value after insert (MySQL)

Marcos Douglas md at delfire.net
Fri Nov 14 18:24:40 CET 2014


On Fri, Nov 14, 2014 at 2:11 PM, Michael Van Canneyt
<michael at freepascal.org> wrote:
>
>
> On Fri, 14 Nov 2014, Marcos Douglas wrote:
>
>>> Your remarks sound like maybe you don't understand/know exactly what
>>> RETURNING does ?
>>> It was invented exactly to deal with such things.
>>
>>
>> AFAIK RETURNING is a SQL clause. I know that but I never used before.
>>
>> You tell me SQLdb will use RETURNING clause if the DMBS have support,
>> right? Well, AFAIK MSSQL does not have support for this... but MSSQL
>> have IDENTITY (auto-inc) fields. How I will use RETURNING on MSSQL? If
>> this clause don't exists -- if already exists, sorry -- how I can get
>> the ID auto-inc?
>>
>> Please, don't tell me that will be implemented a parser to search a
>> RETURNING clause on SQL, cut this part, execute, do other things to
>> get the ID and paste the RETURNING again.  :)
>
>
> Nono.

:)

> What I have in mind is the following:
>
> Add pfRefreshUpdate/pfRefreshInsert for ProviderFLags
>
> Then:
>
> a) If the DB engine supports RETURNING clause (it seems 3 engines do, 3
> don't),
>    that will be used to fetch the values. This is the most optimal approach.

OK

> b) For engines that do not support "returning" there is the option to
> specify a refresh SQL statement.
>    (coincidentally: these are the engines that use autoInc type fields
> instead of sequences)

This option, to specify a SQL statement, is the programmer that write
the SQL? This should come from driver, don't?

>    the 'last_insert_id' parameter for this statement will be detected (using
> the reserved name
>    or the name of the ftAutoInc field) and filled with the contents of the
> last generated ID.
>
>    This if the engine supports getting the last insert id, this refresh
> statement will be constructed
>    and automatically used in 2 cases:
>
>    1) if pfRefreshUpdate/pfRefreshInsert is found in the list of fields.
>    2) if no pfRefreshUpdate/pfRefreshInsert is found in the list of fields,
> but there is 1 ftAutoInc field and
>       the database engine supports getting the last generated ID.

OK

> That should cover most, if not all, cases where a refresh is needed, with
> minimal interference of the programmer...

Looks good.


Marcos Douglas




More information about the Lazarus mailing list