Подскажите по UDF, плиз

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Подскажите по UDF, плиз

Сообщение Kotъ-Begemotъ » 07 дек 2007, 23:15

Вот берём firebird.conf Там есть параметр ExternalFileAccess который может быть или Full или None или Restrict Нигде не указан синтаксис. Вот хочу я поставить Restrict как это правильно написать?
ExternalFileAccess = Restrict 'c:\FireBird\ExtData' - так правильно? Через пробел после Restrict пути указываются?
Далее. Ладно, написал Full чтобы пока не заморачиваться. Хорошо. Пытаюсь подключить UDF идущие в комплекте - ib_udf.dll и fbudf.dll - делаю через IB Expert - открываю скприпт, выполняю, функции регистрируются в БД. Но работать не хотят! :( При попытке вызвать скажем ASCII_CHAR пишет что:
Invalid token.
invalid request BLR at offset 66.
function ASCII_CHAR is not defined.
module name or entrypoint could not be found.

Почему бы это? Объявлялась функция как:

Код: Выделить всё

DECLARE EXTERNAL FUNCTION ASCII_CHAR
    INTEGER
RETURNS CSTRING(1) FREE_IT
ENTRY_POINT 'IB_UDF_ascii_char' MODULE_NAME 'ib_udf';
Что-то неправильно? Насколько я понял, в случае указания Restrict в firebird.conf нужно с полным путём функцию указывать? А у меня там вообще Full стоИт... Почему не работает?!?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 08 дек 2007, 03:07

долбануться можно. при чем тут ExternalFILEAccess и UDF ???
как вы умудряетесь читать текст в firebird.conf рядом с параметрами, если путаете параметры от доступа к внешним таблицам и доступ к UDF?
А про udf все давно изложено в www.ibase.ru/ibfaq.htm

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Сообщение Kotъ-Begemotъ » 08 дек 2007, 03:36

kdv писал(а):долбануться можно. при чем тут ExternalFILEAccess и UDF ???
как вы умудряетесь читать текст в firebird.conf рядом с параметрами, если путаете параметры от доступа к внешним таблицам и доступ к UDF?
А про udf все давно изложено в www.ibase.ru/ibfaq.htm
Тьфу! Ну конечно же UdfAccess!!! Что ж я идиот по твоему что ли?!? А насчёт текста, так написано ,что если используется Restrict то нужно указать путь или несколько путей через ";" и все. А как это должно выглядеть нет примера :( Может через пробел, может надо какое-нибудь двоеточие поставить, вот я и спрашиваю...

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 08 дек 2007, 12:05

в любом случае
1. на faq я уже указал
2. менять в udfaccess НИЧЕГО не надо.

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Сообщение Kotъ-Begemotъ » 08 дек 2007, 15:27

kdv писал(а):в любом случае
1. на faq я уже указал
2. менять в udfaccess НИЧЕГО не надо.
В факе про firebird.conf не нашёл ничего конкретного :(
А насчёт менять не надо - как же, не надо... Когда там после установки Firebird вообще все закомментировано!!! Я поэтому и спрашиваю. Читаю Борри хочу попробовать примеры, там ASCII_CHAR используется. Пытаюсь подключить UDF - скрипт, регистрирующий функции выполняется без ошибок, функции появляются в списке функций (в IB Expert) а вот работать - не работают. Поэтому и спрашиваю...
А если в firebird.conf просто раскомментировать UdfAccess то там путь указывается относительный, от RootDirectory, как я понял? Так строка с RootDirectory тоже закомментирована :(

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 08 дек 2007, 18:04

Тебе в голову не приходила мысль, что кроме конфига, есть ещё некие умолчальные (default) значения?
И раскомментировать что-либо надо, только если ты хочешь получить значение параметра, отличное от умолчального.
Потому строки с вписанными дефолтовыми значениями и закомментированы.

По каждому параметру в самом firebird.conf дано исчерпывающее объяснение.
Пути могут задаваться как абсолютные, так и относительные, относительно RootDirectory.

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Сообщение Kotъ-Begemotъ » 08 дек 2007, 18:13

WildSery писал(а):Тебе в голову не приходила мысль, что кроме конфига, есть ещё некие умолчальные (default) значения?
И раскомментировать что-либо надо, только если ты хочешь получить значение параметра, отличное от умолчального.
Потому строки с вписанными дефолтовыми значениями и закомментированы.

По каждому параметру в самом firebird.conf дано исчерпывающее объяснение.
Пути могут задаваться как абсолютные, так и относительные, относительно RootDirectory.
Гм... Нет, к сожалению не в курсе :( А где можно эти параметры по-умолчанию узнать, подскажи, плиз? Что-то вроде уже поковырялся с FB по про эти умолчательные значения пока нигде не попадалось ссылок...

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 08 дек 2007, 19:38

умолчательные значения пока нигде не попадалось ссылок...
кто-то тормозит, очень сильно. умолчательные значения прописаны и закомментированы в конфиге.
умолчательное значение папки для UDF - подкаталог UDF сервера.
Разумеется, в факе про firebird.conf не написано, но там описано решение проблем при загрузке UDF.
у тебя скорее всего ib_util.dll не находится.

а вот что написано в firebird.conf:

# ----------------------------
# External Function (UDF) Paths/Directories
#
# UdfAccess may be None, Full or Restrict. If you choose
# Restrict, provide ';'-separated trees list, where UDF libraries
# are stored. Relative paths are treated relative to RootDirectory entry
# (see above). Default value 'Restrict UDF' provides the same restrictions
# as in FB 1.0. To specify access to specific trees, enum all required
# paths (for Win32 this may be something like 'C:\ExternalFunctions',
# for unix - '/db/extern;/mnt/extern').
#
# NOTE: THE EXTERNAL FUNCTION ENGINE FEATURE COULD BE USED TO COMPROMISE
# THE SERVER/HOST AS WELL AS DATABASE SECURITY!!
#
# IT IS STRONGLY RECOMMENDED THAT THIS SETTING BE USED TO LIMIT
# EXTERNAL FUNCTION LOCATIONS!
#
# Type: string (special format)
#
#UdfAccess = Restrict UDF

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Сообщение Kotъ-Begemotъ » 15 дек 2007, 03:28

2 kdv & WildSery
Спасибо! Действительно не пришло в голову об этих умолчания. По принципу - всё что явно не разрешено - запрещено. Просто закомментировал UdfAccess и всё заработало :) Хотя всё равно непонятно, почему, когда я раскомментировал UdfAccess и задал
Restrict Full тогда UDF функции не работали? Или в этом случае надо при объявлении функции полный путь указывать?

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 17 дек 2007, 07:25

Kotъ-Begemotъ писал(а):........ и задал
Restrict Full тогда UDF функции не работали? Или в этом случае надо при объявлении функции полный путь указывать?
офигенно :(
слово Restrict перевести?

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 17 дек 2007, 12:18

Да он просто очепятался, не придирайся.
С Full ситуёвина такая (если ничего не путаю). Для Restrict ты задаёшь конкретный разрешённый фолдер (относительно RootDir), и сервер знает, где брать.
А когда ты не указал его ни в конфиге (стоит Full), ни в объявлении фукнции, сервер, видимо, должен догадаться, где их искать?

Ответить