powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / как объявить функцию с текстовым блобом utf8 в качестве параметра?
6 сообщений из 6, страница 1 из 1
как объявить функцию с текстовым блобом utf8 в качестве параметра?
    #38784812
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу объявить функцию с входным параметром "текстовый blob типа UTF8", чтобы в неё можно было передать блоб любого чарсета, и чтобы я в UDF получил уже UTF8.

Код: sql
1.
2.
3.
4.
DECLARE EXTERNAL FUNCTION F
    BLOB sub_type 1 character set utf8
    RETURNS INTEGER BY VALUE
    ENTRY_POINT 'F' MODULE_NAME 'M';


Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 2, column 10.
sub_type.

С varchar работает:
Код: sql
1.
2.
3.
4.
DECLARE EXTERNAL FUNCTION F
    VARCHAR(100)
    RETURNS INTEGER BY VALUE
    ENTRY_POINT 'F' MODULE_NAME 'M';


Код: sql
1.
2.
3.
4.
DECLARE EXTERNAL FUNCTION F
    VARCHAR(100) character set utf8
    RETURNS INTEGER BY VALUE
    ENTRY_POINT 'F' MODULE_NAME 'M';


И так работает:
Код: sql
1.
2.
3.
4.
DECLARE EXTERNAL FUNCTION F
    BLOB
    RETURNS INTEGER BY VALUE
    ENTRY_POINT 'F' MODULE_NAME 'M';


FB 2.5.3
...
Рейтинг: 0 / 0
как объявить функцию с текстовым блобом utf8 в качестве параметра?
    #38787118
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Типа в трекер?
...
Рейтинг: 0 / 0
как объявить функцию с текстовым блобом utf8 в качестве параметра?
    #38787443
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

в udf ты получаешь доступ к двоичному содержимому блоба, поэтому никакого utf и вообще чарсетов там нет и быть не может.
...
Рейтинг: 0 / 0
как объявить функцию с текстовым блобом utf8 в качестве параметра?
    #38787468
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

Я в dll хочу получить текст в UTF8, а не в том в чём передали.
Придётся или кому-то сделать как положено, чтобы можно было написать так:
Код: sql
1.
SELECT F(RDB$DESCRIPTION) FROM RDB$RELATIONS

или кому-то другому миллион раз кастовать тип параметра к чему нужно:
Код: sql
1.
SELECT F(CAST(RDB$DESCRIPTION AS BLOB SUB_TYPE TEXT CHARACTER SET UTF8)) FROM RDB$RELATIONS


Вместо F может быть любая функция для работы со строками большой длины, например которая считает кол-во вхождений подстроки, или просто пишет её куда-нибудь, не важно.
...
Рейтинг: 0 / 0
как объявить функцию с текстовым блобом utf8 в качестве параметра?
    #38788631
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

интерфейс у блоба внутри udf не имеет никакой информации о подтипе блоба, чарсете, и прочем. Там есть только общая информация, и ссылки на твои GetSegment/PutSegment, которые возвращают или передают ДВОИЧНУЮ информацию.
В клиентском API, разумеется, информация о подтипе и чарсете есть. Но ее внутри udf ты использовать никак не можешь. Увы, облом.

Так что максимум на что можешь расчитывать - это на Feature Request. Хотя я сомневаюсь, что тебе кто-нибудь будет внутри udf перекодировать эти сегменты. Так что все равно, даже если получишь (в будущем) информацию о чарсете блоба в udf, то будешь сам перекодировать.
...
Рейтинг: 0 / 0
как объявить функцию с текстовым блобом utf8 в качестве параметра?
    #38788815
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

У варчаров чарсет в udf тоже не передаётся, но с ними вышеописанной проблемы нет.
А почему её нет? Потому что варчары перед передачей параметра в udf переводятся в чарсет указанный при декларировании функции.
И для блобов не нужно чарсет передавать. Нужно дать возможность указать желаемый чарсет при создании функции, а движок пусть переводит в этот желаемый чарсет, как он делает это для блобов в хранимках.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / как объявить функцию с текстовым блобом utf8 в качестве параметра?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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