powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
61 сообщений из 61, показаны все 3 страниц
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670308
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поимел нужду и желание написать 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". Где бы его взять? Или хотя бы получить ответ на вопросы.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670310
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyansky,

1. Такой же как и UDF вроде. Примеров фильтров не видал ни разу. Есть внутреннии, но где их искать и помогут ли они хз

2. Нет

3. Вот тут подробно

http://www.ibphoenix.com/files/Writing-External-Functions.pdf

4. ib_util_malloc

Главный вопрос зачем это потребовалось?
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670318
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyanskyОтветы на все эти, а так же на другие вопросы логично было бы найти в документе под
названием "Спецификация интерфейса UDF и BLOB-фильтров для 32- и 64- разрядных серверов
Firebird 3.0.2". Где бы его взять?

Ты не поверишь, но из комплекта документации Interbase. "Developer’s Guide" и далее по
ссылкам. Интерфейсы BLOB фильтров не менялись от начала времён.

PS: А что, что 32-х и 64-х разрядные модули несовместимы в принципе это вообще базовые
знания о функционировании компьютеров.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670322
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис1. Такой же как и UDF вроде


Так какой - такой же? Какие входные параметры, выходные, возвращаемое значение?

Спасибо за документ! Сейчас буду смотреть внимательно, но уже сейчас вижу - 64-разрядной специфики там нет. А её не может не быть. Как же тогда быть?

Симонов Денисib_util_malloc

Из 64-разрядной ib_util.dll? А где её взять?

Симонов ДенисГлавный вопрос зачем это потребовалось?

Есть здоровенный набор текстов, точнее, XML-файлов, упакованных в ZIP-файлы, которые лежат в файловой системе. Засовывать все это хозяйство в fdb смысла никакого нет, база и так толстая, она представляет собой разобранные эти самые XML-файлы, аккуратно разложенные по таблицам. Но иногда клиенту необходимо получить исходный файл.

Вот я и подумал использовать механизм BLOB фильтров, который увидел в "Руководстве". Было бы удобно: клиент обращается как бы к BLOB-полю, которое на самом деле пустое, отрабатывает фильтр, udf-функция идет в недалеко лежащий ZIP-файл, достает нужный XML, клиент получает "содержимое" BLOB. И не нужно создавать другой, кроме sql connect, механизм передачи данных клиенту.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670324
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyanskyИз 64-разрядной ib_util.dll? А где её взять?

ты удивишься но входит в поставку 64-разрядного сервера Firebird
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670325
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТы не поверишь, но из комплекта документации Interbase. "Developer’s Guide" и далее по
ссылкам. Интерфейсы BLOB фильтров не менялись от начала времён.

PS: А что, что 32-х и 64-х разрядные модули несовместимы в принципе это вообще базовые
знания о функционировании компьютеров.


И где же взять интерфейсы именно для 64-разрядных модулей? Тоже из начала времен?

Кстати, теоретически разработчики могли бы сделать и переходник для загрузки 32-разрядных библиотек udf в 64-разрядный процесс. Но это чисто теоретически, конечно.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670326
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyansky,

не надо нести чушь про переходники
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670328
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyanskyклиент обращается как бы к BLOB-полю, которое на самом деле пустое, отрабатывает фильтр, udf-функция идет в недалеко лежащий ZIP-файл, достает нужный XML, клиент получает "содержимое" BLOBЗачем здесь вообще BLOB не осилил понять я.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670329
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyanskyИ где же взять интерфейсы именно для 64-разрядных модулей? Тоже из начала времен?А интерфейсы одинаковые.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670330
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockЗачем здесь вообще BLOB не осилил понять я.
Кстати, да... Можно и просто строку вернуть. Ну, чтобы в IBExpert'е красиво xml разглядывать :)
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670333
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyansky,

если реальная цель только XML разглядывать в IBE то лучше от этой затеи отказаться
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670336
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Да нет, реальная цель более серьезная, но Вы и YuRock правы, что-то я зря уперся в эти фильтры, можно и обычной udf обойтись, возвращающей строку.

Спасибо всем за подсказки!
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670338
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyansky,

