|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
Поимел нужду и желание написать BLOB фильтр для базы, работающей под Firebird 3.0.2 (64, Windows). Внимательно ознакомившись с а) Руководством по языку SQL СУБД Firebird 3.0 (2017); б) Набором fbudf.dll, fbudf.sql из поставки Firebird 3.0; в) Статьей "Как научиться писать UDF на Delphi за 21 минуту?" (1996, Олег Кукарцев) на ibase.ru; г) tbutil.pas (2002, Daniel Pereira Guimarаes and Anthony J. Caduto); д) blobsaveload.dpr (2007, KDV); e) ListUdf.dpr (2011, Мадорский Глеб Владимирович) - последнее по дате, что смог найти по теме UDF, кроме "Руководства", понял, что не могу получить ответы на следующие вопросы: 1) Каков интерфейс функции, реализующей BLOB фильтр? 2) Возможно ли использование 32-разрядной dll (контейнера udf) для 64-разрядного сервера? Посмотрел на прилагающиеся к серверу fbudf.dll и ib_udf.dll - они 64-разрядные. 3) Как правильно работать с передачей параметров BY DESCRIPTOR? Увидел в примерах структуры TDSC и TBlob - идею понял, но не уверен, что правильно. Тем более, что в 64-разрядном случае структуры наверняка будут иные. 4) Как правильно выделять память? Неужели все тем же malloc? А при 64 разрядах? Ответы на все эти, а так же на другие вопросы логично было бы найти в документе под названием "Спецификация интерфейса UDF и BLOB-фильтров для 32- и 64- разрядных серверов Firebird 3.0.2". Где бы его взять? Или хотя бы получить ответ на вопросы. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 21:46 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
shalamyansky, 1. Такой же как и UDF вроде. Примеров фильтров не видал ни разу. Есть внутреннии, но где их искать и помогут ли они хз 2. Нет 3. Вот тут подробно http://www.ibphoenix.com/files/Writing-External-Functions.pdf 4. ib_util_malloc Главный вопрос зачем это потребовалось? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 21:57 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
shalamyanskyОтветы на все эти, а так же на другие вопросы логично было бы найти в документе под названием "Спецификация интерфейса UDF и BLOB-фильтров для 32- и 64- разрядных серверов Firebird 3.0.2". Где бы его взять? Ты не поверишь, но из комплекта документации Interbase. "Developer’s Guide" и далее по ссылкам. Интерфейсы BLOB фильтров не менялись от начала времён. PS: А что, что 32-х и 64-х разрядные модули несовместимы в принципе это вообще базовые знания о функционировании компьютеров. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 22:11 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
Симонов Денис1. Такой же как и UDF вроде Так какой - такой же? Какие входные параметры, выходные, возвращаемое значение? Спасибо за документ! Сейчас буду смотреть внимательно, но уже сейчас вижу - 64-разрядной специфики там нет. А её не может не быть. Как же тогда быть? Симонов Денисib_util_malloc Из 64-разрядной ib_util.dll? А где её взять? Симонов ДенисГлавный вопрос зачем это потребовалось? Есть здоровенный набор текстов, точнее, XML-файлов, упакованных в ZIP-файлы, которые лежат в файловой системе. Засовывать все это хозяйство в fdb смысла никакого нет, база и так толстая, она представляет собой разобранные эти самые XML-файлы, аккуратно разложенные по таблицам. Но иногда клиенту необходимо получить исходный файл. Вот я и подумал использовать механизм BLOB фильтров, который увидел в "Руководстве". Было бы удобно: клиент обращается как бы к BLOB-полю, которое на самом деле пустое, отрабатывает фильтр, udf-функция идет в недалеко лежащий ZIP-файл, достает нужный XML, клиент получает "содержимое" BLOB. И не нужно создавать другой, кроме sql connect, механизм передачи данных клиенту. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 22:26 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
shalamyanskyИз 64-разрядной ib_util.dll? А где её взять? ты удивишься но входит в поставку 64-разрядного сервера Firebird ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 22:30 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovТы не поверишь, но из комплекта документации Interbase. "Developer’s Guide" и далее по ссылкам. Интерфейсы BLOB фильтров не менялись от начала времён. PS: А что, что 32-х и 64-х разрядные модули несовместимы в принципе это вообще базовые знания о функционировании компьютеров. И где же взять интерфейсы именно для 64-разрядных модулей? Тоже из начала времен? Кстати, теоретически разработчики могли бы сделать и переходник для загрузки 32-разрядных библиотек udf в 64-разрядный процесс. Но это чисто теоретически, конечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 22:31 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
shalamyansky, не надо нести чушь про переходники ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 22:32 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
shalamyanskyклиент обращается как бы к BLOB-полю, которое на самом деле пустое, отрабатывает фильтр, udf-функция идет в недалеко лежащий ZIP-файл, достает нужный XML, клиент получает "содержимое" BLOBЗачем здесь вообще BLOB не осилил понять я. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 22:34 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
shalamyanskyИ где же взять интерфейсы именно для 64-разрядных модулей? Тоже из начала времен?А интерфейсы одинаковые. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 22:35 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
YuRockЗачем здесь вообще BLOB не осилил понять я. Кстати, да... Можно и просто строку вернуть. Ну, чтобы в IBExpert'е красиво xml разглядывать :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 22:39 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
shalamyansky, если реальная цель только XML разглядывать в IBE то лучше от этой затеи отказаться ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 22:42 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
Симонов Денис, Да нет, реальная цель более серьезная, но Вы и YuRock правы, что-то я зря уперся в эти фильтры, можно и обычной udf обойтись, возвращающей строку. Спасибо всем за подсказки! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 22:50 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
shalamyansky, ну тут свою UDF писал каждый второй в этой ветке. А вот имеющих дело с фильтрами я ещё не видел. В руководстве по языку декларация фильтров описана, а вот где посмотреть пример живого фильтра я не знаю. Знаю только что внутри Firebird использует встроенные BLOB-фильтры. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 22:55 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
Понял, терра инкогнита, на страх и риск первопроходца. На риск завалить сервер. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 22:59 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
shalamyansky, хочешь новый экспериментов пиши сразу UDR ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2018, 23:06 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
shalamyansky, блоб-фильтр преобразует один тип блоба в другой. Например BLR в текст. Для твоей задачи они не нужны. UDF\UDR тебе в помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 01:13 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
Как-то давно реализовывал UDF библиотеку для FirebirdSQL v2.5, реализующую работу с "сырым" форматом и использующую, в т.ч., BLOb. Возможно, тебе помогут эти куски исходников: кусок raw.h Код: plaintext 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. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83.
Куски raw.cpp Код: plaintext 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. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133.
librawudf.sql Код: sql 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. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 10:14 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
hvladUDF\UDR тебе в помощь. На месте автора я бы тоже попытался найти обходные пути чтобы избежать создания временных блобов в базе. С UDR их, наверное, можно выкинуть из основной базы во временный файл, но всё равно это оверхэд. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 11:51 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, при чём тут блоб-фильтры ? Или ты опять о своём ? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 12:10 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
hvladпри чём тут блоб-фильтры ? При том, что они выглядят как возможность формировать BLOB по кусками на лету и сразу отдавать на клиента, без сохранения где-либо. Представь себе фильтр, преобразующий имя файла в его содержимое. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 12:15 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, тут фильтр ни к чему, это можно и с помощью UDR сделать. Фильтр тут скорее для прозрачного преобразования zip -> xml или xml -> zip, где zip и xml подтипы блоб зарегистрированные пользователем. Вот только нужно ли это ещё большой вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 12:20 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
Симонов Денистут фильтр ни к чему, это можно и с помощью UDR сделать. Можно. Представь себе файл на пару гигов. UDR сначала перекачает его в базу, отдаст blob id, а потом клиент будет его из базы выкачивать. В конце сервер этот мусор будет собирать. Как тебе эта картинка?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 12:36 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovhvladпри чём тут блоб-фильтры ? При том, что они выглядят как возможность формировать BLOB по кусками на лету и сразу отдавать на клиента, без сохранения где-либо. Представь себе фильтр, преобразующий имя файла в его содержимое.У блоб-фильтра на входе блоб. Предлагаешь имя файла в блоб засунуть ? Ну, можно попробовать. Расскажешь :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 12:40 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, а куда он денется, если ему встретится XML, который размером больше 32KB и в VarChar тупо не лезет ? P.S. > идет в недалеко лежащий ZIP-файл, достает нужный XML .....а я бы сразу ZIP передавал по сети, он же меньше, чем XML, значит по сети быстрее проскочит. Конечно, если на клиенте диск медленнее, чем скорость сети, то лучше распаковать на сервере.... Но все же едва ли. Совершенно безумный вариант - поднять на сервере p2p (например uTorrent BTSync), в БД держать хэши ZIP'ов с исходным XML-документом. SHA1 или MD5. Запросили файл, из БД прочитал хэш, сформировал magnet-ссылку - и пожалуйста, тащи хоть гигабайтный документ, асихнронно, и вовне процессов сервера и аппликухи. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 13:04 |
|
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
|
|||
---|---|---|---|
#18+
hvladПредлагаешь имя файла в блоб засунуть ? Предлагаю. В Windows максимальная длина имени файла - 4К. В Линуксе, кажется, 1К. С учётом UTF-8 - это нужно VARCHAR(16KBytes) или, если запрещаем работу с Windows файлопомойками - VARCHAR(4Kbytes) Учитывая, что на диске записи пакуются RLE и ничего уровня LZ до сих пор нету... У меня сейчас нет под руками того старого документа о двоичном формате rows в FB и я не помню максимальной эффективности RLE... 64:1 ? 16:1 ? но в общем, не очевидно, что с блобами обязательно будет хуже. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2018, 13:12 |
|
|
start [/forum/topic.php?fid=40&msg=39670328&tid=1561048]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 175ms |
0 / 0 |