powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Internal и external function с одинаковым названием
21 сообщений из 71, страница 3 из 3
Internal и external function с одинаковым названием
    #39697335
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ежу непонятно, зачем нужны методы, которые не используются, чтобы путаться проще было?

у Явы и совр. Delphi у объектов есть функция getHash().
Думаю и тут можно было бы сделать ф-ию типа getFormatHash() и дёргать getOffset только для новых форматов.

Впрочем, как сделано - так сделано.
...
Рейтинг: 0 / 0
Internal и external function с одинаковым названием
    #39697337
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисполучение указателей по смещениям будет медленней чем через фиксированную структуру

Не факт. Через фиксированную структуру указателей на современных процессорах (у которых мегабайтные кэши на порядок быстрее ОЗУ) будет не хуже. Вспомни, например, как статически линкованные DLL подсоединяются на ассемблерном уровне при загрузке EXE.

И в любом случае, всё снова упирается в вопрос "что мы хотим сделать?"

Если максимально быстрый интерфейс на C++ - это один выбор.
Если кросс-язычный интерфейс с максимально лёгкой интеграцией в широкий спектр языков - то другой.
...
Рейтинг: 0 / 0
Internal и external function с одинаковым названием
    #39697416
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochЕжу непонятно, зачем нужны методы, которые не используются, чтобы путаться проще было?

в каком смысле не используются? Хочешь используй, хочешь нет.

Arioch,

давай так. Ты попробуешь написать маленькую UDR на Delphi. Доведёшь её до работоспособного состояния, а потом продолжим беседу.
Можешь даже с кусками кода, которые у тебя нарекания вызвали. А то у меня такое ощущение, что "Пастернака не читал, но осуждаю".
...
Рейтинг: 0 / 0
Internal и external function с одинаковым названием
    #39697554
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисТы попробуешь написать маленькую UDR на Delphi. Доведёшь её до работоспособного состояния, а потом продолжим беседу.
+1 и чтобы среди передаваемых типов ещё и блоб был :)
...
Рейтинг: 0 / 0
Internal и external function с одинаковым названием
    #39697572
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afgm,

тебе для каких целей? Если хочешь сам разобраться пиши, поможем
...
Рейтинг: 0 / 0
Internal и external function с одинаковым названием
    #39697591
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денистебе для каких целей? Если хочешь сам разобраться пиши, поможем
Попросил блобы, чтобы усугубить ситуацию "удобства" API.
Я уже делал несколько подходов и не восторге от нового API. Постоянно не кричу на всех углах, только потому, что не знаю как сделать лучше. Была благая идея сделать обёртку с кодогенерацией, но каждый раз вскипаю.
С блобами, кстати, как-то сразу не задалось. В Java обёртке проблемы. Тикет висит. Если не путаю, то в первой версии .net-обёртки они не поддерживались.

Немного в сторону.
Если уж продолжать тему API для Delphi/Lazarus изложу своё видение.
Нужно сделать кодогенератор из файла с простым описанием упрощённого SQL для UDR.
По нему генерируем скрипт подключения к БД и базовый класс самой UDR.
В коде наследуемся и реализуем методы. + Нужны хелперы для блобов (и теперь для decfloat).
Для реализации всего этого нужны примеры нв Delphi со всеми видами вызовов (функция, процедура, триггер) и типов данных. Нужны все виды возврата (скаляр из функции, набор из процедуры).
Понятно, что "Делфи тут никто не знает", но вполне можно сделать костлявый прототип и силами сообщества допилить до ума, кода там немного.

PS. Почему вообще блобы. Это единственный тип данных, который больно обрабатывать на сервере. А городить огород, если всё влезло в хранимки, не очень хочется.
...
Рейтинг: 0 / 0
Internal и external function с одинаковым названием
    #39697599
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисв каком смысле не используются? Хочешь используй, хочешь нет

Это называется "угадайка".
Есть такая вешь, как single responsibility

Dimitry Sibiryakovвесь код Firebird игнорирует значения, возвращаемые getOffset() и getNullOffset()

Таким образом, писать эти функции бесполезно - и включать в интерфейс, который должен был быть написан 3-й стороной - не нужно.
...
Рейтинг: 0 / 0
Internal и external function с одинаковым названием
    #39697624
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afgm,

