|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
wadmanврубай откладку из дельфей Ошибка появляется нестабильно, при отладке все нормально. wadmanЕсли пытаешься модифицировать входные параметры, то получаешь по рукам. Не пытаюсь, могу поставить const function UserFunc(const Value1, Value2: PChar): PChar; cdecl; export; wadmanПочему не PAnsiChar? Delphi 2007, PChar = PAnsiChar DBConstructor может в блоке try криво обработано исключение, возникающее при выходе за пределы страницы выделенной памяти при копировании строки в буфер результата? Результирующая строка всегда обрезается на 255 символов hvladкак ф-ция объявлена на SQL ? В IBExpert'е так: Имя | Имя библиотеки | Точка входа | Входные аргументы | Возвращает |Механизм возвращения |FreeIt USERFUNC | UserUDF.dll | UserFunc | CSTRING(32000),CSTRING(80) | CSTRING(32000) | By Reference | Х ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 13:54 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
nicholaosВ IBExpert'е так:DDL покажи, не надо на IBE ссылаться... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 13:58 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
hvladDDL покажи, не надо на IBE ссылаться... DECLARE EXTERNAL FUNCTION USERFUNC CSTRING(32000), CSTRING(80) RETURNS CSTRING(32000) FREE_IT ENTRY_POINT 'UserFunc' MODULE_NAME 'UserUDF.dll'; ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 14:01 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
WildSeryМожет, ты не заметил, но диплома телепата у меня нет, и догадываться, что ты подразумевал, я не могу. А потому и задал простой и конкретный вопрос. На который ты до сих пор не ответил, и не уточнил дополнительными словами своё некорректное первое высказывание. То, на что ты в очередной раз сагрился: 18741936 DBConstructor"free" недоступен, есть только ib_util_malloc, который используется для передачи серверу результата по ссылке и затем, выделенная память подчищается сервером. было ответом на: 18741658 AriochDBConstructor, ...и вроде как ещё malloc/free нужно использовать специальные FB-шные Угадай с одного раза - о каких "FB-шные функциях malloc/free" шла речь? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 14:16 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
nicholaos, база utf? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 14:20 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
wadman, нет, WIN1251 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 14:25 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
nicholaos, не понятно... Вы описываете udf функцию в базе с параметрами типа CSTRING, а саму функцию в библиотеке с параметрами PChar (по сути, VARCHAR). Вы, при этом, завершаете строку "нулевым" символом, чтобы указать серверу конец строки "си стринг". ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 14:26 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
DBConstructorс параметрами PChar (по сути, VARCHAR). PChar это совсем не VARCHAR. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 14:32 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
Hello, Dbconstructor! You wrote on 29 января 2016 г. 14:32:09: Dbconstructor> Вы описываете udf функцию в базе с параметрами типа CSTRING, а саму функцию в библиотеке с параметрами PChar (по сути, VARCHAR). какой пафосный бред! восхитительно! вася, ты зачем сюда пришел ваще? сидел бы на своём мыскулле. там твой бред не так заметен. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 14:33 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, перепутал "паскалевского" указателя на символ с типом строки. 20 лет не садился за Delphi, бывает... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 14:40 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
Мимопроходящий, у тебя опять оверхед говна? Сходи, просрись чтоль... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 14:41 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
nicholaos, ну код-то показывать будешь или это секрет? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 14:46 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
wadman, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 14:56 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
nicholaos, на ibase.ru есть статья, как работать со строками. Примеры вызова и ddl таблиц, с запросами? П.С. try except не нужны, не помогут. Тормоза добавляют только. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 15:19 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
Лениво разбирать код, ты на словах скажи, что надо, может выкинуть ее нах, эту УДФ и прямо на SQL сделать обертку? потом поправишь вызова с вызова УДФ на left join sp(...) on 1=1 нет тела, нет дела. (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 15:37 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
nicholaos, при попадании в наружный (пустой) блок except, result остаётся неопределённым (мусором ?) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 18:25 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
Ivan_Pisarevsky, Функция получает на вход новое значение параметра и название его типа, затем проверяет корректность нового значения согласно указанному типу. Для действительного числа, например, это унификация формата - запятая заменяется точной, экспоненциальная запись преобразуется в обычную. Если эту функцию еще можно попытаться перевести на SQL, то UDF падает еще иногда на MD5, которое не переведешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 18:28 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
nicholaosзатем проверяет корректность нового значения согласно указанному типу. А при опечатке в типе - падает с AV из-за неинициализированного res. Всё логично. Ну или, как сказал, Влад, роняет сам движок возвращая ему неинициализированный указатель. Что и наблюдается. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 18:38 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
Hello, Nicholaos! You wrote on 29 января 2016 г. 18:38:05: Nicholaos> UDF падает еще иногда на MD5используете CryptoAPI, или самописная функция? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 18:38 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, проверка на то, что это именно один из 4х типов происходит в процедуре SQL из которой вызывается функция. hvlad, да, получается, что мусор, но 1. для integer и timestamp используется def-преобразования, безопасные 2. для real со сложной логикой есть еще блок try..except с присваиванием значения при неудаче 3. для строки просто копирование На всякий случай я поменял UDF так, чтобы гарантированно вылетал в пустой except без присваивания значения и прогнал в цикле 100000 раз. Успешно. Мимопроходящий, используется этот модуль: https://github.com/rofl0r/KOL/blob/master/units/ics/MD5.pas ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 18:54 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
nicholaosНа всякий случай я поменял UDF так, чтобы гарантированно вылетал в пустой except без присваивания значения и прогнал в цикле 100000 раз. Успешно. Ты понимаешь, что не инициализированные переменные коварны?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 18:56 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
Hello, Nicholaos! You wrote on 29 января 2016 г. 18:58:40: Nicholaos> используется этот модуль: > https://github.com/rofl0r/KOL/blob/master/units/ics/MD5.pas он там злоупотребляет динамическими массивами и паскалёвыми строками. я бы в таком виде его в UDF тащить не стал. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 19:02 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, понимаю, но не могу придумать ситуацию, при которой мы попадем пустой except И это не объясняет, почему иногда падает на MD5, которая написана так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 19:03 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
nicholaosэто не объясняет, почему иногда падает на MD5, которая написана так Я бы на твоём месте изменил тип входного параметра у MakeResultString() на String и убрал приведение к PChar на вызовах. Ибо это создаёт неопределённость времени жизни временных переменных. PS: Поведение StrLen() при передаче ей nil я тоже не берусь предсказать. PPS: Значения параметров в файл лога тебе ничто не мешает писать самостоятельно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 19:17 |
|
Трассировка вызова UDF в Firebird 2.5
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Спасибо за советы. Dimitry SibiryakovPPS: Значения параметров в файл лога тебе ничто не мешает писать самостоятельно. Конечно, без проблем можно писать в файл или в бд в автономной транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2016, 21:02 |
|
|
start [/forum/topic.php?fid=40&msg=39158924&tid=1562367]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 147ms |
0 / 0 |