|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
_Vasilisk_, глянь пример Triggers.cpp Там как раз эту особенность грамотно использовали. Соединение с внешней БД делается один раз и подготовливается запрос, в момент создания экземпляра триггера. А в методе execute подготовленный запрос просто многократно выполняют ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 15:34 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Симонов Денис глянь пример Triggers.cpp Симонов Денис Там как раз эту особенность грамотно использовали Код: plaintext 1. 2.
эти поля инициализируются в конструкторе, а потом используются в execute. Т.е. конкурентного доступа из разных потоков не планируется ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 17:04 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
_Vasilisk_, каких на фиг потоков? Я же писал что экземпляр процедуры/функции/триггера создаётся в момент загрузки в кеш метаданных. В трёшке он (кеш метаданных) раздельный для коннектов. Т.е в том примере экземпляр триггера, внешний коннект и препарированный запрос создаётся однократно в пределах текущей сессии. Но при каждом вызове триггера в текущей сессии подготовленный статмент используется повторно. Естественно, там нет никакого конкурентного доступа ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 17:30 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Симонов Денис Естественно, там нет никакого конкурентного доступа И еще, могу я в IUdrProcedureFactory.newItem(), на основании переданного мне IExternalContext подготовить запросы к своей базе, чтобы потом в IExternalProcedure.open() просто вызвать IStatement.openCursor()? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 17:57 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
_Vasilisk_жизнеспособна и работающая? нет. Процедура может вызываться многократно. Состояние процедуры при новом вызове, не должно зависеть от предыдущего. Например если вздумается вызывать процедуру рекурсивно, то будет жопа. _Vasilisk_И еще, могу я в IUdrProcedureFactory.newItem(), на основании переданного мне IExternalContext подготовить запросы к своей базе, чтобы потом в IExternalProcedure.open() просто вызвать IStatement.openCursor()? можешь. Вообще давно бы уже проверил ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 18:12 |
|
|
start [/forum/topic.php?fid=40&msg=39967997&tid=1560331]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
127ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 225ms |
0 / 0 |