ну справедливости ради. В UDF с блобами работать ничуть не удобнее чем в UDR.
Я сейчас активно копаю тему UDR и собираюсь написать мануал по их написанию на Delphi/Lazarus. Уже кое-что написано. Но очень много время занимают исследования, ибо эта тема практически не документирована. Во многих случаях код для написания одной UDR функции можно существенно подсократить до такой степени, что будет не сильно больше чем для UDF.

decfloat можно перевести в Bcd если что, там есть специальных хелпер.

Arioch,

давай ты не будешь комментировать то в чём даже не пытался разобраться. Вот Dimitry Sibiryakov реально трогал новый API и имеет негативный опыт, поэтому его комментарии интересны. Ты же просто вводишь форумчан в заблуждения.
...
Рейтинг: 0 / 0
Internal и external function с одинаковым названием
    #39697639
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисЯ сейчас активно копаю тему UDR и собираюсь написать мануал по их написанию на Delphi/Lazarus. Уже кое-что написано. Но очень много время занимают исследования, ибо эта тема практически не документированаПрекрасно ! Обращайся, если нужно - может получится помочь
...
Рейтинг: 0 / 0
Internal и external function с одинаковым названием
    #39697651
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисЯ сейчас активно копаю тему UDR и собираюсь написать мануал по их написанию на Delphi/Lazarus. Уже кое-что написано.
Может github?
...
Рейтинг: 0 / 0
Internal и external function с одинаковым названием
    #39697666
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afgm,

выложу, но при условии не ссылаться туда пока всё не будет доделано. А то ещё скажут, что я плохому научил. Сам ещё разбираюсь.

hvlad,

спасибо. Куда лучше вопросы задавать?
...
Рейтинг: 0 / 0
Internal и external function с одинаковым названием
    #39697672
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисКуда лучше вопросы задавать?Пиши мылом, а там посмотрим :)
...
Рейтинг: 0 / 0
Internal и external function с одинаковым названием
    #39697682
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисвыложу, но при условии не ссылаться туда пока всё не будет доделано. А то ещё скажут, что я плохому научил. Сам ещё разбираюсь.
Ок. Мыло в профиле.

Ну и критика Влада, даже на то "что удалось", тоже желательна.
...
Рейтинг: 0 / 0
Internal и external function с одинаковым названием
    #39697703
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисВ UDF с блобами работать ничуть не удобнее чем в UDR.

Вообще-то удобнее. Тебе в UDF сразу дают хэндл блоба и функции работы с ним, а в UDR для
получения и того и другого придётся сделать несколько прыжков в ширину.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Internal и external function с одинаковым названием
    #39698252
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисAriochсколько у нас Delphi-библиотек на тупом неправильном устаревшем API тянущемся с прошлого века

это кто тебе сказал что это API тупое и устаревшее? Плюнь ему в глаз.

Вы это, продолжайте писать что-ли. Так увлекательно читать.

Подброшу на вентилятор.
...
Рейтинг: 0 / 0
Internal и external function с одинаковым названием
    #39698284
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коваленко Дмитрий,

казалось бы причём тут новое API vs старое? Проблемы fbclient если они есть общие для обоих.
И какое отношение имеет провайдер к обсуждаемому далее вопросу UDR vs UDF?
...
Рейтинг: 0 / 0
Internal и external function с одинаковым названием
    #39698774
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afgm,

маленький эксперимент с BLOB. Пока не сильно напрягался с оптимизацией

Код: sql
1.
2.
3.
4.
5.
6.
create procedure split (
   txt blob sub_type text character set utf8,
   delimiter char(1) character set utf8 = ','
) returns (id integer)
external name 'myudr!split'
engine udr;



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with t as (
  select CODE_DICTIONARY
  from WORD_DICTIONARY_EXT
  fetch first 1000000 rows only
)
select
  count(*) as cnt,
  min(ids.id) as min_id,
  max(ids.id) as max_id
from split((select list(CODE_DICTIONARY) from t), ',') ids



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
План
PLAN (T WORD_DICTIONARY_EXT NATURAL)
PLAN (IDS NATURAL)

