Ответ
Олег 16.04.2003 17:01
Допустим, имеем связку:
connect{
query...
query...
query...
}
неплохо было бы сделать всю ее атомарной, то есть запускать транзакцию при коннекте, комитить при завершении блока connect{} и откатывать при исключениях. Для этого нужно всего лишь передавать хэндл транзакции всем методам класса SQL_Driver вместе с хэндлом коннекта. ОК, все просто: делаем обертку родного хэндла коннекта (структуру X), включаем в нее контекст коннекта и контекст транзакции, и возвращаем эту обертку парсеру.
Внимание, вопрос: чем выделить память для структуры X? Если стандартным malloc, то будут ли это решение кроссплатформенным и корректным с точки зрения парсеровского сборщика мусора; если services::malloc - то доживет ли структура до конца коннекта?
-----
Кстати, хранение в драйвере расширенного контекста соединения полезно по многим причинам: можно сделать явное управление транзакциями через расширение синтаксиса sql, можно заводить две транзакции (для чтения и записи) с разными уровнями блокировки в одном коннекте...