Проблема с UDF при переходе с IB7.1 на FB1.5

Совместимость InterBase, Firebird, Yaffil между собой и по версиям

Модераторы: kdv, Alexey Kovyazin

Ответить
jFinder
Сообщения: 10
Зарегистрирован: 09 июл 2005, 12:27

Проблема с UDF при переходе с IB7.1 на FB1.5

Сообщение jFinder » 17 дек 2005, 13:14

Добрый день!
У меня задача перевести стороннюю базу с Interbase 7.1 sql dialect 1 на Firebird 1.5.3 sql dialect 1.

Проблема возникла с UDF(исходников нет) которая объявлена так :

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

DECLARE EXTERNAL FUNCTION GETTIME
    DATE
RETURNS DATE
ENTRY_POINT 'GetTime' MODULE_NAME 'timefn'
Соответственно под IB 7.1 запрос select gettime('02-dec-2005 4:53') from rdb$database проходит на ура, а вот под Firebird выдаёт ошибку:

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

Unsuccessful execution caused by system error thet does not preclude successful execution of subsequent statements.
return data type not supported.
По tdumpу посмотрел dll импортирует след. функции (это только часть функций, которая мне показалось интересной):
Imports from gds32.dll
isc_decode_date
isc_encode_date
Imports from borlndmm.dll
__fastcall Borlndmm::SysFreeMem(void *)
__fastcall Borlndmm::SysGetMem(int)
__fastcall Borlndmm::SysReallocMem(void *, int)
Соответственно вопрос. Возможно ли (и если возможно, то как) заставить корректно работать данную UDF под Firebird?

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 19 дек 2005, 10:18

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

DECLARE EXTERNAL FUNCTION F_ADDMONTH
    DATE,
    INTEGER
RETURNS DATE
ENTRY_POINT 'AddMonth' MODULE_NAME 'FreeUDFLib.dll'

SELECT F_ADDMONTH ("NOW", 1)
  FROM RDB$DATABASE
Работает прекрасно.
На FB 1.5.2
За 1.5.3 даже не сомневаюсь

jFinder
Сообщения: 10
Зарегистрирован: 09 июл 2005, 12:27

Сообщение jFinder » 19 дек 2005, 11:04

hvlad писал(а):

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

DECLARE EXTERNAL FUNCTION F_ADDMONTH
    DATE,
    INTEGER
RETURNS DATE
ENTRY_POINT 'AddMonth' MODULE_NAME 'FreeUDFLib.dll'

SELECT F_ADDMONTH ("NOW", 1)
  FROM RDB$DATABASE
Работает прекрасно.
На FB 1.5.2
За 1.5.3 даже не сомневаюсь
Вы, простите, кому и на какой вопрос отвечаете?

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

Сообщение kdv » 19 дек 2005, 12:19

я не знаю, как дальше отвечать, т.к. любой ответ воспринимается в штыки. Продолжать в том же духе не намерен, ибо у меня зачешутся удалить этот топик целиком.

Пока что спрошу
1. есть ли абсолютная уверенность, что на клиенте файл сообщений об ошибках (firebird.msg) соответствует серверу, а не берется, скажем, от Interbase? (interbase.msg)

2. зачем данной udf нужен borlndmm.dll?

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 19 дек 2005, 13:27

jFinder писал(а):Вы, простите, кому и на какой вопрос отвечаете?
А что - здесь есть более одного спрашивающего с более чем одним вопросом ?
Для танкистов объясню - у FB нет абсолютно никаких проблем с правильно написанными UDF, возвращающими DATE.
Understand ?

jFinder
Сообщения: 10
Зарегистрирован: 09 июл 2005, 12:27

Сообщение jFinder » 19 дек 2005, 13:57

kdv писал(а): 1. есть ли абсолютная уверенность, что на клиенте файл сообщений об ошибках (firebird.msg) соответствует серверу, а не берется, скажем, от Interbase? (interbase.msg)
Да. Абсолютная, т.к. после удаления файла firebird.msg сообщение об ошибке поменялось: can't format message ... error code 169
kdv писал(а): 2. зачем данной udf нужен borlndmm.dll?
В первом сообщении данного топика я написал, что исходников библиотеки timefn у меня нет. Соответственно, то что она импортирует данные функции я узнал с помощью tdump. Из общей эрудиции рискну предположить, что она написана на Delphi (тем более, что такая подстрока присутствует в бинарнике) с использованием типа данных string и модуля ShareMem.pas Зачем так сделано мне не ведомо. Я знаю только лишь, что под Interbase 7.1 она работает, а под Firebird валится с ошибкой. См. опять первое сообщение данной темы.

