Выделение памяти в UDF
Выделение памяти в UDF
В BLOB поле хранится XML-ка. Есть функция udf-ки, которая определяет, попадает ли содержимое блоба под заданный фильтр. Фильтр так же передается как блоб. На данный момент не нравится то, что фильтр каждый раз парсится заново при очередном вызове функции. Хочется, чтобы один раз в udf-ке он распарсился, куда-нибудь сохранился и лежал бы там, пока его принудительно не освободят. Собственно, вопрос - можно ли выделить память в udf-ке, передать наружу в хранимую процедуру указатель, который потом использовать при дальнейших вызовах в рамках отработки этой процедуры?
PS: faq и поиск уже курил...
IB 7.5, UDF - Visual C++
PS: faq и поиск уже курил...
IB 7.5, UDF - Visual C++
Может имеет смысл сделать что-то вроеде кэша для распарсенных фильтров? Наличие в кэше проверять хэшем
. Кэш фиксированного размера с вытеснением. А то ведь можно и не дождаться принудительного освобождения... А так универсальная функция -- вызывай откуда хочешь без оглядки на порядок вызова.
С указателем или хэндлом можно пролететь, мало ли что за время после вызова функции распарсивания произошло. Сильно зависит от поведения сервера.

С указателем или хэндлом можно пролететь, мало ли что за время после вызова функции распарсивания произошло. Сильно зависит от поведения сервера.
Re: Выделение памяти в UDF
Может, немного "не в кассу", но всё же.Dmitriy_S писал(а):Хочется, чтобы один раз в udf-ке он распарсился, куда-нибудь сохранился и лежал бы там, пока его принудительно не освободят.
Почему бы не парсить фильтры при их создании/изменении, и хранить вместе с нераспарсенными, а в UDF передавать уже распарсеный (типа как BLR для PSQL)?
Да собственно, очевидно, как и предлагал Slavik, надо будет ваять хэш-мэп. А известно ли в какой момент подгружается dll udf-ки, а самое главное, когда она выгружается?kdv писал(а):можно, но никто не гарантирует, что в одном треде к переменной обратятся два или больше коннектов. В рамках одной процедуры может и прокатит.
2 WildSery, вряд ли такое получится, потому что для XPath должна быть задействована стандартная библиотека, а вызов идет через jdbc.