ну тут свою UDF писал каждый второй в этой ветке. А вот имеющих дело с фильтрами я ещё не видел.
В руководстве по языку декларация фильтров описана, а вот где посмотреть пример живого фильтра я не знаю.
Знаю только что внутри Firebird использует встроенные BLOB-фильтры.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670339
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял, терра инкогнита, на страх и риск первопроходца. На риск завалить сервер.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670340
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyansky,

хочешь новый экспериментов пиши сразу UDR
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670374
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyansky,

блоб-фильтр преобразует один тип блоба в другой.
Например BLR в текст.
Для твоей задачи они не нужны.
UDF\UDR тебе в помощь.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670487
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то давно реализовывал 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.
#include "./firebird/ibase.h"
#include "./firebird/ib_util.h"

#ifdef FBUDF_EXPORTS
# ifdef __WINNT__
#   define FBUDF_API __declspec(dllexport) __cdecl
# else
#   define FBUDF_API __declspec(dllexport) __cdecl
# endif
#else
# ifdef __WINNT__
#   define FBUDF_API __cdecl
# else
#   define FBUDF_API __cdecl
# endif
#endif


typedef struct IB_BLOB {
    short __cdecl (* blob_get_segment)
        (
          void*       hnd,
          void*       buffer,
          ISC_USHORT  buf_size,
          ISC_USHORT  *result_len
        );
    void*		blob_handle;
    ISC_LONG	blob_number_segments;
    ISC_LONG	blob_max_segment;
    ISC_LONG	blob_total_length;
    void __cdecl (* blob_put_segment)
        (
          void*       hnd,
          const void* buffer,
          ISC_USHORT  buf_size
        );
    ISC_LONG __cdecl (* blob_lseek)
        (
          void* hnd,
          ISC_USHORT mode,
          ISC_LONG offset
        );
}  *LPIB_BLOB;

#define max_blob_segment_size 2048

#ifdef __cplusplus
extern "C" {
#endif

  DWORD FBUDF_API raw_init
      (
        DWORD * Mode,
        const DWORD * Handle
      );
  DWORD FBUDF_API raw_addblob
      (
        DWORD * Handle,
        const IB_BLOB* BLOb
      );
  DWORD FBUDF_API raw_add
      (
        DWORD * Handle,
        DWORD * Mode,
        const PARAMDSC* Param
      );
  DWORD FBUDF_API raw_rewrite
      (
        DWORD * Handle,
        __INT64 * Offset,
        const PARAMDSC* Param
      );
  DWORD FBUDF_API raw_free(DWORD * Handle);
  void  FBUDF_API raw_get
      (
        DWORD * Handle,
        DWORD * Mode,
        const IB_BLOB* BLOb
      );

#ifdef __cplusplus
}
#endif

Куски 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.
DWORD FBUDF_API raw_addblob(DWORD * Handle, const IB_BLOB* BLOb)
{
  DWORD result = false;
  my::CBuffer* raw = NULL;

  if (!(*Handle)
      || BLOb == NULL
      || BLOb->blob_handle == NULL
      || !BLOb->blob_total_length > 0)
    return result;

  my::CThreadContext* thread_context = my::get_thread_context();
  if (thread_context != NULL)
    raw = thread_context->getBuffers()->get(*Handle);

  if (raw != NULL)
  {
    void* buff = NULL;
    ISC_USHORT buff_size;
    if (!BLOb->blob_max_segment
        || BLOb->blob_max_segment > max_blob_segment_size)
      buff_size = max_blob_segment_size;
    else
      buff_size = BLOb->blob_max_segment;
    if (BLOb->blob_handle != NULL && buff_size)
      buff = ::malloc(buff_size);
    if (buff != NULL)
    {
      result++;
      ISC_USHORT length = 0;
      try
      {
        while ((*BLOb->blob_get_segment)
            (
              BLOb->blob_handle,
              buff,
              buff_size,
              &length
            ))
        {
          if (length)
            raw->add(buff, length);
          else
            break;
          length = 0;
        }
      }
      catch (...)
      {
        result = false;
      }
      ::free(buff);
    } // if (buff != NULL)
  }
  return result;
}

