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
