Hi,

> A function would be perfect!  A String would work for SymmetricDS.

I'm currently implementing such a function. I have a question: if
there is currently no uncommitted change (that is, a transaction is
not started, or one is started, but no changes have been made so far),
is it OK if NULL is returned? My plan is to return:

- NULL if there is no uncommitted change currently
- Otherwise the position of the first uncommitted change in the
transaction log file, and session id. Format:
<logFileId>-<position>-<sessionId>.

TRANSACTION_ID() returns a VARCHAR

Returns the current transaction id for this session. This method returns NULL
if there is no uncommitted change, or if the the database is not persisted.
Otherwise a value of the following form is returned:
logFileId-position-sessionId.
The value is unique across database restarts (values are not re-used).

Example:
CALL TRANSACTION_ID()


Regards,
Thomas



> The value needs to be unique across database restarts.  The faster the
> better.  We use it to track changes that need to be 'synchronized'
> atomically.  I am really looking for the equivalent of
> DBMS_TRANSACTION.local_transaction_id(false) on Oracle.  I would think
> the name could be as simple as TRANSACTION_ID() ??
>
> Thank you.
>
> On Feb 6, 2:10 pm, Thomas Mueller <[email protected]>
> wrote:
>> Hi,
>>
>> > I am currently implementing an H2 'database dialect' for SymmetricDS
>> > (www.symmetricds.org).    I am trying to figure out the best way to
>> > access a 'transaction id' from an H2 trigger.  The following is the
>> > Java code I have come up with.  Does anybody have suggestions for
>> > improvements (or more likely can they poke holes in my approach)?
>>
>> >    protected String getTransactionId(Connection c) {
>> >            JdbcConnection con = (JdbcConnection) c;
>> >            Session session = (Session) con.getSession();
>> >            return StringUtils.leftPad(Integer.toString(session.getId
>> > ()), 3, "0") + "-"
>> >                    + session.getFirstUncommittedLog() + "-" +
>> > session.getFirstUncommittedPos();
>> >    }
>>
>> There is currently no good way to do that. How unique does the
>> transaction id need to be? I mean, is it a problem if the id starts
>> from 0 when you restart the application? Is there a sort requirements
>> (larger transaction ids means later)?
>>
>> Your solution doesn't work for remote connections. I suggest I add a
>> SQL system function that returns the current transaction id. What is
>> your preferred function name?
>>
>> Is a String good enough, or is a byte array better? How fast does it
>> need to be?
>>
>> Regards,
>> Thomas
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/h2-database?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to