powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Написание UDR на Pascal
25 сообщений из 56, страница 2 из 3
Написание UDR на Pascal
    #39960392
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_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.
var
  statusVector: array [0 .. 4] of NativeIntPtr;
....
// исключение будут перехвачены в любом случае с кодом isc_random
// здесь же мы будем выбрасывать стандартную для Firebird
// ошибку isc_convert_error
try
  Output.Id := OutputArray[Counter].ToInteger();
except
  on e: EConvertError do
  begin
    statusVector[0] := NativeIntPtr(isc_arg_gds);
    statusVector[1] := NativeIntPtr(isc_convert_error);
    statusVector[2] := NativeIntPtr(isc_arg_string);
    statusVector[3] := NativeIntPtr(PAnsiChar('Cannot convert string to integer'));
    statusVector[4] := NativeIntPtr(isc_arg_end);
    AStatus.setErrors(@statusVector);
  end;
end;




_Vasilisk_Понятно. Ну тогда хотя бы указать, что undocumented и делайте так

вообще-то там всё не документировано. Есть только примеры. Так что всё что там написано не есть истина в последней инстанции. Это предмет моих исследований в области UDR.
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39963985
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не знаю, насколько это интересно широкой общественности, но для меня стало открытием и стоило часа отладки, чтобы понять, что для NUMERIC(9,2) нужно в IMetadataBuilder указывать отрицательный Scale -2.

Передавая 50.12 и указывая положительный Scale 2, я в UDR получал значение 0. И только указав -2 получил 5012
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39964018
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Я не знаю, насколько это интересно широкой общественности

Я не знаю насколько широкая общественность читала старый, ещё интербейзовский, API Guide.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39964048
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
старый, ещё интербейзовский, API Guide.
В итоге получаем вместо обособленного документа какой-то What's new.

Мне, как человеку не работавшим ранее напрямую с API разбираться с ним крайне сложно.

Описания того же IExternalContext я не нашел вообще нигде в интернете
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39964051
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Документация - традиционно слабая сторона птицы.

Влад и Адриано в таких случаях говорят "читайте исходники, там всё написано".
Алекс говорит "задавай вопросы в девеле", но отвечает на эти вопросы через раз.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39964081
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Описания того же IExternalContext я не нашел вообще нигде в интернете
Это у Дениса надо спросить.
Потому что в
http://www.ibase.ru/files/firebird/udr.pdf
оно (и не только) часто упоминается, а в
http://www.ibase.ru/files/firebird/fbapi.html
ничего похожего нет (даже слова context).

p.s. я с этим вообще не разбирался, но че-то не очень понимаю, почему firebird.pas не входит в поставку, и его надо "генерить" через CLOOP.
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39964084
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvче-то не очень понимаю, почему firebird.pas не входит в поставку, и его надо "генерить"
через CLOOP.

Потому что клоп не включён в процедуру сборки под винду. Потому что он под ней не
собирается. Потому что кому-то было лень это фиксиить.

Он входит в пакет с исходниками, поскольку тот собирается на линуксе.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39964085
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

он есть в дистрибутивах под Linux. Почему не попадает в снапшоты винды хз
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39964091
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv

http://www.ibase.ru/files/firebird/fbapi.html
ничего похожего нет (даже слова context).


так это только перевод из firebird/doc/Using_OO_API.html
От себя я там ничего не писал, ну разве что про клопа
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39964994
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
не очень понимаю, почему firebird.pas не входит в поставку, и его надо "генерить" через CLOOP.
К слову, в 3.0.5 он обнаружился в папке include\firebird
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39965006
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

возможно это правили.
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39965010
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_К слову, в 3.0.5 он обнаружился в папке include\firebird
в zip с офсайта ничего такого нет.
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39965098
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
в zip с офсайта ничего такого нет.

верно, в архивчик его положить забыли от слова совсем
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39965104
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
в zip с офсайта ничего такого нет.
Я инсталлятор запускал
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39965108
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
kdv
в zip с офсайта ничего такого нет.
Я инсталлятор запускал

я тут по ходу дела проверил - ни в одном архиве с исподниками, начиная с 1.0.3, firebird.pas нет :)
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39965161
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Док,

клооп не настолько древний.
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39965665
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, Денис, добавь в сабж копирайты и лицензию какую-нибудь, а то статус непонятен,
Ривз колеблется с переводом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39965668
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DS> Ривз колеблется с переводом.

Боится нелицензионности что ли?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39965678
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

ну копирайты в примерах и тексте я могу поставить. А вот что там за лицензия хз
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39965685
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисА вот что там за лицензия хз

Два напрашивающихся варианта: IDPL и Public Domain.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39965688
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то типа вот этого что ли?

Код: 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.
{
 *	PROGRAM:	Object oriented API samples.
 *	MODULE:		01.create.pas
 *	DESCRIPTION:	A sample of creating new database and new table in it.
 *					Run second time (when database already exists) to see
 *					how FbException is caught and handled by this code.
 *
 *					Example for the following interfaces:
 *					IMaster - main inteface to access all the rest
 *					Status - returns the status of executed command
 *					Provider - main interface to access DB / service
 *					Attachment - database attachment interface
 *					Transaction - transaction interface
 *					Util - helper calls here and there
 *					XpbBuilder - build various parameters blocks
 *
 *					Run something like this to build: fpc -Fu<path-to-Firebird.pas> -Mdelphi 01.create.pas
 *
 *  The contents of this file are subject to the Initial
 *  Developer's Public License Version 1.0 (the "License");
 *  you may not use this file except in compliance with the
 *  License. You may obtain a copy of the License at
 *  http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_idpl.
 *
 *  Software distributed under the License is distributed AS IS,
 *  WITHOUT WARRANTY OF ANY KIND, either express or implied.
 *  See the License for the specific language governing rights
 *  and limitations under the License.
 *
 *  The Original Code was created by Alexander Peshkoff
 *  for the Firebird Open Source RDBMS project.
 *
 *  Copyright (c) 2015 Alexander Peshkoff <peshkoff@mail.ru>;
 *  and all contributors signed below.
 *
 *  All Rights Reserved.
 *  Contributor(s): ______________________________________. }
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39965696
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисчто-то типа вот этого что ли?

Да, только я бы лицензию тут же положил в виде отдельного файла, а то URL-ы имеют свойство
протухать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Написание UDR на Pascal
    #39967889
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понимаю, что для каждого вызова процедуры/функции/триггера создается свой экземпляр IExternalProcedure/IExternalFunction/IExternalTrigger?

Или хотя бы обращение к одному экземпляру не идет одновременно из разных потоков?

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

нет, не правильно. Экземпляр процедуры создаётся в момент её загрузки в кэш метаданных

авторМетод newItem вызывается для создания экземпляра внешней процедуры, функции или
триггера. Создание экземпляров UDR происходит в момент её загрузки в кэш метаданных, т.е.
при первом вызове процедуры, функции или триггера. В настоящий момент кэш метаданных
раздельный для каждого соединения для всех архитектур сервера.

Кэш метаданных процедур и функция связан с их именами в базе данных. Например,
две внешние функции с разными именами, но одинаковыми точками входа, будут разными
экземплярами IExternalFunction. Точка входа состоит из имени внешнего модуля и имени
под которым зарегистрирована фабрика. Как это можно использовать покажем позже.

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


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