void FBUDF_API raw_get(DWORD * Handle, DWORD * Mode, const IB_BLOB* BLOb)
{
  DWORD result = false;
  DWORD mode = *Mode;
  DWORD free_mask = 1;
  my::CThreadContext * volatile thread_context = NULL;
  my::CThreadBuffers* buffs = NULL;
  my::CBuffer* raw = NULL;
  ISC_USHORT segment_size;

  thread_context = my::get_thread_context();
  if (thread_context != NULL
      && (*Handle)
      && BLOb != NULL && BLOb->blob_handle != NULL)
  {
    buffs = thread_context->getBuffers();
    if (buffs != NULL) raw = buffs->get(*Handle);

      if (!BLOb->blob_max_segment
        || BLOb->blob_max_segment > max_blob_segment_size)
      segment_size = max_blob_segment_size;
    else
      segment_size = BLOb->blob_max_segment;

    if (raw != NULL)
    {
      __INT64 buff_size = raw->size();
      if (buff_size)
      {
        void* buff = NULL;
        buff = ::malloc(buff_size);
        ::size_t length = raw->get(buff, buff_size);
        if (mode & 0x80000000)
        {
          mode = (~mode); mode++;
          if (mode & (~free_mask) == 64)
          {
            // -- decode Base64 to bin
            void* dst_buff = my::base64_decode
                (
                  reinterpret_cast<const char*>(buff),
                  &length
                );
            ::free(buff);
            buff = dst_buff;
          }
        }
        else
          if (mode & (~free_mask) == 64)
          {
            // -- encode bin to Base64
            char* dst_buff = my::base64_encode(buff, length);
            ::free(buff);
            buff = dst_buff;
            length = ::strlen(dst_buff);
          }
        char*      ptr = reinterpret_cast<char*>(buff);
        ISC_USHORT len = segment_size;
        if (length)
        {
          while (length > segment_size)
          {
            (*BLOb->blob_put_segment)(BLOb->blob_handle, ptr, len);
            ptr += len;
            length -= len;
          }
          len = length;
          (*BLOb->blob_put_segment)(BLOb->blob_handle, ptr, len);
        } // if (length)
        if (buff != NULL) ::free(buff);
      } // if (buff_size)
      if (mode & free_mask) ::free(raw);
      result++;
    } // if (raw != NULL)
  }
}

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.
DECLARE EXTERNAL FUNCTION RAW_INIT
  INTEGER,
  INTEGER
  RETURNS INTEGER BY VALUE
  ENTRY_POINT 'raw_init' MODULE_NAME 'librawudf';

DECLARE EXTERNAL FUNCTION RAW_FREE
  INTEGER
  RETURNS INTEGER BY VALUE
  ENTRY_POINT 'raw_free' MODULE_NAME 'librawudf';

DECLARE EXTERNAL FUNCTION RAW_ADD_INT16
  INTEGER,
  INTEGER,
  SMALLINT BY DESCRIPTOR
  RETURNS INTEGER BY VALUE
  ENTRY_POINT 'raw_add' MODULE_NAME 'librawudf';

DECLARE EXTERNAL FUNCTION RAW_ADD_INT32
  INTEGER,
  INTEGER,
  INTEGER BY DESCRIPTOR
  RETURNS INTEGER BY VALUE
  ENTRY_POINT 'raw_add' MODULE_NAME 'librawudf';

DECLARE EXTERNAL FUNCTION RAW_ADD_INT64
  INTEGER,
  INTEGER,
  BIGINT BY DESCRIPTOR
  RETURNS INTEGER BY VALUE
  ENTRY_POINT 'raw_add' MODULE_NAME 'librawudf';

DECLARE EXTERNAL FUNCTION RAW_ADD_CHAR
  INTEGER,
  INTEGER,
  CHAR(766) BY DESCRIPTOR
  RETURNS INTEGER BY VALUE
  ENTRY_POINT 'raw_add' MODULE_NAME 'librawudf';

DECLARE EXTERNAL FUNCTION RAW_ADD_CSTR
  INTEGER,
  INTEGER,
  CSTRING(766) BY DESCRIPTOR
  RETURNS INTEGER BY VALUE
  ENTRY_POINT 'raw_add' MODULE_NAME 'librawudf';

