parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

Олег 16.04.2003 17:01

Допустим, имеем связку:

connect{
query...
query...
query...
}

неплохо было бы сделать всю ее атомарной, то есть запускать транзакцию при коннекте, комитить при завершении блока connect{} и откатывать при исключениях. Для этого нужно всего лишь передавать хэндл транзакции всем методам класса SQL_Driver вместе с хэндлом коннекта. ОК, все просто: делаем обертку родного хэндла коннекта (структуру X), включаем в нее контекст коннекта и контекст транзакции, и возвращаем эту обертку парсеру.

Внимание, вопрос: чем выделить память для структуры X? Если стандартным malloc, то будут ли это решение кроссплатформенным и корректным с точки зрения парсеровского сборщика мусора; если services::malloc - то доживет ли структура до конца коннекта?

-----

Кстати, хранение в драйвере расширенного контекста соединения полезно по многим причинам: можно сделать явное управление транзакциями через расширение синтаксиса sql, можно заводить две транзакции (для чтения и записи) с разными уровнями блокировки в одном коннекте...