|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Хочу представить для обсуждения предварительную версию статьи про написание UDR на Pascal с примерами. Исходные коды примеров и текст статьи вы можете найти по ссылке https://github.com/sim1984/udr-book В настоящий момент материал может содержать множество ошибок, часть моментов не раскрыта. Пишите предложения, замечания и вопросы. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2019, 17:34 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Симонов Денис, замечания стр.6 Подсказка Если вы не знаете как уничтожается объяет посмотрите его иерархию, если в ней есть интрефейс IReferenceCounted . --------- и предложение заканчивается. читая следующее предложение все становится ясным, однако осадок остается --------- Для интерфейсов с подсчётом ссылок, по завершению работы с объектом необходимо уменьшить счётчик ссылок вызовом метода release(). стр.7 UDR могут быть добалены или удалены из базы данных с помощью DDL комманд подобно тому как вы добавляете или удаляете обычные PSQL процедуры, функции или триггеры. В этом случае --------- ожидаю что к моменту прочтения этого куска должно быть ясно к чему он относится (читая дальше понимаю что к триггерам, однако малость поздно) -------- вместо тела триггера указывается место его расположения во внешнем модуле с помощью предложения EXTERNAL NAME. Рассмотрим синтаксис этого предложения, оно будет обим для внешних процедур, функций и триггеров стр.67 Поскольку размер данных типа BLOB может быть очень большим, то данные BLOB читаются и пишутся порциями порцияи (сегментами) стр.70 Примечание Тип перечеление TFBCharSet не входит в Firebird.pas. стр.71 BLOB читается порцияи (сегментами), стр.73 Работоспособность процедуры можно проверисть слеющим образом: стр.80 Если ваша внешняя процедура, функция или триггер должна получать данные из собственной базы данных не через входные аргументы, а например через запрос, то вам поребуется получать контекст текущего соединения и/или транзакции стр.80 В этом случае нам придётся работать с интерфейсом IMessageMetadata. Вы уже сталкивались с ним ранее, но на этот раз придётся работать с ним более основательно ----- Наверное все-же не "Вы" а "Мы" ----- Стр.82 Дополнительный метод MakeScaleInteger предназначен для преоьразование масштабируемых чисел в строку ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 10:02 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
m7m, да грамматических ошибок там много, надо словарик русский всё таки поставить в oxygen, а то как компьютер поменял руки не дошли. Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 10:16 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Симонов Денис, стр. 4 UDR предоставляют получить контекст текущего соединения или транзакции для того чтобы выполнять некоторые манипуляции с текущей базой данных в этом контексте Не звучит... Наверное должно быть позволяют стр. 10 module name Имя внешнего модуля, в котором расположена процедурв . стр. 19 В данном случе необходимо экспортировать всего одну функцию firebird_udr_plugin, которая является точкой входа для плагина внешних модулей UDR. Реализая этой функции будет находится в модуле UdrInit. стр, 20 Особенности Free Pascal ... Директива {$H+} включает поддержку длинный строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 14:15 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
sasha27Не звучит... Наверное должно быть позволяют "В UDR доступен контекст текущего соединения или транзакции для того чтобы выполнять некоторые манипуляции с текущей базой данных в этом контексте." ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 16:26 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Симонов Денисда грамматических ошибок там много, надо словарик русский всё таки поставить в oxygen, а то как компьютер поменял руки не дошли. Денис, если не сложно, на каждую рекламацию давай однозначный ответ, когда именно она будет исправлена. Чтобы желающим в свою очередь присоединиться по два раза не вставать. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 16:37 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Vlad F, грамматику я сегодня вечером посмотрю ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 16:46 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Денис, вот тут осталось еще: стр. 10 Таблица 2.2. Некоторые параметры внешней процедуры червертая строка в таблице, в поле описание module name | Имя внешнего модуля, в котором расположена процедурв ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 22:43 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
sasha27, поправил ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2019, 22:59 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
стр. 5 В данном руководство не включает полного описания Firebird API. стр.5 (запятая) ... ознакомится с ним в каталоге документации , распространяемой ... и ... перевод данного документа , доступный... стр. 6 (запятые) Если вы не знаете , как уничтожается объект , посмотрите его иерархию... стр.7 (вероятно, нужна запятая) с помощью DDL команд подобно тому , как вы добавляете стр.7 (вероятно, нужна запятая) В этом случае , вместо тела триггера... стр.7 ...оно может быть использовано внешн е м модулем... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2019, 08:43 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Док, это исправил. У кого-нибудь есть замечания по содержимому? Что не понятно описано? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2019, 21:43 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Симонов Денис, У меня, с вашего позволения, еще будут. Не спеши т.о. выпускать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2019, 22:49 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Vlad F, да без проблем ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2019, 22:54 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Я с вашего позволения через полгодика к этой теме обращусь и почитаю. Я чую, где это может пригодиться в своих существующих проектах. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2019, 08:45 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
o_v_a, Ты лучше сейчас почитай. Денису, имхо, надо помочь ее вычитать. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2019, 09:44 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Семантически я всё равно не найду косяков, потому что не в теме. Надо ж пробовать... Орфографию и пунктуацию если только. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2019, 10:40 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Я заметил пару мелких ошибок, но ничего серьёзного. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2019, 11:15 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Можно подниму тему? 1. CLOOP — Cross Language Object Oriented Programming. Этот инструмент не входит в поставку Firebird. Его можно найти в исходных кодах https://github.com/FirebirdSQL/firebird/tree/B3_0 _Release/extern/cloop. После того как инструмент будет собран...Может я особо криворукий, но у меня собрать его не получилось. Чем его собирать? make выдает кучу ошибок. Судя по беглому просмотру Makefile он вообще под Windows не собирается 2. Я так понимаю, что любая UDR должна экспортировать ровно одну функцию с жестко заданным именем firebird_udr_plugin. Я прав? Просто из фразыВ данном случае необходимо экспортировать всего одну функцию firebird_udr_plugin, которая является точкой входа для плагина внешних модулей UDR.это не следует. К чему здесь фраза "В данном случае"? 3. Не описаны параметры функции firebird_udr_plugin. Особенно я не понял манипуляций с AUnloadFlagLocal: BooleanPtr и возвращаемым результатом. 4. Не знаю, на сколько критично, но я бы добавил еще упоминание про IsMultiThread := True 5. Вызовы, с передачей в функцию, которая принимает интерфейсный объект, только что созданного объекта чреваты утечкой. Я о конструкции Код: pascal 1. 2.
Да, в текущем объявлении Код: sql 1.
модификатор const отсутствует и утечки не будет, но я бы не закладывал себе грабли и явно передавал бы интерфейс Код: pascal 1. 2. 3. 4. 5.
или так Код: pascal 1. 2. 3. 4. 5. 6. 7.
А вообще считаю отсутствие модификатора const перед интерфейсным параметром ошибкой. Т.к. он блокирует вызов _AddRef/_Release до/после вызова функции ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 16:23 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
_Vasilisk_ 5. Вызовы, с передачей в функцию, которая принимает интерфейсный объект, только что созданного объекта чреваты утечкой. Нужно тогда изменить хотя бы эту фразу Интерфейсы Firebird не основываются на спецификации COM, поэтому управление их временем жизни осуществляется иначе.на такуюИнтерфейсы Firebird не основываются на спецификации COM и, по сути, являются обычными классами. Поэтому управление их временем жизни осуществляется иначе. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 16:35 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
_Vasilisk_, по сути интерфейсы это чистые абстрактные классы. Это в COM к ним прилепили счётчики ссылок и всё такое. В Object Pascal отдельное ключевое слово выдумали interface (именно под COM интерфейсы), а в C++ они все классы и есть _Vasilisk_Может я особо криворукий, но у меня собрать его не получилось. Чем его собирать? make выдает кучу ошибок. Судя по беглому просмотру Makefile он вообще под Windows не собирается я собирал visual studio community 2019. Впрочем зачем тебе это? Возьми готовый firebird.pas в дистрибутивах под Linux _Vasilisk_2. Я так понимаю, что любая UDR должна экспортировать ровно одну функцию с жестко заданным именем firebird_udr_plugin. Я прав? Просто из фразы потому что когда пишешь обычные udf на каждую функцию делаешь новый экспорт. Здесь точка входа всего одна _Vasilisk_Особенно я не понял манипуляций с AUnloadFlagLocal: BooleanPtr и возвращаемым результатом. оно так в примере поставляемым с Firebird было. Если бы я знал для чего описал бы. Это нигде не задокументировано. Так там собственно все пераметры кроме AUnloadFlagLocal и так понятны. Тем не менее не знание для чего это нужно не мешает писать UDR чисто используя шаблон. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 17:02 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
_Vasilisk_Интерфейсы Firebird не основываются на спецификации COM и, по сути, являются обычными классами. Они даже классами не являются. Так, убожество, эмулирующее VMT массивом указателей. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 17:05 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Симонов Денис по сути интерфейсы это чистые абстрактные классы Симонов Денис потому что когда пишешь обычные udf на каждую функцию делаешь новый экспорт. Здесь точка входа всего одна Симонов Денис оно так в примере поставляемым с Firebird было. Если бы я знал для чего описал бы. Это нигде не задокументировано. Симонов Денис Так там собственно все пераметры кроме AUnloadFlagLocal и так понятны. Симонов Денис Тем не менее не знание для чего это нужно не мешает писать UDR чисто используя шаблон. И еще вопрос - нигде не нашел про обработку ошибок. Плохо искал? Как из UDR возвратить ошибку? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 17:11 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
_Vasilisk_Как из UDR возвратить ошибку? Для этого в параметрах (почти) каждого метода торчит status. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 17:20 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Для этого в параметрах (почти) каждого метода торчит status. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 17:25 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
_Vasilisk_, Про ошибки я забыл описать. Но тут суть именно в этой реализации IStatus реализован как бросающий исключение FbException. Т.е. для методов в которые передаётся IStatus будет сгенерировано исключение в случае ошибки, и выполнение будет немедленно прервано. Стандартные исключения Delphi тоже будут автоматически перехвачены с isc_random в статус векторе. Генерировать ошибки с другими кодами надо постараться Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
_Vasilisk_Понятно. Ну тогда хотя бы указать, что undocumented и делайте так вообще-то там всё не документировано. Есть только примеры. Так что всё что там написано не есть истина в последней инстанции. Это предмет моих исследований в области UDR. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 17:46 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Я не знаю, насколько это интересно широкой общественности, но для меня стало открытием и стоило часа отладки, чтобы понять, что для NUMERIC(9,2) нужно в IMetadataBuilder указывать отрицательный Scale -2. Передавая 50.12 и указывая положительный Scale 2, я в UDR получал значение 0. И только указав -2 получил 5012 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2020, 12:20 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
_Vasilisk_Я не знаю, насколько это интересно широкой общественности Я не знаю насколько широкая общественность читала старый, ещё интербейзовский, API Guide. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2020, 12:53 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov старый, ещё интербейзовский, API Guide. Мне, как человеку не работавшим ранее напрямую с API разбираться с ним крайне сложно. Описания того же IExternalContext я не нашел вообще нигде в интернете ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2020, 13:23 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Документация - традиционно слабая сторона птицы. Влад и Адриано в таких случаях говорят "читайте исходники, там всё написано". Алекс говорит "задавай вопросы в девеле", но отвечает на эти вопросы через раз. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2020, 13:28 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
_Vasilisk_Описания того же IExternalContext я не нашел вообще нигде в интернете Это у Дениса надо спросить. Потому что в http://www.ibase.ru/files/firebird/udr.pdf оно (и не только) часто упоминается, а в http://www.ibase.ru/files/firebird/fbapi.html ничего похожего нет (даже слова context). p.s. я с этим вообще не разбирался, но че-то не очень понимаю, почему firebird.pas не входит в поставку, и его надо "генерить" через CLOOP. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2020, 14:14 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
kdvче-то не очень понимаю, почему firebird.pas не входит в поставку, и его надо "генерить" через CLOOP. Потому что клоп не включён в процедуру сборки под винду. Потому что он под ней не собирается. Потому что кому-то было лень это фиксиить. Он входит в пакет с исходниками, поскольку тот собирается на линуксе. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2020, 14:18 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
kdv, он есть в дистрибутивах под Linux. Почему не попадает в снапшоты винды хз ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2020, 14:18 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
kdv так это только перевод из firebird/doc/Using_OO_API.html От себя я там ничего не писал, ну разве что про клопа ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2020, 14:24 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
kdv не очень понимаю, почему firebird.pas не входит в поставку, и его надо "генерить" через CLOOP. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 13:32 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
_Vasilisk_, возможно это правили. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 13:53 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
_Vasilisk_К слову, в 3.0.5 он обнаружился в папке include\firebird в zip с офсайта ничего такого нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 14:04 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
kdv в zip с офсайта ничего такого нет. верно, в архивчик его положить забыли от слова совсем ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 17:49 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
kdv в zip с офсайта ничего такого нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 18:06 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
_Vasilisk_ kdv в zip с офсайта ничего такого нет. я тут по ходу дела проверил - ни в одном архиве с исподниками, начиная с 1.0.3, firebird.pas нет :) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 18:17 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Док, клооп не настолько древний. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2020, 21:18 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Кстати, Денис, добавь в сабж копирайты и лицензию какую-нибудь, а то статус непонятен, Ривз колеблется с переводом. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2020, 14:14 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
DS> Ривз колеблется с переводом. Боится нелицензионности что ли? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2020, 14:20 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, ну копирайты в примерах и тексте я могу поставить. А вот что там за лицензия хз ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2020, 14:30 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Симонов ДенисА вот что там за лицензия хз Два напрашивающихся варианта: IDPL и Public Domain. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2020, 14:36 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
что-то типа вот этого что ли? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2020, 14:39 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Симонов Денисчто-то типа вот этого что ли? Да, только я бы лицензию тут же положил в виде отдельного файла, а то URL-ы имеют свойство протухать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2020, 14:47 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Я правильно понимаю, что для каждого вызова процедуры/функции/триггера создается свой экземпляр IExternalProcedure/IExternalFunction/IExternalTrigger? Или хотя бы обращение к одному экземпляру не идет одновременно из разных потоков? Другими словами, я могу безболезненно сохранить аргументы, передаваемые в IExternalProcedure.open в поля класса и безопасно к ним обращаться из любого места. А не передавать нужные мне параметры как аргументы в мои методы. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 14:39 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
_Vasilisk_, нет, не правильно. Экземпляр процедуры создаётся в момент её загрузки в кэш метаданных авторМетод newItem вызывается для создания экземпляра внешней процедуры, функции или триггера. Создание экземпляров UDR происходит в момент её загрузки в кэш метаданных, т.е. при первом вызове процедуры, функции или триггера. В настоящий момент кэш метаданных раздельный для каждого соединения для всех архитектур сервера. Кэш метаданных процедур и функция связан с их именами в базе данных. Например, две внешние функции с разными именами, но одинаковыми точками входа, будут разными экземплярами IExternalFunction. Точка входа состоит из имени внешнего модуля и имени под которым зарегистрирована фабрика. Как это можно использовать покажем позже. Если у тебя процедура выбора, передавай сохраняй аргументы в экземляр класса реализующий IExternalResultSet, если нет то можешь создать свой отдельный класс, раз там такая сложная логика ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 15:18 |
|
Написание UDR на Pascal
|
|||
---|---|---|---|
#18+
Симонов Денис создать свой отдельный класс ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 15:25 |
|
Написание 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?all=1&fid=40&tid=1560331]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
126ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
91ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 270ms |
0 / 0 |