DECLARE EXTERNAL FUNCTION RAW_ADD_VCHAR
  INTEGER,
  INTEGER,
  VARCHAR(32765) BY DESCRIPTOR
  RETURNS INTEGER BY VALUE
  ENTRY_POINT 'raw_add' MODULE_NAME 'librawudf';

DECLARE EXTERNAL FUNCTION RAW_ADD_BLOB
  INTEGER,
  BLOB
  RETURNS INTEGER BY VALUE
  ENTRY_POINT 'raw_addblob' MODULE_NAME 'librawudf';

DECLARE EXTERNAL FUNCTION RAW_REWRITE_INT16
  INTEGER,
  BIGINT,
  SMALLINT BY DESCRIPTOR
  RETURNS INTEGER BY VALUE
  ENTRY_POINT 'raw_rewrite' MODULE_NAME 'librawudf';

DECLARE EXTERNAL FUNCTION RAW_REWRITE_INT32
  INTEGER,
  BIGINT,
  INTEGER BY DESCRIPTOR
  RETURNS INTEGER BY VALUE
  ENTRY_POINT 'raw_rewrite' MODULE_NAME 'librawudf';

DECLARE EXTERNAL FUNCTION RAW_REWRITE_INT64
  INTEGER,
  BIGINT,
  BIGINT BY DESCRIPTOR
  RETURNS INTEGER BY VALUE
  ENTRY_POINT 'raw_rewrite' MODULE_NAME 'librawudf';

DECLARE EXTERNAL FUNCTION RAW_REWRITE_CHAR
  INTEGER,
  BIGINT,
  CHAR(766) BY DESCRIPTOR
  RETURNS INTEGER BY VALUE
  ENTRY_POINT 'raw_rewrite' MODULE_NAME 'librawudf';

DECLARE EXTERNAL FUNCTION RAW_REWRITE_CSTR
  INTEGER,
  BIGINT,
  CSTRING(766) BY DESCRIPTOR
  RETURNS INTEGER BY VALUE
  ENTRY_POINT 'raw_rewrite' MODULE_NAME 'librawudf';

DECLARE EXTERNAL FUNCTION RAW_REWRITE_VCHAR
  INTEGER,
  BIGINT,
  VARCHAR(32765) BY DESCRIPTOR
  RETURNS INTEGER BY VALUE
  ENTRY_POINT 'raw_rewrite' MODULE_NAME 'librawudf';

DECLARE EXTERNAL FUNCTION RAW_GET
  INTEGER,
  INTEGER,
  BLOB RETURNS PARAMETER 3
  ENTRY_POINT 'raw_get' MODULE_NAME 'librawudf';
COMMIT WORK;

...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670595
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladUDF\UDR тебе в помощь.

На месте автора я бы тоже попытался найти обходные пути чтобы избежать создания временных
блобов в базе. С UDR их, наверное, можно выкинуть из основной базы во временный файл, но
всё равно это оверхэд.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670610
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

при чём тут блоб-фильтры ? Или ты опять о своём ?
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670616
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladпри чём тут блоб-фильтры ?

При том, что они выглядят как возможность формировать BLOB по кусками на лету и сразу
отдавать на клиента, без сохранения где-либо. Представь себе фильтр, преобразующий имя
файла в его содержимое.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670618
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

тут фильтр ни к чему, это можно и с помощью UDR сделать.
Фильтр тут скорее для прозрачного преобразования zip -> xml или xml -> zip, где zip и xml подтипы блоб зарегистрированные пользователем.
Вот только нужно ли это ещё большой вопрос.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670628
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денистут фильтр ни к чему, это можно и с помощью UDR сделать.

Можно. Представь себе файл на пару гигов. UDR сначала перекачает его в базу, отдаст blob
id, а потом клиент будет его из базы выкачивать. В конце сервер этот мусор будет собирать.
Как тебе эта картинка?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670630
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovhvladпри чём тут блоб-фильтры ?

При том, что они выглядят как возможность формировать BLOB по кусками на лету и сразу
отдавать на клиента, без сохранения где-либо. Представь себе фильтр, преобразующий имя
файла в его содержимое.У блоб-фильтра на входе блоб. Предлагаешь имя файла в блоб засунуть ?
Ну, можно попробовать. Расскажешь :)
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670649
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

а куда он денется, если ему встретится XML, который размером больше 32KB и в VarChar тупо не лезет ?


