Subject RE: [firebird-support] Upgrade Firebird 1.5.3 to 2.5.4 - function F_STRINGLENGTH is not defined
Author Helen Borrie
At 07:31 a.m. 8/08/2015, 'stwizard' stwizard@... [firebird-support] wrote:
>Correction:
>
>
>
>I met to say I then installed FreeAdhocUDF not FreeUDFLib library.

You said:
>I verified that the function is defined with the following:
>
>select * from rdb$functions where upper(rdb$function_name) = 'F_STRINGLENGTH'
>
>
>It return one record with the following values:
>
>RDB$FUNCTION_NAME: F_STRINGLENGTH
>
>RDB$FUNCTION_TYPE: 0
>
>RDB$QUERY_NAME: <Empty String>
>
>RDB$DESCRIPTION: <null>
>
>RDB$MODULE_NAME: FreeUDFLib
>
>RDB$ENTRYPOINT: StringLength
>
>RDB$RETURN_ARGUMENT: 0
>
>RDB$SYSTEM_FLAG: 0

Your declaration is pointing to a module FreeUDFLib. The library you have is FreeAdHocUDF.

So when you say you "installed" FreeAdhocUDF, what did you do, actually?

>And according to their website I also install the 4 icu*44FAU.dll files to the Bin folder.
>
>http://freeadhocudf.org/documentation_english/dok_eng_icu.html

Yeah, maybe. I can't say whether or not this is a good idea. But it shouldn't account for the "module name or entrypoint not found". On the other hand, having a function declaration pointing to a non-existent UDF library is certain to cause it.

>I’ve rebooted the computer too, so I’m at a loss

OK, when you restored your database, all of the old function declarations were restored too. So you need to list out the names of the functions as they are declared in the database (print them to a file, because you'll need to refer to them) and then drop all of the functions.

Now you want to write a script (or edit the one that probably comes with the FreeAdHocUDF library) so that you declare all the functions you want using the same function names as you used before with the FreeUDFLib module. The declared function names can be whatever one likes; in the declaration, the entrypoint has to be the function name as exported from the library. You'll need to use the existing names on the database end to avoid breaking things like stored procedures, constraints and application code that call them.

Also, put the library dll module into the ..$firebird$\UDF folder. But, when you make your declaration script, don't include the whole pathname for the module, only its actual file name, without the ".dll" extension.

Helen