Страница 1 из 1
Выделение памяти в UDF
Добавлено: 03 июл 2007, 20:43
Dmitriy_S
В BLOB поле хранится XML-ка. Есть функция udf-ки, которая определяет, попадает ли содержимое блоба под заданный фильтр. Фильтр так же передается как блоб. На данный момент не нравится то, что фильтр каждый раз парсится заново при очередном вызове функции. Хочется, чтобы один раз в udf-ке он распарсился, куда-нибудь сохранился и лежал бы там, пока его принудительно не освободят. Собственно, вопрос - можно ли выделить память в udf-ке, передать наружу в хранимую процедуру указатель, который потом использовать при дальнейших вызовах в рамках отработки этой процедуры?
PS: faq и поиск уже курил...
IB 7.5, UDF - Visual C++
Добавлено: 03 июл 2007, 23:30
kdv
можно, но никто не гарантирует, что в одном треде к переменной обратятся два или больше коннектов. В рамках одной процедуры может и прокатит.
Добавлено: 04 июл 2007, 09:56
Slavik
Может имеет смысл сделать что-то вроеде кэша для распарсенных фильтров? Наличие в кэше проверять хэшем

. Кэш фиксированного размера с вытеснением. А то ведь можно и не дождаться принудительного освобождения... А так универсальная функция -- вызывай откуда хочешь без оглядки на порядок вызова.
С указателем или хэндлом можно пролететь, мало ли что за время после вызова функции распарсивания произошло. Сильно зависит от поведения сервера.
Re: Выделение памяти в UDF
Добавлено: 04 июл 2007, 12:00
WildSery
Dmitriy_S писал(а):Хочется, чтобы один раз в udf-ке он распарсился, куда-нибудь сохранился и лежал бы там, пока его принудительно не освободят.
Может, немного "не в кассу", но всё же.
Почему бы не парсить фильтры при их создании/изменении, и хранить вместе с нераспарсенными, а в UDF передавать уже распарсеный (типа как BLR для PSQL)?
Добавлено: 05 июл 2007, 14:39
Dmitriy_S
kdv писал(а):можно, но никто не гарантирует, что в одном треде к переменной обратятся два или больше коннектов. В рамках одной процедуры может и прокатит.
Да собственно, очевидно, как и предлагал Slavik, надо будет ваять хэш-мэп. А известно ли в какой момент подгружается dll udf-ки, а самое главное, когда она выгружается?
2 WildSery, вряд ли такое получится, потому что для XPath должна быть задействована стандартная библиотека, а вызов идет через jdbc.
Добавлено: 06 июл 2007, 01:18
kdv
А известно ли в какой момент подгружается dll udf-ки, а самое главное, когда она выгружается?
подгружается - в момент первого обращения к udf.
выгружается - в момент закрытия последнего коннекта, который обращался к udf.
p.s. xpath есть в виде udf на ibase.ru
Добавлено: 09 июл 2007, 12:28
Dmitriy_S
kdv писал(а):
подгружается - в момент первого обращения к udf.
выгружается - в момент закрытия последнего коннекта, который обращался к udf.
О, спасибо!
kdv писал(а):
p.s. xpath есть в виде udf на ibase.ru
Мне кажется более разумным xalan прикрутить.