P.S.

> идет в недалеко лежащий ZIP-файл, достает нужный XML

.....а я бы сразу ZIP передавал по сети, он же меньше, чем XML, значит по сети быстрее проскочит. Конечно, если на клиенте диск медленнее, чем скорость сети, то лучше распаковать на сервере.... Но все же едва ли.

Совершенно безумный вариант - поднять на сервере p2p (например uTorrent BTSync), в БД держать хэши ZIP'ов с исходным XML-документом. SHA1 или MD5. Запросили файл, из БД прочитал хэш, сформировал magnet-ссылку - и пожалуйста, тащи хоть гигабайтный документ, асихнронно, и вовне процессов сервера и аппликухи.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670652
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladПредлагаешь имя файла в блоб засунуть ?

Предлагаю.

В Windows максимальная длина имени файла - 4К. В Линуксе, кажется, 1К.
С учётом UTF-8 - это нужно VARCHAR(16KBytes) или, если запрещаем работу с Windows файлопомойками - VARCHAR(4Kbytes)

Учитывая, что на диске записи пакуются RLE и ничего уровня LZ до сих пор нету...
У меня сейчас нет под руками того старого документа о двоичном формате rows в FB и я не помню максимальной эффективности RLE... 64:1 ? 16:1 ? но в общем, не очевидно, что с блобами обязательно будет хуже.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670658
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochУ меня сейчас нет под руками того старого документа о двоичном формате rows в FB и я не помню максимальной эффективности RLE... 64:1 ? 16:1 ?

вроде есть планы изменить это в 4.0.

Не вижу профита от размещения имени файла в BLOB. Пути длинной 4K нормальные разработчики не используют
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670661
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
06.07.2018 13:18, Симонов Денис пишет:
> Пути длинной 4K нормальные разработчики не используют

где ж ты видел среди разработчиков конечного софта НОРМАЛЬНЫХ...

(шутко, если шо)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670663
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисНе вижу профита от размещения имени файла в BLOB. Пути длинной 4K нормальные разработчики не используют

Ага "в колбасе сегодня потребности нет"
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670665
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladУ блоб-фильтра на входе блоб.

Что-то мешает фильтру свой вход игнорировать и выдавать на выход что захочется?..

hvladПредлагаешь имя файла в блоб засунуть ?

Почему бы и нет? Именно это ТС и собирался сделать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670668
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЧто-то мешает фильтру свой вход игнорировать и выдавать на выход что захочется?..То же, что мешает отвечать на все вопросы : 42

Dimitry SibiryakovhvladПредлагаешь имя файла в блоб засунуть ?

Почему бы и нет? Именно это ТС и собирался сделать.Он об этом понятия не имел, пока это тут не прозвучало.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670676
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladОн об этом понятия не имел, пока это тут не прозвучало.

Его второе сообщение в теме:
shalamyanskyБыло бы удобно: клиент обращается как бы к BLOB-полю, которое на самом деле пустое,
отрабатывает фильтр, udf-функция идет в недалеко лежащий ZIP-файл, достает нужный XML,
клиент получает "содержимое" BLOB.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670678
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch.....а я бы сразу ZIP передавал по сети, он же меньше, чем XML

а вот, кстати, и потенциальная тема для BLOB-фильтра (безусловно то же самое можно сделать и другими способами и вообще вне Firebird)

В ZIP-файле каждый поток самодостаточен. Предположим что-то вроде тоссинга FIDO-почты. На хаб от разных корреспондентов приезжают ZIP'ы в которых тысячи XML-документов, и их описания ("куски данных из XML разложенные в SQL-таблицах"). Хаб в свою очередь должен сформировать исходящие ZIP-пакеты на разные узлы и разослать. Т.е. надо будет из ZIP'ов доставать документы только для того, чтобы потом уложить их в другие ZIP'ы. Распаковывать и запаковывать обратно проще всего, до поры до времени. Но как вариант можно сделать функцию "передать файл №10 из xxxxx.zip как отдельный zip-файл бещ перепаковки" или даже "...файлы №10, 15, 36...."