------ Информация о производительности ------
Время подготовки запроса = 0ms
Время выполнения запроса = 3s 844ms
Среднее время на получение одной записи = 3 844,00 ms
Current memory = 558 906 040
Max memory = 559 127 128
Memory buffers = 32 768
Reads from disk to cache = 0
Writes from cache to disk = 668
Чтений из кэша = 1 036 411

Код: plaintext
1.
CNT	MIN_ID	MAX_ID
1000000	1	1007014

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with t as (
  select CODE_DICTIONARY
  from WORD_DICTIONARY_EXT
  fetch first 1000000 rows only
)
select
  count(*) as cnt,
  min(t.CODE_DICTIONARY) as min_id,
  max(t.CODE_DICTIONARY) as max_id
from t



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
План
PLAN (T WORD_DICTIONARY_EXT NATURAL)

------ Информация о производительности ------
Время подготовки запроса = 0ms
Время выполнения запроса = 937ms
Среднее время на получение одной записи = 937,00 ms
Current memory = 558 874 496
Max memory = 559 127 128
Memory buffers = 32 768
Reads from disk to cache = 0
Writes from cache to disk = 0
Чтений из кэша = 1 032 409

Код: plaintext
1.
CNT	MIN_ID	MAX_ID
1000000	1	1007014

Код: sql
1.
2.
3.
4.
5.
6.
7.
with t as (
  select CODE_DICTIONARY
  from WORD_DICTIONARY_EXT
  fetch first 1000000 rows only
)
select char_length((select list(CODE_DICTIONARY) from t))
from rdb$database



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
План
PLAN (T WORD_DICTIONARY_EXT NATURAL)
PLAN (RDB$DATABASE NATURAL)

------ Информация о производительности ------
Время подготовки запроса = 0ms
Время выполнения запроса = 1s 610ms
Среднее время на получение одной записи = 1 610,00 ms
Current memory = 559 027 432
Max memory = 559 127 128
Memory buffers = 32 768
Reads from disk to cache = 0
Writes from cache to disk = 668
Чтений из кэша = 1 034 417

Код: plaintext
1.
CHAR_LENGTH
6896780
...
Рейтинг: 0 / 0
Internal и external function с одинаковым названием
    #39698838
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, вполне себе шустро.
...
Рейтинг: 0 / 0
Internal и external function с одинаковым названием
    #39698873
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afgm,

и это ещё сделано максимально просто без попыток оптимизации. Сейчас весь блоб тупо посегментно загоняется TStringStream, а затем делается Stream.DataString.Split([delimiter], ...), и уже по полученному массиву возвращаются данные. Из-за этого в частности не работает конвеерная выдача результатов. По идее можно было читать и обрабатывать сегменты по мере выдачи результата, и чем то более эффективным чем встроенный split
...
Рейтинг: 0 / 0
Internal и external function с одинаковым названием
    #39701776
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Адриано ответил, что ALTER UDF в PSQL-функцию - это совершенно нормально и так и задумывалось. Тем не менее, его не смущает, что при попытке дропнуть функцию - сообщается, что это таки UDF.

Денис Симонов, такой финтифлюх отражен в документации? Я что-то не припоминаю.
...
Рейтинг: 0 / 0
Internal и external function с одинаковым названием
    #39701886
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax,

почитал. Там какие-то споры что есть UDF. Формально Адриано прав все функции определённые пользователем являются UDF.

Но для тех кто работал с Firebird/Interbase N лет UDF это именно внешние функции определённые как DECLARE EXTERNAL FUNCTION. Если я правильно понимаю терминологию, то сейчас их надо называть Legacy UDF (тем более что в 4.0 уже deprecated).

Возможно в документации надо подправить терминологию.

UDF - User Defined Function - любая функция определённая пользователем
UDR - User Defined Routine - любая подпрограмма определённая пользователем (функция/процедура/триггер)

Функции бывают:
- встроенными (IIF, CHAR_LENGTH ...)
- определённые пользователем (UDF)

UDF бывают:
- внешние
- внутренние (или PSQL функции)

Внешние UDF бывают:
- Legacy (DECLARE EXTERNAL FUNCTION)
- обычные (CREATE FUNCTION ... EXTERNAL)

CyberMaxДенис Симонов, такой финтифлюх отражен в документации?

нет
...
Рейтинг: 0 / 0
21 сообщений из 71, страница 3 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Internal и external function с одинаковым названием
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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