Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: IBX под Linux  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 29662
_Vasilisk_
Т.е. для создания стейтмента нужна и транзакция (prepare, execute) и соединение (alloc). И соединение из транзакции не извлекается.

и ? В любом случае схема связей древовидная:
Соединение->Транзакции->Запросы
Запрос работает в какой-то транзакции какого-то соединения.
5 апр 21, 01:01    [22304160]     Ответить | Цитировать Сообщить модератору
 Re: IBX под Linux  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921

kdv
В любом случае схема связей древовидная:
Соединение->Транзакции->Запросы

Авотфиг. Двухфазные транзакции по прежнему поддерживаются, так что это треугольник: запрос
привязан к соединению, но для выполнения ему нужна транзакция, к которой привязано в том
числе и это соединение. Можно даже попытаться выполнить его в транзакции, которая совсем с
левого соединения. Будет весело.

Posted via ActualForum NNTP Server 1.5

5 апр 21, 01:11    [22304162]     Ответить | Цитировать Сообщить модератору
 Re: IBX под Linux  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 682
kdv
Fr0sT-Brutal
q := TIBSQL.Create(nil);
q.Database := DB;
q.Transaction := TIBTransaction.Create(q);

вроде как не ошибка, но нафиг такое надо - вообще-то должно быть наоборот - запрос должен принадлежать транзакции.
то есть, в коннекте есть транзакциИ, в транзакции есть запросЫ.

*исправлено - утро, понедельник, не проснулся еще*
Хм, тут неоднозначно - запрос выполнится и останется, а транзакция закроется. АПИ-подход не очень ложится на ООП, т.к. хэндлы создаются и закрываются, а объекты остаются

Сообщение было отредактировано: 5 апр 21, 10:17
5 апр 21, 10:22    [22304230]     Ответить | Цитировать Сообщить модератору
 Re: IBX под Linux  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 29662
Fr0sT-Brutal
тут неоднозначно - запрос выполнится и останется, а транзакция закроется.

да, запрос может оставаться в prepared-состоянии не будучи привязанным ни к какой транзакции.
Ничего страшного. Его можно выполнить в другой транзакции
автор
АПИ-подход не очень ложится на ООП, т.к. хэндлы создаются и закрываются, а объекты остаются

А вот тут мысль неправильная. Если завершается транзакция, то как "экземпляр объекта" она должна кончиться, потому что ее уже не существует. Но ведь никто в здравом уме не уничтожает IBTransaction (например) по ее закрытии.
Ну или IBDatabase - в закрытом коннекте ничего не существует, коннекта нет. Так что я тут никакого конфликта не вижу.
Поэтому в состоянии Closed хэндла нет, а в Open - хэндл есть.

p.s. насчет двухфазных транзакций - это скорее исключение, связанное с "фишкой C", когда в функцию можно передать произвольное количество параметров (хэндлов транзакций).
5 апр 21, 10:42    [22304247]     Ответить | Цитировать Сообщить модератору
 Re: IBX под Linux  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 682
kdv
А вот тут мысль неправильная. Если завершается транзакция, то как "экземпляр объекта" она должна кончиться, потому что ее уже не существует. Но ведь никто в здравом уме не уничтожает IBTransaction (например) по ее закрытии.
Ну или IBDatabase - в закрытом коннекте ничего не существует, коннекта нет. Так что я тут никакого конфликта не вижу.
Поэтому в состоянии Closed хэндла нет, а в Open - хэндл есть.

Ну, тут сама либа диктует структуру. Из sql есть ссылка на транзакцию, а не наоборот. Или ты про то, чтобы отдельно создать транзакцию, ее где-то хранить и присваивать sql-ям? Это ведь надо организовывать хранение. В моей структуре sql:транзакция 1:1, т.ч. иерархия не нарушена, зато кода меньше
5 апр 21, 11:26    [22304292]     Ответить | Цитировать Сообщить модератору
 Re: IBX под Linux  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921

kdv
в функцию можно передать произвольное количество параметров (хэндлов транзакций).

Хэндлов коннектов. Ибо это коннекты добавляются в транзакцию, а не наоборот.