Если хранить исходные ZIP-файлы в самой БД (тут говорили, что фотографии хранить в БД можно и вполне нормально, значит и ZIP'ы с документами можно), то функция выдёргивания отдельных файлов из ZIP-блоба без распаковки и без промежуточного создания временных файлов/блобов могла бы иметь смысл
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670681
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЕго второе сообщение в теме:
shalamyanskyкоторое на самом деле пустое,



только не спрашивай меня, как эта функция должна была угадать какой именно XML доставать из того "недалёкого ZIP" (сам ZIP будем пока для простоты считать singleton, а путь к нему hardcoded внутрь UDF)
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670685
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

во ты фантазёр. Я хотел бы глянуть на пример кода, только не псевдокода, а реального, который мог бы это сделать
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670686
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Лично я бы не стал хранить файлы внутри FDB, даже когда технически это возможно. Мне сама эта идея не нравится. Как следствие, я бы эту функцию как БЛОБ-фильтр не стал бы делать.

Но те, кто считают хранение файлов внутри БД нормальным - им и карты в руки
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670687
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

почитай топик внимательней. ТС и не собирался хранить файлы в БД. Он хотел хранить их как файлы и тащить через обычные SELECT запросы на клиента через BLOB.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670689
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ведь кто-то уже помнится писал UDF File2BLOB (или FileToBLOB).
ей Бо, было.

(если конечно не пригрезилось мне, на летящем коне)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670690
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

пятнично
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670691
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochВ Windows максимальная длина имени файла - 4К LPDWORD lpMaximumComponentLength .
Типично это 255
Код: plaintext
1.
2.
3.
4.
5.
6.
fsutil fsinfo volumeinfo C:
...
 Max Component Length  :  255 
File System Name : NTFS
Supports Case-sensitive filenames
Preserves Case of filenames
 Supports Unicode  in filenames
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670692
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

да была. Мало того в ред-базе функции чтения BLOB из файла и сохранения в файл идут в поставке.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670693
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
06.07.2018 14:11, Симонов Денис пишет:
> да была. Мало того в ред-базе функции чтения BLOB из файла и сохранения в файл идут в поставке.

наверное это то, что нужно Михаилу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670702
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochDimitry SibiryakovЕго второе сообщение в теме:
shalamyanskyкоторое на самом деле пустое,

++
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670710
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисТС и не собирался хранить файлы в БД. Он хотел хранить их как файлы и тащить через обычные SELECT запросы на клиента через BLOB.
В том то и дело.
Этого я и не понимаю - зачем на клиента тянуть файлы (и конвертировать их при этом) через БД.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670720
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
06.07.2018 14:28, YuRock пишет:
> Этого я и не понимаю - зачем на клиента тянуть файлы

предпочитаешь парсить XML прямо на сервере?
в некоторых серверах из большой тройки такой API действительно есть.
но издержки и затраты зачастую не стоят того чтоб заморачиваться.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670729
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

Чтобы не раздавать права доступа для клиентов. Или не писать аппсервер для доступа к этим файлам.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670738
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийнаверное это то, что нужно Михаилу.
наверное это то, что нужно воткнуть в ФБ.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670740
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийа ведь кто-то уже помнится писал UDF
да я писал, больше 10 лет назад, blobsaveload. Может еще кто-то писал, не запомнилось.

Тут же это, главное не забыть - что если "пропускать" через сервер блоб из файла, и не сохранять его, то будет копиться много временных блобов в базе.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670741
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
06.07.2018 14:55, kdv пишет:
> Тут же это, главное не забыть - что если "пропускать" через сервер блоб из файла, и не сохранять его, то будет копиться много временных блобов в базе.

ну, про это DS забыть никому не даст ;)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670750
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyanskyБыло бы удобно: клиент обращается как бы к BLOB-полю, которое на самом деле пустое, отрабатывает фильтр, udf-функция идет в недалеко лежащий ZIP-файл, достает нужный XML, клиент получает "содержимое" BLOB. И не нужно создавать другой, кроме sql connect, механизм передачи данных клиенту.Во-первых, это можно реализовать через VIEW, а не через таблицу с полем на BLOb-фильтре, а во-вторых - занафига это надо? Пишется UDF функция, которой на вход подается UUID (он же "имя_файла" с BLOb'ом), а на выходе BLOb, выдернутый из файла. Чем не Big Data?
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670762
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyanskyклиент обращается как бы к BLOB-полю, которое на самом деле пустое, отрабатывает фильтр, udf-функция идет в недалеко лежащий ZIP-файл
не получится. как уже было сказано, блоб-фильтр получает на входе только блоб, и на выход выдает тоже только блоб. Никаких имен файлов или ууидов туда передать или вернуть нельзя.
Не получится даже использовать blob id для сохранения файла, потому что файл должен быть сохранен раньше, чем блоб получит свой id. Еще хуже, что при сохранении такого "блоба" с клиента в файл серверу всё равно придется содержимое сначала сохранять во временный блоб.
А значит, если просто гонять файлы через сервер, то они будут оседать в базе. Пусть не навсегда, но на какое-то время.
И тут уже надо прикинуть, какое количество и объем этих файлов будут прогоняться через сервер. А как всегда, прикольная идея превратится в кошмар.

Так что, в идеале в ФБ должны быть
- функции блоб-в-файл, файл-в-блоб, и еще две таких же без temporary blob, "насквозь сервер"
- параметр в конфиге, определяющий разрешенные папки для сохранения блобов и всякого в файлы.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39670765
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийв некоторых серверах из большой тройки такой API действительно есть.
но издержки и затраты зачастую не стоят того чтоб заморачиваться.
Нет, я противник и этого.
WildSeryИли не писать аппсервер для доступа к этим файлам.
http-сервер вполне для этого сгодится любой. А парсить уже на клиенте можно, опять же.
WildSeryЧтобы не раздавать права доступа для клиентов
Если от прав юзеров база зависит доступ к этим файлам - тогда да. Тут уж писать придется.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39671742
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, спасибо всем за активное обсуждение моей набольшой задачи. Даже удивлен. Особое спасибо тем, что кто предоставил конкретные документы и даже код, а также тем, кто внимательно посмотрел именно на мои вопросы и предположения.

kdvблоб-фильтр получает на входе только блоб, и на выход выдает тоже только блоб

Как это можно выяснить, не отвлекая гуру от важных дел, а из документации? Если вы заметили, первый мой вопрос был такой:
shalamyansky1) Каков интерфейс функции, реализующей BLOB фильтр?

