[Lazarus] What is a TSQLTransaction and why do I need one?

michael.vancanneyt at wisa.be michael.vancanneyt at wisa.be
Mon Nov 29 17:57:09 CET 2010



On Mon, 29 Nov 2010, Joost van der Sluis wrote:

> On Wed, 2010-11-24 at 20:57 +0100, Michael Van Canneyt wrote:
>>
>> On Wed, 24 Nov 2010, Alexsander Rosa wrote:
>>
>>> But it is transparent to the libpq programmer; why it's not transparent with sqldb?
>>
>> Correction: it can be transparant in libpq.
>>
>> But we can make it so in SQLDB.
>>
>> The SQLDB model is in fact modeled after Firebird.
>> Firebird offers more control over the transactions.
>>
>> We did not want to take away this possibility, so we modeled sqldb on
>> the most powerful RDBMS. This adds some overhead for the others.
>>
>> What we neglected to do is add what Martin added: offer a less intrusive
>> way for the programmer to use it (i.e. create a default transaction in the
>> background if none is specified, and close the transaction once the data
>> is read).
>>
>> But we'll do that too, all in good time.
>>
>> If someone is in a hurry, patches are definitely accepted.
>
> Problem is that I haven't found a good model for this. Martin's solution
> could be an idea, though.
>
> It could help if someone could sketch the typical wanted behavior from
> the transactions.

I sent an idea for an implementation in a reply to Alexsander Rosa.
basically:

TConnectionOption = (coAutoTransaction)
TConnectionOptions = set of TConnectionOption;

Property TSQLConnection.options = TConnectionOptions;

Procedure TSQLConnection.CreateDefaultTransaction;

If coAutoTransaction is set, and TSQLQuery does not have a TSQLTransaction
assigned, it creates one through TSQLConnection.CreateDefaultTransaction.
(It should be of type TSQLAutoTransaction, a simple descendent of
TSQLtransaction, so detection of 'default transaction' is simple)

Whenever a TSQLQuery statement is executed and the transaction of TSQLTransaction is
of type TSQLAutoTransaction, then it automatically commits (more flags can be introduced
for this).

Michael.




More information about the Lazarus mailing list