К чему указывать мне на FAQ по переходу на SQL Dialect 3 (когда о данном диалекте даже речи не идёт), равно как приводить код с FreeUDFLib (который да, наверняка работает, только вот не по теме совершенно) я не понимаю. Я не прав? Или Вы считаете, что если сам "великий и ужасный" dimademoru чиркнул пару строк в ответ на неизвестно какой вопрос, то проблема тут же разрешиться и тему можно закрывать?

Ответы воспринимаются в штыки потому как показывают невнимательность в прочтении исходного сообщения, т.о. отвечающие демонстрируют неуважение к спрашивающему.

jFinder
Сообщения: 10
Зарегистрирован: 09 июл 2005, 12:27

Сообщение jFinder » 19 дек 2005, 14:00

hvlad писал(а): Для танкистов объясню - у FB нет абсолютно никаких проблем с правильно написанными UDF, возвращающими DATE.
А для пальцастых повторяю, что вопрос был:
jFinder писал(а): Возможно ли (и если возможно, то как) заставить корректно работать данную UDF под Firebird?

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

Сообщение kdv » 19 дек 2005, 14:26

я опять не пойму, к чему и откуда такие претензии?
Если исходников UDF нет, то тогда Я ТОЖЕ НЕ ЗНАЮ В ЧЕМ ПРОБЛЕМА.
Я знаю только лишь, что под Interbase 7.1 она работает, а под Firebird валится с ошибкой. См. опять первое сообщение данной темы.
что такое "под"? На разных серверах, на одном сервере?
Или Вы считаете, что если сам "великий и ужасный" dimademoru чиркнул пару строк в ответ на неизвестно какой вопрос, то проблема тут же разрешиться и тему можно закрывать?
Абсолютно неинтересно пытать вопросами - а что же ты все таки пытался сделать, чтобы оно заработало? Другие функции в этой udf есть, пробовал, работают, нет?

Кому вообще нужно получить ответ на вопрос - мне, Владу, еще кому?
Нам не надо...

jFinder
Сообщения: 10
Зарегистрирован: 09 июл 2005, 12:27

Сообщение jFinder » 19 дек 2005, 15:33

Прошу прощения. Спасибо всем за участие. Тему можно закрывать/удалять.

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

Сообщение kdv » 19 дек 2005, 15:37

проблема решена самостоятельно? если не хочется вдаваться в подробности, можно об этом узнать?

jFinder
Сообщения: 10
Зарегистрирован: 09 июл 2005, 12:27

Сообщение jFinder » 26 дек 2005, 11:11

Извиняюсь за задержку с ответом. На форуме бываю крайне редко и только если сталкиваюсь с серьёзной проблемой.
Связался с разработчиками этой "программно-аппаратной головной боли приобретённой за собственные деньги" именуемой звучным словом Apacs, в состав которой входит данная злосчастная библиотека. Ответ был крайне некомпетентен и содержал категорический отказ переписать её корректно, чтоб заработала с Firebird.
По моему скромному предположению программист, написавший сее творение аж 1998(!) году (дата создания файла) давно уволился, а у нынешних разработчиков банально либо не хватает опыта, либо просто лень копаться в старом коде.
Проблема решилась тем, что я написал собственную библиотеку, которая корректно работает и под Interbase и под Firebird, реализовав в ней требуемую функциональность. И подключил её вместо оригинальной.

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

Сообщение kdv » 26 дек 2005, 13:22

мда. В принципе, у меня до сих пор с любой версией IB/FB/YA работает несколько либ, писанных мной еще в 1997 году. Но я хоть знал как их правильно писать...

А вот по поводу тиражируемо-продаваемых решений, я смотрю, все больше и больше плохих примеров. Выпускается нечто, и начинает продаваться. И продается лет по 5-8 вообще без переделок, под одну и ту же версию IB. Конечно, есть хорошие системы, которые и на IB 4.x работают, но вот процент плохих систем начинает перевешивать...
И "плохих" именно в том смысле, что "разработчики" почему-то вообще ничего не могут поделать ни с глюками, ни с плохой производительностью, ни с чем. Прямо хоть "черный список" открывай...

basile
Сообщения: 26
Зарегистрирован: 10 июл 2005, 02:28

Сообщение basile » 26 дек 2005, 15:31

kdv писал(а):...И "плохих" именно в том смысле, что "разработчики" почему-то вообще ничего не могут поделать ни с глюками, ни с плохой производительностью, ни с чем. Прямо хоть "черный список" открывай...
факт, факт. некомпетнтность, а более того нежелание учиться, а когда начинаешь говорить, что мол господа, у вас тут-то плохо, на тебя посмотрят с высока, ну или в лучшем случае пожалеют, ах да несчатненький, но делать все равно ничего не станут.

Ответить