ДЕКОДЕР FIREBIRD BLR

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

Кто-нибудь знает декодер BLR или документы, которые мне нужны для его создания?

ТИА.


person José Eduardo    schedule 03.12.2009    source источник
comment
Будет ли это относиться и к Interbase? Если это так, вы можете отредактировать это в своем заголовке и тегах, чтобы привлечь больше возможных экспертов!   -  person Carl Smotricz    schedule 03.12.2009


Ответы (3)


Я видел инструмент отображения BLR (в инструменте администрирования IB Джейсона Уортона), но он будет отображать только имена BLR, а не транслитерировать обратно на язык SQL/proc. Я думаю, что то, что вы ищете, не существует.

Однако вы можете получить документацию по BLR.

person Craig Stuntz    schedule 03.12.2009

В самой Firebird есть хороший декодер BLR (двоичный) в BLR (текстовый). Вы можете включить его с помощью set blob all (или set blobdisplay all). Вы можете вызвать его из ISQL:

SQL> set term !;
SQL> create procedure p1
CON> as
CON>   declare n integer = 1;
CON> begin
CON>   n = n * 2;
CON> end!
SQL> set term ;!
SQL> 
SQL> set blob all;
SQL> commit;
SQL> 
SQL> select rdb$procedure_blr from rdb$procedures where rdb$procedure_name = 'P1';

RDB$PROCEDURE_BLR 
================= 
             1a:3 
==============================================================================
RDB$PROCEDURE_BLR:  
            blr_version5,
            blr_begin,
               blr_message, 1, 1,0,
                  blr_short, 0,
               blr_begin,
                  blr_declare, 0,0, blr_long, 0,
                  blr_assignment,
                     blr_literal, blr_long, 0, 1,0,0,0,
                     blr_variable, 0,0,
                  blr_stall,
                  blr_label, 0,
                     blr_begin,
                        blr_begin,
                           blr_assignment,
                              blr_multiply,
                                 blr_variable, 0,0,
                                 blr_literal, blr_long, 0, 2,0,0,0,
                              blr_variable, 0,0,
                           blr_end,
                        blr_end,
                  blr_end,
               blr_send, 1,
                  blr_begin,
                     blr_assignment,
                        blr_literal, blr_short, 0, 0,0,
                        blr_parameter, 1, 0,0,
                     blr_end,
               blr_end,
            blr_eoc

==============================================================================
person Adriano dos Santos Fernandes    schedule 06.12.2009
comment
Похоже, что эта возможность находится в самом isql, а не на сервере Firebird (даже если isql является частью пакета Firebird). Другими словами, вы не вызываете его из isql, вы отображаете BLR с помощью isql. Тем не менее, очень красиво, +1! - person Cosmin Prund; 14.03.2012
comment
IBExpert также имеет декодер BLR, но AFAIR в некоторых деталях отличается от iSQL // @CosminPrund, однако декодер является частью самого сервера. Это то, что IBM разрекламировала около десятка лет назад как блейды данных, в Firebird это называется фильтрами BLOB, как особый плохо документированный случай UDF, предназначенный для преобразования BLOB в другие типы данных (извлечение данных из BLOB было бы частным случаем такого преобразования ). Сервер Firebird имеет встроенный фильтр BLOB (он же Data Blade, он же любое другое бывшее модное слово), и вы можете вызывать его ЛЮБЫМ клиентом sql. - person Arioch 'The; 13.02.2019
comment
Пример: select cast( rdb$trigger_blr as VarChar(2000) ) from rdb$triggers where rdb$trigger_name = 'CHECK_17' - и вот оно, даже без iSQL или IBExpert - person Arioch 'The; 13.02.2019

Если у вас все еще есть база данных, есть шанс, что источник процедуры все еще где-то там, но помечен как удаленный. Вы можете попробовать открыть файл базы данных в шестнадцатеричном редакторе и найти имя процедуры.

person Douglas Tosi    schedule 03.12.2009