"Руководство" дает лишь объявление со стороны SQL
Код: sql
1.
2.
3.
DECLARE FILTER filtername
INPUT_TYPE <sub_type> OUTPUT_TYPE <sub_type>
ENTRY_POINT 'function_name' MODULE_NAME 'library_name';


из которого совершенно непонятно (мне, по-крайней мере), что же должна ожидать реализующая функция 'function_name', что и в каком виде она получит на входе, и что и в каком виде должна отдать.

Некоторые нюансы задачи, которые заинтересовали публику:

2) Размеры передаваемых "файлов" > 32K, поэтому от типа BLOB, похоже, мне не уйти, даже если буду передавать их посредством "обычной" UDF.
Кстати, почему было не использовать беззнаковые числа для размера строки? 64K все-таки поболе, чем 32K, аж в два раза, во многих случаях эти дополнительные килобайты облегчили бы жизнь.

3)ZIP'ы разложены по папкам файловой системы, каждый ZIP включает в себя множество XML, а каждый XML содержит множество конечных документов. Один запрос по неким идентификаторам должен возвращать один документ.

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

А вообще подход к фильтрам получается интересным: у нас есть замечательная возможность, сообщает "Руководство", вот вам и оператор для неё, но пользоваться ей не надо, это сложно и опасно, и вообще ей никто не пользуется. Лучше не трогайте.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39671746
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyansky,

там написано только то, что относится к SQL/PSQL. Как делать эти самые фильтры в этом руководстве не описано, да и не должно быть. Ибо UDF/UDR и фильтры это отдельная очень большая тема.

авторBLOB фильтр — объект базы данных, являющийся, по сути, специальным видом внешних
функций с единственным назначением: получение объекта BLOB одного формата и
преобразования его в объект BLOB другого формата. Форматы объектов BLOB задаются с
помощью подтипов BLOB.

вроде как из этого текста понятно что вход это блоб и выход это блоб.

