Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Firebird, InterBase |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 3 вперед Ctrl→ все |
Симонов Денис Member Откуда: Рязань Сообщений: 10797 |
Хочу представить для обсуждения предварительную версию статьи про написание UDR на Pascal с примерами. Исходные коды примеров и текст статьи вы можете найти по ссылке https://github.com/sim1984/udr-book В настоящий момент материал может содержать множество ошибок, часть моментов не раскрыта. Пишите предложения, замечания и вопросы. |
10 мар 19, 17:34 [21828746] Ответить | Цитировать Сообщить модератору |
m7m Member Откуда: Украина, Мариуполь Сообщений: 1440 |
Симонов Денис,
|
|
11 мар 19, 10:02 [21828907] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10797 |
m7m, да грамматических ошибок там много, надо словарик русский всё таки поставить в oxygen, а то как компьютер поменял руки не дошли. Спасибо |
11 мар 19, 10:16 [21828914] Ответить | Цитировать Сообщить модератору |
sasha27 Member Откуда: Москва Сообщений: 178 |
Симонов Денис,
|
|
11 мар 19, 14:15 [21829195] Ответить | Цитировать Сообщить модератору |
kdv Member Откуда: iBase.ru Сообщений: 29564 |
"В UDR доступен контекст текущего соединения или транзакции для того чтобы выполнять некоторые манипуляции с текущей базой данных в этом контексте." |
||
11 мар 19, 16:26 [21829396] Ответить | Цитировать Сообщить модератору |
Vlad F Member Откуда: Сообщений: 1341 |
Денис, если не сложно, на каждую рекламацию давай однозначный ответ, когда именно она будет исправлена. Чтобы желающим в свою очередь присоединиться по два раза не вставать. |
||
11 мар 19, 16:37 [21829435] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10797 |
Vlad F, грамматику я сегодня вечером посмотрю |
11 мар 19, 16:46 [21829450] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10797 |
исправил |
11 мар 19, 22:10 [21829804] Ответить | Цитировать Сообщить модератору |
sasha27 Member Откуда: Москва Сообщений: 178 |
Денис, вот тут осталось еще: стр. 10 Таблица 2.2. Некоторые параметры внешней процедуры червертая строка в таблице, в поле описание module name | Имя внешнего модуля, в котором расположена процедурв |
11 мар 19, 22:43 [21829826] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10797 |
sasha27, поправил |
11 мар 19, 22:59 [21829838] Ответить | Цитировать Сообщить модератору |
Док Member Откуда: Казань Сообщений: 6976 |
стр. 5 В данном руководство не включает полного описания Firebird API. стр.5 (запятая) ... ознакомится с ним в каталоге документации, распространяемой ... и ... перевод данного документа, доступный... стр. 6 (запятые) Если вы не знаете, как уничтожается объект, посмотрите его иерархию... стр.7 (вероятно, нужна запятая) с помощью DDL команд подобно тому, как вы добавляете стр.7 (вероятно, нужна запятая) В этом случае, вместо тела триггера... стр.7 ...оно может быть использовано внешнем модулем... |
12 мар 19, 08:43 [21829937] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10797 |
Док, это исправил. У кого-нибудь есть замечания по содержимому? Что не понятно описано? |
19 мар 19, 21:43 [21837794] Ответить | Цитировать Сообщить модератору |
Vlad F Member Откуда: Сообщений: 1341 |
Симонов Денис, У меня, с вашего позволения, еще будут. Не спеши т.о. выпускать. |
19 мар 19, 22:49 [21837866] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10797 |
Vlad F, да без проблем |
19 мар 19, 22:54 [21837870] Ответить | Цитировать Сообщить модератору |
o_v_a Member Откуда: Тула Сообщений: 1137 |
Я с вашего позволения через полгодика к этой теме обращусь и почитаю. Я чую, где это может пригодиться в своих существующих проектах. |
20 мар 19, 08:45 [21838028] Ответить | Цитировать Сообщить модератору |
Vlad F Member Откуда: Сообщений: 1341 |
o_v_a, Ты лучше сейчас почитай. Денису, имхо, надо помочь ее вычитать. |
20 мар 19, 09:44 [21838067] Ответить | Цитировать Сообщить модератору |
o_v_a Member Откуда: Тула Сообщений: 1137 |
Семантически я всё равно не найду косяков, потому что не в теме. Надо ж пробовать... Орфографию и пунктуацию если только. |
20 мар 19, 10:40 [21838140] Ответить | Цитировать Сообщить модератору |
Гаджимурадов Рустам Member Откуда: Сообщений: 62423 |
Я заметил пару мелких ошибок, но ничего серьёзного. Posted via ActualForum NNTP Server 1.5 |
20 мар 19, 11:15 [21838196] Ответить | Цитировать Сообщить модератору |
Между сообщениями интервал более 1 года. |
_Vasilisk_ Member Откуда: Украина, Харьков Сообщений: 12640 |
Можно подниму тему? 1.
2. Я так понимаю, что любая UDR должна экспортировать ровно одну функцию с жестко заданным именем firebird_udr_plugin. Я прав? Просто из фразы
3. Не описаны параметры функции firebird_udr_plugin. Особенно я не понял манипуляций с AUnloadFlagLocal: BooleanPtr и возвращаемым результатом. 4. Не знаю, на сколько критично, но я бы добавил еще упоминание про IsMultiThread := True 5. Вызовы, с передачей в функцию, которая принимает интерфейсный объект, только что созданного объекта чреваты утечкой. Я о конструкции AUdrPlugin.registerFunction(AStatus, 'sum_args', TSumArgsFunctionFactory.Create());Да, в текущем объявлении procedure IUdrPlugin.registerFunction(status: IStatus; name: PAnsiChar; factory: IUdrFunctionFactory);модификатор const отсутствует и утечки не будет, но я бы не закладывал себе грабли и явно передавал бы интерфейс var LFact: IUdrFunctionFactory; begin LFact := TSumArgsFunctionFactory.Create(); AUdrPlugin.registerFunction(AStatus, 'sum_args', LFact); end;или так class function TSumArgsFunctionFactory.CreateIntf: IUdrFunctionFactory; begin Result := Self.Create(); end; AUdrPlugin.registerFunction(AStatus, 'sum_args', TSumArgsFunctionFactory.CreateIntf()); А вообще считаю отсутствие модификатора const перед интерфейсным параметром ошибкой. Т.к. он блокирует вызов _AddRef/_Release до/после вызова функции |
||||
21 май 20, 16:23 [22137145] Ответить | Цитировать Сообщить модератору |
_Vasilisk_ Member Откуда: Украина, Харьков Сообщений: 12640 |
Нужно тогда изменить хотя бы эту фразу
|
||||||||||
21 май 20, 16:35 [22137154] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10797 |
_Vasilisk_, по сути интерфейсы это чистые абстрактные классы. Это в COM к ним прилепили счётчики ссылок и всё такое. В Object Pascal отдельное ключевое слово выдумали interface (именно под COM интерфейсы), а в C++ они все классы и есть
я собирал visual studio community 2019. Впрочем зачем тебе это? Возьми готовый firebird.pas в дистрибутивах под Linux
потому что когда пишешь обычные udf на каждую функцию делаешь новый экспорт. Здесь точка входа всего одна
оно так в примере поставляемым с Firebird было. Если бы я знал для чего описал бы. Это нигде не задокументировано. Так там собственно все пераметры кроме AUnloadFlagLocal и так понятны. Тем не менее не знание для чего это нужно не мешает писать UDR чисто используя шаблон. |
||||||
21 май 20, 17:02 [22137176] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52522 |
Они даже классами не являются. Так, убожество, эмулирующее VMT массивом указателей. Posted via ActualForum NNTP Server 1.5 |
||
21 май 20, 17:05 [22137178] Ответить | Цитировать Сообщить модератору |
_Vasilisk_ Member Откуда: Украина, Харьков Сообщений: 12640 |
И еще вопрос - нигде не нашел про обработку ошибок. Плохо искал? Как из UDR возвратить ошибку? |
||||||||||||||||||||
21 май 20, 17:11 [22137185] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52522 |
Для этого в параметрах (почти) каждого метода торчит status. Posted via ActualForum NNTP Server 1.5 |
||
21 май 20, 17:20 [22137194] Ответить | Цитировать Сообщить модератору |
_Vasilisk_ Member Откуда: Украина, Харьков Сообщений: 12640 |
|
||||
21 май 20, 17:25 [22137201] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 3 вперед Ctrl→ все |
Все форумы / Firebird, InterBase | ![]() |