Matevz and I have started working on implementing the features
described in BEP_0010. These are the problems that we have encountered
so far:

Both alternatives:
Sqlite supports auto_increment only on one field integer primary key.
For both variants described, we need to perform autoincrements of
product specific id-s manually. On postgres and mysql, auto increments
can be achieved, but current sql translator does not distinguish
between different backends.

The current sql used to generate product specific ids is the following:

INSERT INTO ticket (id, ...) VALUES (IFNULL((SELECT MAX(id) FROM
ticket WHERE product='%s'), 0)+1, ...)

Does anyone know of a better solution? This one has problems, if two
concurrent transactions insert ticket. The second of them to commit
fails (on postgres).


Alternative 1:
Another problem lies in the code trac uses to fetch the ticket id
after the insert is done. Currently it uses db.get_last_id(cursor,
'ticket') to get the last ticket id, but this causes a problem with
variant 1, where auto increment field is actually uid.


I am currently inclining towards backend-aware sql translator. With
it, we could use database capabilities for auto increment on
postgres/mysql and transform sql to the above version on sqlite. On
sqlite it should not cause problems as the database uses more rigorous
locking.


Anze


On Mon, Jul 8, 2013 at 11:13 PM, Andrej Golcov <[email protected]> wrote:
>> I interpreted your statement above as to have global ticket ID and
>> product-specific ticket ID for a single ticket. If that's the case,
>> IMHO it is another source of confusion to have URLs /ticket/123456789
>> (<=global) and /ticket/products/pid/ticket/12 . I mean :
>>
>>   - Ticket identity is ambiguous
>>   - The user would have to remember two completely unrelated IDs
> Just want to add a use case to Olemis's list:
> There are Trac plugins that provide there own UI that exposes ticket
> IDs to user (e.g. MasterTicketPlugin) and access ticket table directly
> by passing ticket API. That would be quite strange for a user to see
> one ID in Bloodhound pages and another ID in a plugin pages for the
> same ticket.
>
> Cheers, Andrej

Reply via email to