shalamyanskyКстати, почему было не использовать беззнаковые числа для размера строки? 64K все-таки поболе, чем 32K, аж в два раза, во многих случаях эти дополнительные килобайты облегчили бы жизнь.

там много причин. Для начала у нас сама запись ограничена 64K байтами. Ну и посмотри определение VARCHAR на уровне сообщений. Там много что на это завязано, и увеличить это не так уж легко.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39671747
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyanskyКак это можно выяснить, не отвлекая гуру от важных дел, а из документации?
Внезапно: открыть для себя документацию: 21547549
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39671749
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Дим, там по большому счёту не написано ровно ничего,пару фраз из которых конечно можно понять что вход и выход BLOB, но не более того.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39671752
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денистам по большому счёту не написано ровно ничего,пару фраз из которых конечно можно понять
что вход и выход BLOB, но не более того.

Там далее ссылки ещё на два мануала в которых сказано про интерфейс функции и ещё пара
фраз. Ну а по этим данным найти в исходниках сервера примеры его встроенных фильтров -
дело техники.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39671755
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyanskyКак это можно выяснить, не отвлекая гуру от важных дел, а из документации?
пример api9f.* плюс исходники. в исходниках есть фильтр, который преобразует blr в текст.
shalamyanskyчто же должна ожидать реализующая функция 'function_name'
преобразовывать один тип блоба в другой. На входе блоб, на выходе блоб. См. пример api9f.
shalamyanskyКстати, почему было не использовать беззнаковые числа для размера строки?
это куда и про что вообще? про лимит строки в 32к байт?
Ответ - "так получилось".
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39671764
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересное кино. У меня работает Firebird 3.0.2, есть на руках "Руководство" по работе именно с этой версией этого продукта, а вы отсылаете меня к руководствам другого продукта, хоть и близкого, да еще непонятно каких версий. Ну, посмотрел. По поводу БЛОБ-фильтров там сказано ровно то же, что и в руководстве по Firebird:

Код: sql
1.
2.
3.
DECLARE FILTER BLOB_FORMAT
INPUT_TYPE 1 OUTPUT_TYPE -99
ENTRY_POINT 'Text_filter' MODULE_NAME 'Filter_99';



Даже если принимает только BLOB, и отдает только BLOB, как я уже узнал, все равно остаются вариации: это два разных in- и out- параметра, или один параметр in-out? Скорее всего, конечно, разные, но вдруг?

Dimitry SibiryakovНу а по этим данным найти в исходниках сервера примеры его встроенных фильтров -
дело техники.

Вы это серьезно предлагаете? А чтобы использовать Windows API, идти в исходники kernel32? Или за неимением оных, дизассемблировать?

kdvСм. пример api9f.

Вот это спасибо! Собственно, это и есть прямой ответ на мой вопрос. Теперь буду и туда смотреть.
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39671776
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyanskyВы это серьезно предлагаете? А чтобы использовать Windows API, идти в исходники kernel32?
Или за неимением оных, дизассемблировать?

Серьёзно ли я предлагаю примеры кода смотреть в коде? Да, чёрт побери, я серьёзен как пуля
в голове.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39671802
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyanskyэто два разных in- и out- параметра, или один параметр in-out?
1. у Firebird нет in-out параметров
2. в декларации фильтра ДВА параметра. Откуда "один"? Лопни мои глаза?
shalamyanskyИли за неимением оных, дизассемблировать?
гм. я вот С/C++ терпеть не могу, и писать на нем не умею, но исходники-то могу читать.
И исходники Firebird никто не прятал. Да, очень трудно запускать поиск по файлам строки "filter", правда?
Кроме того, раз пресловутые фильтры уже есть в коде, и они работают, то почему-бы их код не посмотреть?
...
Рейтинг: 0 / 0
BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
    #39671804
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyansky,

дополню. из
INPUT_TYPE 1 OUTPUT_TYPE -99
видно, что передаются, собственно, не сами хэндлы блобов или структуры, а просто их подтипы.
И никакого in-out тут и близко нет. Особенно, если преобразовывать одно содержимое блоба в другое содержимое.
...
Рейтинг: 0 / 0
61 сообщений из 61, показаны все 3 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / BLOB фильтр и UDF для Firebird 3.0 (64) - где найти спецификацию?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]