Posted via ActualForum NNTP Server 1.5

5 апр 21, 12:39    [22304350]     Ответить | Цитировать Сообщить модератору
 Re: IBX под Linux  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 29662
Fr0sT-Brutal,

ну что за ... А как еще узнать, к какой транзакции прилеплен запрос? В каком коннекте работает транзакция?
Потому у sql ссылка на ОДНУ транзакцию, а у транзакции - СПИСОК привязанных к ней sql (и у коннекта тоже список транзакций, а не одна, как в тех серверах, которые такое не умеют).
Ну посмотри хоть в mon$, там что, запросы первоочередные? Нет
mon$attachments->mon$transactions->mon$statements.
всё точно так же, как я рассказываю.
5 апр 21, 13:37    [22304401]     Ответить | Цитировать Сообщить модератору
 Re: IBX под Linux  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921

kdv
у транзакции - СПИСОК привязанных к ней sql (и у коннекта тоже список транзакций

Не совсем. У транзакции - список курсоров, а не запросов. И список коннектов. Связь
коннекты-транзакции это многие-ко-многим.

Posted via ActualForum NNTP Server 1.5

5 апр 21, 13:40    [22304402]     Ответить | Цитировать Сообщить модератору
 Re: IBX под Linux  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4539
Странный спор какой-то.
Есть соединение, к нему привязаны стейтменты.
Чтобы создать (препарировать) стейтмент, нужна транзакция, и чтобы выполнить его - тоже нужна транзакция (не обязательно та, что использовалась при создании).
Довольно удобно, когда к объектам типа TIBSQL привязан объект TIBTransaction. Когда транзакция закроется - привязка не уйдет, и когда она снова откроется (на самом деле, внутри TIBTransaction создастся новая транзакция) - не надо ничего снова привязывать, стейтмент автоматически может выполниться уже с новым хэндлом транзакции.
Но можно и менять транзакцию стэйтменту, просто переприсвоением объекта TIBTransaction, если это удобно.
Не вижу тут никакой особой разницы с принципом работы API. Наоборот, только упрощение и удобство.
5 апр 21, 14:40    [22304486]     Ответить | Цитировать Сообщить модератору
 Re: IBX под Linux  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 682
kdv
Fr0sT-Brutal,

ну что за ... А как еще узнать, к какой транзакции прилеплен запрос? В каком коннекте работает транзакция?
Потому у sql ссылка на ОДНУ транзакцию, а у транзакции - СПИСОК привязанных к ней sql (и у коннекта тоже список транзакций, а не одна, как в тех серверах, которые такое не умеют).
Ну посмотри хоть в mon$, там что, запросы первоочередные? Нет
mon$attachments->mon$transactions->mon$statements.
всё точно так же, как я рассказываю.

А можешь накидать хотя бы примерно кодом свой идеальный вариант? А то что-то я не вкурю, как ты предлагаешь делать...
5 апр 21, 15:11    [22304525]     Ответить | Цитировать Сообщить модератору
 Re: IBX под Linux  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 29662
Fr0sT-Brutal,

я предложил в том куске кода поменять направленность логики. Не от запроса к транзакции, а наоборот.
По связям объектов - чем IBX не устраивает?
5 апр 21, 15:14    [22304530]     Ответить | Цитировать Сообщить модератору
 Re: IBX под Linux  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 682
kdv
Fr0sT-Brutal,

я предложил в том куске кода поменять направленность логики. Не от запроса к транзакции, а наоборот.
По связям объектов - чем IBX не устраивает?

Хм. То есть предлагаешь создать тр-ю, создать sql, присвоить тр-ю sql-ю? Можно, конечно... список тр-ий, как я посмотрел, все равно сидит у database внутре.
5 апр 21, 16:44    [22304645]     Ответить | Цитировать Сообщить модератору
 Re: IBX под Linux  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32207

всё это спор ниобчём.
какая разница что и как там на клиенте?
да пофигу!

Posted via ActualForum NNTP Server 1.5

5 апр 21, 16:47    [22304650]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Delphi Ответить