|
Написание 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 |
|
|
start [/forum/search_topic.php?author=p333&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 448ms |
total: | 617ms |
0 / 0 |