powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Написание UDR на Pascal
6 сообщений из 56, страница 3 из 3
Написание UDR на Pascal
    #39967909
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

глянь пример Triggers.cpp

Там как раз эту особенность грамотно использовали. Соединение с внешней БД делается один раз и подготовливается запрос, в момент создания экземпляра триггера. А в методе execute подготовленный запрос просто многократно выполняют
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39967952
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
глянь пример Triggers.cpp
Глаза вытекают от макросов
Симонов Денис
Там как раз эту особенность грамотно использовали
Там внутри IExternalTrigger создается два поля
Код: plaintext
1.
2.
AutoRelease<IMessageMetadata> triggerMetadata;
AutoRelease<IStatement> stmt;

эти поля инициализируются в конструкторе, а потом используются в execute. Т.е. конкурентного доступа из разных потоков не планируется
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39967964
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

каких на фиг потоков? Я же писал что экземпляр процедуры/функции/триггера создаётся в момент загрузки в кеш метаданных. В трёшке он (кеш метаданных) раздельный для коннектов. Т.е в том примере экземпляр триггера, внешний коннект и препарированный запрос создаётся однократно в пределах текущей сессии. Но при каждом вызове триггера в текущей сессии подготовленный статмент используется повторно. Естественно, там нет никакого конкурентного доступа
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39967992
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
Естественно, там нет никакого конкурентного доступа
Т.е. идеяДругими словами, я могу безболезненно сохранить аргументы, передаваемые в IExternalProcedure.open в поля класса и безопасно к ним обращаться из любого места. А не передавать нужные мне параметры как аргументы в мои методы.жизнеспособна и работающая?

И еще, могу я в IUdrProcedureFactory.newItem(), на основании переданного мне IExternalContext подготовить запросы к своей базе, чтобы потом в IExternalProcedure.open() просто вызвать IStatement.openCursor()?
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39967997
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_жизнеспособна и работающая?

нет. Процедура может вызываться многократно. Состояние процедуры при новом вызове, не должно зависеть от предыдущего.
Например если вздумается вызывать процедуру рекурсивно, то будет жопа.

_Vasilisk_И еще, могу я в IUdrProcedureFactory.newItem(), на основании переданного мне IExternalContext подготовить запросы к своей базе, чтобы потом в IExternalProcedure.open() просто вызвать IStatement.openCursor()?

можешь. Вообще давно бы уже проверил
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39968013
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
вызывать процедуру рекурсивно,
Уговорил :)
...
Рейтинг: 0 / 0
6 сообщений из 56, страница 3 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Написание UDR на Pascal
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]