{"id":467873,"date":"2025-07-20T21:39:49","date_gmt":"2025-07-20T21:39:49","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=467873"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=467873","title":{"rendered":"<span>\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 Firebird, \u0447\u0430\u0441\u0442\u044c 1<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439 \u044f \u0437\u0430\u043b\u0435\u0437\u0443 \u0432\u043d\u0443\u0442\u0440\u044c \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 Firebird. \u042d\u0442\u043e \u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0438 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044f \u0441\u0432\u043e\u044e \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e: \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0434\u0440\u043e\u0431\u0438\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0431\u0430\u0437\u044b \u043d\u0430 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043d\u0435 \u0431\u0443\u0434\u0443 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043a\u0430\u0436\u0434\u0443\u044e \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0438 \u043d\u0435 \u0431\u0443\u0434\u0443 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0432 \u0432\u0438\u0434\u0435 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432, \u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0435\u043b\u043a\u0430\u043c\u0438. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u044f \u0431\u0443\u0434\u0443 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043a\u0443\u0441\u043a\u0438 \u043a\u043e\u0434\u0430, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u0438 \u043a\u0430\u043a \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443. \u042f \u0432\u0435\u0440\u044e, \u0447\u0442\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 core-\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u043c \u0441\u043b\u043e\u0436\u043d\u044b\u043c, \u043d\u043e \u0441\u0430\u043c\u044b\u043c \u0432\u0430\u0436\u043d\u044b\u043c \u0448\u0430\u0433\u043e\u043c, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u043d\u0430\u0447\u0430\u0442\u044c. \u0410 \u043d\u044e\u0430\u043d\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c 50%-70% \u043a\u043e\u0434\u0430, \u043f\u043e\u0442\u043e\u043c \u0438\u0437\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043b\u0435\u0433\u0447\u0435. \u041d\u043e \u043b\u0435\u0433\u0447\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0442\u043e\u043c, \u0430 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0441\u043a\u0443\u0447\u043d\u043e\u0433\u043e C++ \u043a\u043e\u0434\u0430.<\/p>\n<p>\u042f \u043e\u0447\u0435\u043d\u044c \u043f\u043b\u043e\u0445\u043e \u0437\u043d\u0430\u044e C++, \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 Firebird \u0432\u0438\u0436\u0443 \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437, \u043a\u0430\u043a SQL-\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0437\u043d\u0430\u043a\u043e\u043c \u0441 Firebird \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0433\u043b\u0443\u0431\u043e\u043a\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u043e\u0438\u0445 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439 \u0442\u0430\u043a\u043e\u0435 \u0441\u0435\u0431\u0435.<\/p>\n<h2>\u041d\u0430\u0447\u0430\u043b\u043e<\/h2>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c, \u043d\u0430\u043c \u043b\u0443\u0447\u0448\u0435 \u0438\u043c\u0435\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432. \u0417\u0430\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0441\u0430\u0439\u0442 \u0438 \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043f\u043e\u043c\u0438\u043c\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439! \u042d\u0442\u043e \u0442\u0430\u043a \u043c\u0438\u043b\u043e, \u043a\u0430\u0447\u0430\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e, \u044f \u0431\u0440\u0430\u043b \u0432\u0435\u0440\u0441\u0438\u044e 5.0.2, \u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043c\u043e\u0438\u0445 \u0438\u0437\u044b\u0441\u043a\u0430\u043d\u0438\u0439 \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u044b \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439, \u0438 \u0441 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u044b \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445.<\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u043e\u0433\u043e, \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438. \u041e\u043d\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043d\u0430 github. \u041f\u0440\u0438\u044f\u0442\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0442\u0435\u0433\u0438, \u043a\u0430\u0447\u0430\u0435\u043c \u0442\u0435\u0433 5.0.2.<\/p>\n<p>\u042f \u0441\u043c\u0435\u043b\u043e \u0437\u0430\u044f\u0432\u0438\u043b, \u0447\u0442\u043e \u0431\u0443\u0434\u0443 \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 core-\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u043e \u0434\u0430\u0436\u0435 \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e, \u0438 \u044f \u0432\u044b\u0431\u0435\u0440\u0443 \u0434\u043b\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u0447\u0430\u0441\u0442\u044c core-\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430. \u041a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u044f\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0433\u0434\u0435-\u0442\u043e \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u0438 \u0443\u043c\u0435\u044e\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u044d\u0442\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c. \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f, \u0431\u0443\u0434\u0443 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u043e\u043d\u0438 \u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f: \u0445\u043e\u0447\u0443 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0443\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 SELECT-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432 \u0432\u0438\u0434\u0435 \u0431\u0430\u0439\u0442\u043e\u0432 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0438 \u0434\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043f\u043e \u0441\u0435\u0442\u0438.<\/p>\n<p>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f &#8212; \u044d\u0442\u043e \u043e\u0442\u043a\u0443\u0434\u0430 \u0442\u0435\u0431\u044f, \u0431\u043b\u0438\u043d, \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0447\u0442\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u0451\u043b \u043d\u0435 \u0432 \u0434\u0435\u0431\u0440\u0438, \u0430 \u043a\u0443\u0434\u0430 \u043d\u0430\u0434\u043e? \u0422\u043e\u0447\u043d\u043e \u043d\u0435 \u0441 main(), \u0442\u0430\u043c \u0431\u0443\u0434\u0435\u0442 &#171;\u0410\u0432\u0440\u0430\u0430\u043c \u0440\u043e\u0434\u0438\u043b \u0418\u0441\u0430\u0430\u043a\u0430, \u0418\u0441\u0430\u0430\u043a \u0440\u043e\u0434\u0438\u043b \u0418\u0430\u043a\u043e\u0432\u0430&#8230;&#187;, \u0442\u0430\u043a \u044f \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0434\u043e\u0447\u0438\u0442\u0430\u044e. \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0443\u0434\u0430\u0447\u043d\u043e \u0442\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u0442\u0430\u043a\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0432 \u0441\u0430\u043c\u043e\u0439 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u043a\u043e\u0434\u0430, \u043e\u0442\u043a\u0443\u0434\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043b\u0438\u0437\u043a\u043e \u043a \u043c\u0435\u0441\u0442\u0443 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0438 \u043f\u043e\u043c\u0435\u043d\u044c\u0448\u0435 \u0431\u043e\u043a\u043e\u0432\u044b\u0445 \u043e\u0442\u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439. \u0412\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f \u043c\u0430\u043b\u043e \u0447\u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u044e. \u041d\u0443\u0436\u043d\u044b \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u0430\u0437\u044b \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043d\u0443 \u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0435. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0432\u043e\u0438\u0445 \u043a\u043e\u043f\u0430\u043d\u0438\u0439 \u044f \u0431\u0443\u0434\u0443 \u0447\u0435\u0440\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 (\u0447\u0442\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430) \u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 (\u043e\u0442\u043b\u0430\u0434\u043a\u0430) \u043f\u043e\u0434\u0445\u043e\u0434\u044b.<\/p>\n<h2>\u0422\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430<\/h2>\n<p>\u0418 \u043d\u0430\u0447\u043d\u0451\u043c \u043c\u044b \u0441 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f. \u0421\u0440\u0435\u0434\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0433\u043b\u0430\u0437 \u0446\u0435\u043f\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430 &#171;fbtracemgr.exe&#187;, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0441\u0443\u0434\u044f \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e, \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0443 Firebird \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u0430\u044f: \u0447\u0442\u043e-\u0442\u043e \u0435\u0441\u0442\u044c \u0432 online-\u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0435, \u043d\u043e \u0437\u0430 \u043c\u043d\u043e\u0433\u0438\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0445\u043e\u0434\u0438\u0442\u044c \u0432 README-\u0444\u0430\u0439\u043b\u044b \u0438\u0437 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 doc , \u0432\u043e\u0442 \u0438 \u044d\u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439 \u0442\u0430\u043a\u043e\u0439. \u0424\u0430\u0439\u043b README.trace-services.txt \u0432 \u0446\u0435\u043b\u043e\u043c \u043f\u043e\u043b\u0435\u0437\u0435\u043d: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e\u043c\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0443 \u043d\u0443\u0436\u0435\u043d \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043f\u043e\u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u043d\u0430 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435. \u0415\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u043d\u043e \u043e\u0447\u0435\u043d\u044c \u0441\u043c\u0443\u0442\u0438\u043b\u0430 \u0444\u0440\u0430\u0437\u0430 &#171;List of available events to trace is fixed and determined by the Firebird engine&#187;, \u0442\u043e \u0435\u0441\u0442\u044c \u0444\u0438\u0433 \u0432\u0430\u043c, \u0430 \u043d\u0435 \u0441\u043f\u0438\u0441\u043e\u043a. \u041b\u0430\u0434\u043d\u043e, \u043f\u0440\u043e\u0431\u0443\u044e \u0432\u0437\u044f\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0438 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043b\u044e\u0447\u0435\u0439 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e &#8212; \u0445\u0440\u0435\u043d \u0442\u0430\u043c, \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435. \u0422\u044b\u043a\u0441, \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u044f, \u043d\u0443 \u0442\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0443\u044e \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0443 (\u0442\u043e, \u0447\u0435\u043c \u044f \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f), \u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0443\u044e? \u041f\u043e\u0448\u0451\u043b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0435\u0451 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b fbtrace.conf, \u0438 \u0443\u0432\u0438\u0434\u0435\u043b \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0432\u0437\u044f\u043b \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439: \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e \u043d\u0435 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u043c, \u0430 \u0437\u043d\u0430\u043a\u043e\u043c \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0430. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0435 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041a\u0440\u0443\u0442\u043e, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0441\u044c \u043a \u0441\u0432\u043e\u0435\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0435, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u044e \u043a\u043e\u043d\u0444\u0438\u0433, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e, \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0435\u0442, \u0443\u0440\u0430. \u0414\u0435\u043b\u0430\u044e \u0437\u0430\u043f\u0440\u043e\u0441, \u0441\u043c\u043e\u0442\u0440\u044e \u0432\u044b\u0432\u043e\u0434 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 &#8212; \u043f\u0443\u0441\u0442\u043e. \u0418\u0434\u0443 \u0433\u0443\u0433\u043b\u0438\u0442\u044c, \u043d\u0430\u0445\u043e\u0436\u0443 \u0432\u043e\u0442 <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/issues\/7518\" rel=\"noopener noreferrer nofollow\">\u0442\u0430\u043a\u043e\u0435<\/a> . \u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0432 \u044d\u0442\u043e\u043c \u0442\u0438\u043a\u0435\u0442\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e, \u0447\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e, \u043d\u043e \u043d\u0438\u0444\u0438\u0433\u0430 \u043d\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b &#8212; \u0442\u0430\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b (\u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u043a \u0431\u0430\u0437\u0435) \u0438 workaround (\u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443 \u043c\u0435\u043d\u044f \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u0414\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code>2025-06-04T12:38:55.7690 (13224:000000000B6729C0) START_TRANSACTION         C:\\DATABASES\\TESTDB.FDB (ATT_36, SYSDBA:NONE, UTF8, TCPv4:192.168.100.3\/59403)                 (TRA_82, READ_COMMITTED | READ_CONSISTENCY | WAIT | READ_WRITE)  2025-06-04T12:38:55.7690 (13224:000000000B6729C0) PREPARE_STATEMENT         C:\\DATABASES\\TESTDB.FDB (ATT_36, SYSDBA:NONE, UTF8, TCPv4:192.168.100.3\/59403)                 (TRA_82, READ_COMMITTED | READ_CONSISTENCY | WAIT | READ_WRITE)  Statement 310: ------------------------------------------------------------------------------- SELECT * FROM orders       0 ms  2025-06-04T12:38:55.7690 (13224:000000000B6729C0) EXECUTE_STATEMENT_START         C:\\DATABASES\\TESTDB.FDB (ATT_36, SYSDBA:NONE, UTF8, TCPv4:192.168.100.3\/59403)                 (TRA_82, READ_COMMITTED | READ_CONSISTENCY | WAIT | READ_WRITE)  Statement 310: ------------------------------------------------------------------------------- SELECT * FROM orders  2025-06-04T12:38:55.7700 (13224:000000000B6729C0) EXECUTE_STATEMENT_FINISH         C:\\DATABASES\\TESTDB.FDB (ATT_36, SYSDBA:NONE, UTF8, TCPv4:192.168.100.3\/59403)                 (TRA_82, READ_COMMITTED | READ_CONSISTENCY | WAIT | READ_WRITE)  Statement 310: ------------------------------------------------------------------------------- SELECT * FROM orders 1 records fetched       0 ms, 5 fetch(es)  2025-06-04T12:38:55.7700 (13224:000000000B6729C0) CLOSE_CURSOR         C:\\DATABASES\\TESTDB.FDB (ATT_36, SYSDBA:NONE, UTF8, TCPv4:192.168.100.3\/59403)  Statement 310: ------------------------------------------------------------------------------- SELECT * FROM orders  2025-06-04T12:38:55.7700 (13224:000000000B6729C0) COMMIT_TRANSACTION         C:\\DATABASES\\TESTDB.FDB (ATT_36, SYSDBA:NONE, UTF8, TCPv4:192.168.100.3\/59403)                 (TRA_82, READ_COMMITTED | READ_CONSISTENCY | WAIT | READ_WRITE)       0 ms, 1 fetch(es), 1 mark(s)  2025-06-04T12:38:55.7850 (13224:000000000B6729C0) FREE_STATEMENT         C:\\DATABASES\\TESTDB.FDB (ATT_36, SYSDBA:NONE, UTF8, TCPv4:192.168.100.3\/59403)<\/code><\/pre>\n<p>\u041d\u0435 \u0442\u043e \u0447\u0442\u043e\u0431\u044b \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043d\u043e \u0447\u0442\u043e-\u0442\u043e: \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 Firebird \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u0438\u044f STATEMENT, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u0442\u0430\u0434\u0438\u0438 PREPARE \u0438 EXECUTE, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u0435 CURSOR, \u044d\u0442\u043e \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f. \u0411\u044b\u043b\u043e \u0431\u044b \u0448\u0438\u043a\u0430\u0440\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0443 \u043f\u043e\u0433\u043b\u0443\u0431\u0436\u0435 \u0432 \u043a\u0438\u0448\u043a\u0438, \u043d\u043e \u0438 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u043f\u0430\u0441\u0438\u0431\u043e.<\/p>\n<p>\u0422\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0435 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043b \u043c\u043e\u0438\u0445 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0439, \u043d\u043e \u043e\u043d, \u043f\u043e\u0445\u043e\u0436\u0435, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u043d\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 Firebird-\u0430, \u0430 \u0434\u043b\u044f \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0442\u043e\u0440\u043e\u0432 \u0438 SQL-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043a\u0442\u043e \u0438 \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0442\u043e\u0440\u043c\u043e\u0437\u044f\u0442 \u0438 \u043a\u0430\u043a\u0438\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0432\u0438\u0441\u044f\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043e\u043b\u0433\u043e.<\/p>\n<p>\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u043e\u0433, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443. \u042f \u043d\u0435 \u043d\u0430\u0447\u0430\u043b \u0440\u0430\u0441\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u043d\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u0440\u043e\u0434\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u042f \u0442\u0430\u043a\u0436\u0435 \u0437\u043d\u0430\u044e, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u043b\u0443\u0448\u0430\u0435\u0442 \u0441\u0435\u0442\u044c \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 \u0434\u0438\u0441\u043a\u043e\u043c, \u044d\u0442\u043e \u0434\u0432\u0435 \u0435\u0433\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u044b, \u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0446\u0435\u043f\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u0433\u0440\u0430\u043d\u0438\u0446. \u041a\u043e\u0434 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043c\u043d\u0435 \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c, \u0438, \u0437\u0430\u0431\u0435\u0433\u0430\u044f \u0432\u043f\u0435\u0440\u0451\u0434, \u044f \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0432\u0435\u0437\u043b\u043e.<\/p>\n<h2>\u0414\u0438\u0441\u043a\u043e\u0432\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438 Data Page Manager<\/h2>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0437\u0430\u0439\u0442\u0438 \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b: \u0447\u0442\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0434\u0430\u043d\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043d\u0430 \u0434\u0438\u0441\u043a\u0435. \u0415\u0441\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 <a href=\"https:\/\/firebirdsql.org\/file\/documentation\/html\/en\/firebirddocs\/firebirdinternals\/firebird-internals.html\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442<\/a>, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043c\u0435\u043d\u0443\u0435\u0442\u0441\u044f \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043c On-Disk Structure (\u043a\u0440\u0430\u0442\u043a\u043e ODS), \u0438 \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c: \u0444\u0430\u0439\u043b \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u0431\u0438\u0442 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0431\u044b\u0432\u0430\u044e\u0442 \u0438\u043b\u0438 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0438\u043b\u0438 \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0445\u0441\u044f \u043a \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c. \u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0442\u0440\u043e\u043a\u0430\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0440\u0430\u0437\u0431\u0438\u0442 \u043d\u0430 \u0434\u0432\u0430 \u0443\u0440\u043e\u0432\u043d\u044f: \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u043e\u0434\u043d\u043e\u0441\u0432\u044f\u0437\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u0436\u0435 \u0445\u0440\u0430\u043d\u044f\u0442 \u0441\u0442\u0440\u043e\u043a\u0438-\u0437\u0430\u043f\u0438\u0441\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u0415\u0441\u0442\u044c \u0435\u0449\u0451 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432, \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a, \u043d\u043e \u043f\u043e\u043a\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u044d\u0442\u043e. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u043e\u0431\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435: \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0435 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0430, \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043a\u0430\u043a \u043b\u0435\u0436\u0430\u0442 \u043f\u043e\u043b\u044f \u0432\u043d\u0443\u0442\u0440\u0438, \u043c\u043e\u0436\u0435\u0442 \u0441\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e? \u0417\u0430\u043f\u0438\u0448\u0435\u043c \u0432 \u043a\u043e\u043f\u0438\u043b\u043e\u0447\u043a\u0443 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043a\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442\u044b \u0432 \u043a\u043e\u0434\u0435.<\/p>\n<p>\u041d\u0443 \u0447\u0442\u043e, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 \u0447\u0442\u043e-\u0442\u043e, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0435\u0435\u0441\u044f \u043a ODS. \u0412 src\/jrd\/ \u0441\u0440\u0430\u0437\u0443 \u043d\u0430\u0445\u043e\u0434\u0438\u043c <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/blob\/v5.0.2\/src\/jrd\/ods.h\" rel=\"noopener noreferrer nofollow\">ods.h<\/a> \u0438 <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/blob\/v5.0.2\/src\/jrd\/ods.cpp\" rel=\"noopener noreferrer nofollow\">ods.cpp<\/a> . \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/blob\/v5.0.2\/src\/jrd\/ods.h#L713\" rel=\"noopener noreferrer nofollow\"><strong>rhd<\/strong><\/a>, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0443\u044e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0437\u0430\u043f\u0438\u0441\u0438, \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c, \u0433\u0434\u0435 \u043e\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0438&#8230; \u043a\u0430\u043a-\u0442\u043e \u0442\u0443\u0445\u043b\u043e: \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u043a\u043e\u0434\u0435 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438, \u0430 \u043c\u043d\u0435-\u0442\u043e \u043d\u0443\u0436\u0435\u043d \u043a\u043e\u0434 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0434\u0430\u043d\u043d\u044b\u043c. \u0427\u0435\u0441\u0442\u043d\u043e \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u044f \u0437\u0430\u0431\u0443\u043a\u0441\u043e\u0432\u0430\u043b, \u043d\u0430\u0447\u0430\u043b \u0438\u0441\u043a\u0430\u0442\u044c, \u0433\u0434\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043d\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u043c\u043e\u0437\u0430\u0438\u043a\u0430 \u0441\u043b\u043e\u0436\u0438\u043b\u0430\u0441\u044c, \u0438 \u0434\u043b\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u0438 \u0441\u0440\u0430\u0437\u0443 \u0441\u043a\u0430\u0436\u0443 \u043e\u0442\u0432\u0435\u0442: \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/blob\/v5.0.2\/src\/jrd\/ods.h#L759\" rel=\"noopener noreferrer nofollow\"><strong>rdhf<\/strong><\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438, \u043d\u043e \u043f\u0435\u0440\u0432\u044b\u0435 6 \u043f\u043e\u043b\u0435\u0439 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0441 \u043f\u043e\u043b\u044f\u043c\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <strong>rdh<\/strong>. <\/p>\n<pre><code class=\"cpp\">\/\/ Record header struct rhd { ULONG rhd_transaction;\/\/ transaction id (lowest 32 bits) ULONG rhd_b_page;\/\/ back pointer USHORT rhd_b_line;\/\/ back line USHORT rhd_flags;\/\/ flags, etc UCHAR rhd_format;\/\/ format version UCHAR rhd_data[1];\/\/ record data };  \/\/ Record header for fragmented record struct rhdf { ULONG rhdf_transaction;\/\/ transaction id (lowest 32 bits) ULONG rhdf_b_page;\/\/ back pointer USHORT rhdf_b_line;\/\/ back line USHORT rhdf_flags;\/\/ flags, etc UCHAR rhdf_format;\/\/ format version    \/\/ until here, same as rhd USHORT rhdf_tra_high;\/\/ higher bits of transaction id ULONG rhdf_f_page;\/\/ next fragment page USHORT rhdf_f_line;\/\/ next fragment line UCHAR rhdf_data[1];\/\/ record data };<\/code><\/pre>\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <strong>rdhf<\/strong> \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/blob\/v5.0.2\/src\/jrd\/dpm.epp\" rel=\"noopener noreferrer nofollow\">dpm.epp<\/a>. \u0425\u043c\u043c, \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 &#171;.epp&#187;, \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 &#171;.cpp&#187;, \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0442\u043e\u0436\u0435 \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 C++, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u043c\u0441\u044f. \u0412 \u0444\u0430\u0439\u043b\u0430\u0445, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0445\u0441\u044f \u043a \u0441\u0431\u043e\u0440\u043a\u0435 \u0447\u0435\u0440\u0435\u0437 cmake, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 (\u0432 builds\/cmake\/BuildFunctions.cmake) \u0444\u0443\u043d\u043a\u0446\u0438\u044e <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/blob\/v5.0.2\/builds\/cmake\/BuildFunctions.cmake#L85\" rel=\"noopener noreferrer nofollow\"><strong>epp_process<\/strong><\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0432\u044b\u0437\u043e\u0432 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u041d\u0435 \u0431\u0443\u0434\u0435\u043c \u0441\u0435\u0439\u0447\u0430\u0441 \u0432 \u044d\u0442\u043e \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f.<\/p>\n<p>\u0412 dpm.epp \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u043c\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/blob\/v5.0.2\/src\/jrd\/dpm.epp#L3255\" rel=\"noopener noreferrer nofollow\"><strong>get_header()<\/strong><\/a>. \u0412\u043e\u0442 \u0447\u0443\u0442\u044c \u043f\u043e\u0434\u0441\u043e\u043a\u0440\u0430\u0449\u0451\u043d\u043d\u044b\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"cpp\">static bool get_header(WIN* window, USHORT line, record_param* rpb) { const data_page* page = (data_page*) window-&gt;win_buffer; if (line &gt;= page-&gt;dpg_count) return false;  const data_page::dpg_repeat* index = &amp;page-&gt;dpg_rpt[line]; if (index-&gt;dpg_offset == 0) return false;  rhdf* header = (rhdf*) ((SCHAR *) page + index-&gt;dpg_offset); rpb-&gt;rpb_page = window-&gt;win_page.getPageNum(); rpb-&gt;rpb_line = line; rpb-&gt;rpb_flags = header-&gt;rhdf_flags;  if (!(rpb-&gt;rpb_flags &amp; rpb_fragment)) { rpb-&gt;rpb_b_page = header-&gt;rhdf_b_page; rpb-&gt;rpb_b_line = header-&gt;rhdf_b_line; rpb-&gt;rpb_transaction_nr = Ods::getTraNum(header); rpb-&gt;rpb_format_number = header-&gt;rhdf_format; }  ULONG header_size = (rpb-&gt;rpb_flags &amp; rpb_long_tranum) ? RHDE_SIZE : RHD_SIZE;  if (rpb-&gt;rpb_flags &amp; rpb_incomplete) { rpb-&gt;rpb_f_page = header-&gt;rhdf_f_page; rpb-&gt;rpb_f_line = header-&gt;rhdf_f_line; header_size = RHDF_SIZE; }  rpb-&gt;rpb_address = (UCHAR*) header + header_size; rpb-&gt;rpb_length = index-&gt;dpg_length - header_size;  return true; }<\/code><\/pre>\n<p>\u041a\u0430\u043a \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u0436\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c, \u043d\u0430 \u043d\u0435\u0451 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u0447\u0442\u043e <em>window-&gt;win_buffer<\/em>, \u0438 \u044d\u0442\u043e\u0442 window \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442. \u041d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442. \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 ods-\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <strong>data_page<\/strong> \u0438 <strong>dpg_rpt<\/strong>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e \u043d\u043e\u043c\u0435\u0440\u0443, \u044d\u0442\u043e \u043d\u0435 \u043f\u043e\u0438\u0441\u043a, \u0430 \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <em>rpb<\/em> (\u043e\u043d \u0436\u0435 &#171;record parameter block&#187;), \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043f\u043e\u0445\u043e\u0436\u0435 \u0438\u0433\u0440\u0430\u0435\u0442 \u0440\u043e\u043b\u044c \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u0438\u0431\u043e \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0435\u0433\u043e \u043f\u043e\u043b\u0435\u0439, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e ods-\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <strong>rhdf<\/strong> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u043e\u043b\u044f\u043c \u0441\u0442\u0440\u043e\u043a\u0438 (<em>back_page<\/em>, <em>back_line<\/em>, <em>transaction<\/em>, <em>format<\/em>), \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u044f\u0442\u044c \u0436\u0435 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 <em>rpb<\/em>. \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0432 \u043f\u043e\u043b\u044f <em>rpb_address<\/em> \u0438 <em>rpb_length<\/em> \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0435\u0441\u044f \u0432 \u0441\u0442\u0440\u043e\u043a\u0435, \u0438 \u0434\u043b\u0438\u043d\u0430 \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u0432\u0430\u0436\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<p>\u0424\u0430\u0439\u043b dpm.epp \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u044d\u0442\u043e &#171;data page manager&#187;. \u0424\u0443\u043d\u043a\u0446\u0438\u044f <strong>get_header()<\/strong> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 (static) \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a <strong>DPM_fetch()<\/strong>, <strong>DPM_fetch_back()<\/strong>, <strong>DPM_fetch_fragment()<\/strong>, <strong>DPM_get()<\/strong>, <strong>DPM_next()<\/strong>. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/blob\/v5.0.2\/src\/jrd\/dpm.epp#L1130\" rel=\"noopener noreferrer nofollow\"><strong>DPM_fetch()<\/strong><\/a><\/p>\n<pre><code class=\"cpp\">bool DPM_fetch(thread_db* tdbb, record_param* rpb, USHORT lock) { SET_TDBB(tdbb);  #ifdef VIO_DEBUG jrd_rel* relation = rpb-&gt;rpb_relation; VIO_trace(DEBUG_READS, \"DPM_fetch (rel_id %u, record_param %\" QUADFORMAT\"d, lock %d)\\n\", relation-&gt;rel_id, rpb-&gt;rpb_number.getValue(), lock);  VIO_trace(DEBUG_READS_INFO, \"    record %\" ULONGFORMAT\":%d\\n\", rpb-&gt;rpb_page, rpb-&gt;rpb_line); #endif  const RecordNumber number = rpb-&gt;rpb_number; RelationPages* relPages = rpb-&gt;rpb_relation-&gt;getPages(tdbb); rpb-&gt;getWindow(tdbb).win_page = PageNumber(relPages-&gt;rel_pg_space_id, rpb-&gt;rpb_page); CCH_FETCH(tdbb, &amp;rpb-&gt;getWindow(tdbb), lock, pag_data);  if (!get_header(&amp;rpb-&gt;getWindow(tdbb), rpb-&gt;rpb_line, rpb)) { CCH_RELEASE(tdbb, &amp;rpb-&gt;getWindow(tdbb)); return false; }  #ifdef VIO_DEBUG VIO_trace(DEBUG_READS_INFO, \"    record  %\" ULONGFORMAT\":%d transaction %\" ULONGFORMAT\" back %\" ULONGFORMAT\":%d fragment %\" ULONGFORMAT\":%d flags %d\\n\", rpb-&gt;rpb_page, rpb-&gt;rpb_line, rpb-&gt;rpb_transaction_nr, rpb-&gt;rpb_b_page, rpb-&gt;rpb_b_line, rpb-&gt;rpb_f_page, rpb-&gt;rpb_f_line, rpb-&gt;rpb_flags); #endif rpb-&gt;rpb_number = number;  return true; }<\/code><\/pre>\n<p>\u041e\u0433\u043e, \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e <strong>VIO_trace()<\/strong>, \u0432\u043e\u0442 \u044d\u0442\u043e \u0431\u044b \u043c\u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0435! \u041d\u043e \u044d\u0442\u0430 \u0448\u0442\u0443\u043a\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 Firebird, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043a\u0430 \u0431\u0435\u0437 \u043d\u0435\u0451, \u0436\u0430\u043b\u043a\u043e-\u0436\u0430\u043b\u043a\u043e. \u0417\u0430\u043d\u044f\u0442\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>DPM_fetch()<\/strong>, \u0442\u0443\u0442 \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e <em>thread_db<\/em>, \u0438 \u0443\u0436\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 \u043d\u0430\u043c <em>rpb<\/em>. \u0418\u0437 \u044d\u0442\u043e\u0433\u043e <em>rpb<\/em> \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0438 \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438\/\u0437\u0430\u043f\u0438\u0441\u0438 <em>rpb_line<\/em>, \u0438 \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b <em>rpb_page<\/em>. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0443, \u0447\u0442\u043e <strong>CCH_FETCH<\/strong> \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0438\u0437 \u043a\u0435\u0448\u0430 \u0438\u043b\u0438 \u0441 \u0434\u0438\u0441\u043a\u0430 \u0432 <em>window-&gt;win_buffer<\/em>. \u0418 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043d\u0430\u043c <strong>get_header()<\/strong>. \u0422\u043e \u0435\u0441\u0442\u044c <em>rpb<\/em> \u0432 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0438\u0437 \u043f\u043e\u043b\u0435\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0430 \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u0435\u0433\u043e \u043f\u043e\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u044b (\u0438 \u0431\u0443\u0444\u0435\u0440 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0435 \u043e\u0442\u0434\u0430\u0451\u043c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e). \u041e\u0434\u043d\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043d\u0430\u0444\u0438\u0433\u0430 \u0432 \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f <em>rpb_number<\/em>, \u043e\u043d \u0436\u0435 \u0438 \u0442\u0430\u043a \u0445\u0440\u0430\u043d\u0438\u043b \u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432 \u043d\u0435\u0433\u043e \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c, \u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0437\u0430\u0447\u0435\u043c \u044d\u0442\u043e\u0442 RecordNumber \u0431\u044b\u043b \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d \u0432\u043e\u043e\u0431\u0449\u0435, \u043e\u043d \u0436\u0435 \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u0422\u0430\u043a\u043e\u0435 \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u0440 \u043a\u043e\u0434\u0430 \u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 <em>rpb_number<\/em> \u043f\u0435\u0440\u0435\u0437\u0430\u0442\u0440\u0451\u0442\u0441\u044f \u0433\u0434\u0435-\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 <strong>get_header()<\/strong>.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/blob\/v5.0.2\/src\/jrd\/dpm.epp#L1444\" rel=\"noopener noreferrer nofollow\"><strong>DPM_get()<\/strong><\/a> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435, \u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0430\u0431\u043e\u0442\u044b. \u0415\u0451 \u043a\u043e\u0434 \u044f \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0441\u043e\u043a\u0440\u0430\u0449\u0430\u043b \u043f\u043e\u0441\u0438\u043b\u044c\u043d\u0435\u0435:<\/p>\n<pre><code class=\"cpp\">bool DPM_get(thread_db* tdbb, record_param* rpb, SSHORT lock_type) {     Database* dbb = tdbb-&gt;getDatabase(); WIN* window = &amp;rpb-&gt;getWindow(tdbb);  \/\/ Find starting point ULONG pp_sequence; USHORT slot, line; rpb-&gt;rpb_number.decompose(dbb-&gt;dbb_max_records, dbb-&gt;dbb_dp_per_pp, line, slot, pp_sequence);  \/\/ Check if the record number is OK if (rpb-&gt;rpb_number.getValue() &lt; 0) return false;  RelationPages* relPages = rpb-&gt;rpb_relation-&gt;getPages(tdbb);  const ULONG dpSequence = rpb-&gt;rpb_number.getValue() \/ dbb-&gt;dbb_max_records; ULONG page_number = relPages-&gt;getDPNumber(dpSequence);  if (page_number) { window-&gt;win_page = page_number; data_page* dpage = (data_page*) CCH_FETCH(tdbb, window, lock_type, pag_undefined);  const bool pageOk = dpage-&gt;dpg_header.pag_type == pag_data &amp;&amp; !(dpage-&gt;dpg_header.pag_flags &amp; (dpg_secondary | dpg_orphan)) &amp;&amp; dpage-&gt;dpg_relation == rpb-&gt;rpb_relation-&gt;rel_id &amp;&amp; dpage-&gt;dpg_sequence == dpSequence &amp;&amp; (dpage-&gt;dpg_count &gt; 0);  if (pageOk &amp;&amp; get_header(window, line, rpb) &amp;&amp; !(rpb-&gt;rpb_flags &amp; (rpb_blob | rpb_chained | rpb_fragment))) { return true; }  CCH_RELEASE(tdbb, window);  if (pageOk) return false; }  \/\/ Find the pointer page, data page, and record pointer_page* page = get_pointer_page(tdbb, rpb-&gt;rpb_relation, relPages, window, pp_sequence, LCK_read);  if (!page) return false;  page_number = page-&gt;ppg_page[slot]; relPages-&gt;setDPNumber(dpSequence, page_number);  if (page_number) { CCH_HANDOFF(tdbb, window, page_number, lock_type, pag_data); if (get_header(window, line, rpb) &amp;&amp; !(rpb-&gt;rpb_flags &amp; (rpb_blob | rpb_chained | rpb_fragment))) { return true; } }  CCH_RELEASE(tdbb, window);  return false; }<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e <strong>RecordNumber<\/strong> \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b: \u0441\u043b\u043e\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u0440\u0438\u0447\u0451\u043c \u0442\u043e, \u043a\u0430\u043a \u044d\u0442\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0437\u0430\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u044b \u0432 \u043d\u043e\u043c\u0435\u0440\u0435, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u0412\u0442\u043e\u0440\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439. \u0412 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0441\u0451 \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 <strong>DPM_fetch()<\/strong>. \u041f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e <strong>DPM_fetch()<\/strong> \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043f\u043e\u0434 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044e \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0430\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u0430 <strong>DPM_get()<\/strong> &#8212; \u043f\u043e\u0434 \u0447\u0442\u0435\u043d\u0438\u0435 \u0441\u0430\u043c\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0427\u0443\u0442\u044c \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0432\u0448\u0438\u0441\u044c \u0441 DPM, \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u0438\u043d\u0443\u0442\u044c\u0441\u044f \u0432\u044b\u0448\u0435, \u043a \u0442\u0435\u043c, \u043a\u0442\u043e \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442.<\/p>\n<h2>VIO<\/h2>\n<p>\u0418\u0437 \u0432\u0441\u0435\u0445 \u043c\u0435\u0441\u0442, \u0433\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f <strong>DPM_fetch()<\/strong> \u0438 <strong>DPM_get()<\/strong>, \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0430\u0439\u043b <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/blob\/v5.0.2\/src\/jrd\/vio.cpp\" rel=\"noopener noreferrer nofollow\">vio.cpp<\/a>, \u0438 \u043e\u0442\u043a\u0440\u044b\u0432 \u0435\u0433\u043e \u043c\u044b \u043f\u043e\u0439\u043c\u0451\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0432\u043e \u0432\u0441\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0443\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u043c\u043d\u043e\u0433\u043e\u0432\u0435\u0440\u0441\u0438\u043e\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u0439 \u0442\u0443\u0442 \u043c\u043d\u043e\u0433\u043e, \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u0447\u0435\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u043f\u0440\u043e\u0449\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0441 <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/blob\/v5.0.2\/src\/jrd\/vio.cpp#L2920\" rel=\"noopener noreferrer nofollow\"><strong>VIO_get()<\/strong><\/a>:<\/p>\n<pre><code class=\"cpp\">bool VIO_get(thread_db* tdbb, record_param* rpb, jrd_tra* transaction, MemoryPool* pool) { SET_TDBB(tdbb);  const USHORT lock_type = (rpb-&gt;rpb_stream_flags &amp; RPB_s_update) ? LCK_write : LCK_read;  if (!DPM_get(tdbb, rpb, lock_type) || !VIO_chase_record_version(tdbb, rpb, transaction, pool, false, false)) { return false; }  if (pool &amp;&amp; !(rpb-&gt;rpb_runtime_flags &amp; RPB_undo_data)) { if (rpb-&gt;rpb_stream_flags &amp; RPB_s_no_data) { CCH_RELEASE(tdbb, &amp;rpb-&gt;getWindow(tdbb)); rpb-&gt;rpb_address = NULL; rpb-&gt;rpb_length = 0; } else VIO_data(tdbb, rpb, pool); }  tdbb-&gt;bumpRelStats(RuntimeStatistics::RECORD_IDX_READS, rpb-&gt;rpb_relation-&gt;rel_id); return true; }<\/code><\/pre>\n<p>\u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u043e\u0441\u0442\u043e: \u043e\u043f\u0442\u0438\u043c\u0438\u0441\u0442\u0438\u0447\u043d\u043e \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0432\u0437\u044f\u0442\u044c \u0442\u0443 \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0442\u0440\u043e\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0430\u043c\u0430\u044f \u043d\u043e\u0432\u0430\u044f, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, \u0438\u0449\u0435\u043c \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445. \u041f\u043e\u0442\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435\u043c <strong>VIO_data()<\/strong>. \u041d\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u044d\u0442\u0443 <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/blob\/v5.0.2\/src\/jrd\/vio.cpp#L1759\" rel=\"noopener noreferrer nofollow\"><strong>VIO_data()<\/strong><\/a>, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0434\u043b\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u0438 \u0443\u0431\u0440\u0430\u043b \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0443\u044e \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0443 \u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u043e\u0443\u0447\u0430\u0435\u0442 \u043d\u0435\u043a\u0443\u044e \u0412\u0438\u0440\u0434\u0436\u0438\u043d\u0438\u044e.<\/p>\n<pre><code class=\"cpp\">void VIO_data(thread_db* tdbb, record_param* rpb, MemoryPool* pool) { SET_TDBB(tdbb);  jrd_rel* const relation = rpb-&gt;rpb_relation;  \/\/ If we're not already set up for this format version number, find \/\/ the format block and set up the record block.  This is a performance \/\/ optimization.  Record* const record = VIO_record(tdbb, rpb, NULL, pool); const Format* const format = record-&gt;getFormat();  record-&gt;setTransactionNumber(rpb-&gt;rpb_transaction_nr);  \/\/ If the record is a delta version, start with data from prior record. UCHAR* tail; const UCHAR* tail_end;  Difference difference;  \/\/ Primary record version not uses prior version Record* prior = (rpb-&gt;rpb_flags &amp; rpb_chained) ? rpb-&gt;rpb_prior : nullptr;  if (prior) { tail = difference.getData(); tail_end = tail + difference.getCapacity();  if (prior != record) record-&gt;copyDataFrom(prior); } else { tail = record-&gt;getData(); tail_end = tail + record-&gt;getLength(); }  \/\/ Set up prior record point for next version rpb-&gt;rpb_prior = (rpb-&gt;rpb_b_page &amp;&amp; (rpb-&gt;rpb_flags &amp; rpb_delta)) ? record : NULL;  \/\/ Snarf data from record tail = unpack(rpb, tail_end - tail, tail);  RuntimeStatistics::Accumulator fragments(tdbb, relation, RuntimeStatistics::RECORD_FRAGMENT_READS);  if (rpb-&gt;rpb_flags &amp; rpb_incomplete) { const ULONG back_page  = rpb-&gt;rpb_b_page; const USHORT back_line = rpb-&gt;rpb_b_line; const USHORT save_flags = rpb-&gt;rpb_flags; const ULONG save_f_page = rpb-&gt;rpb_f_page; const USHORT save_f_line = rpb-&gt;rpb_f_line;  while (rpb-&gt;rpb_flags &amp; rpb_incomplete) { DPM_fetch_fragment(tdbb, rpb, LCK_read); tail = unpack(rpb, tail_end - tail, tail); ++fragments; }  rpb-&gt;rpb_b_page = back_page; rpb-&gt;rpb_b_line = back_line; rpb-&gt;rpb_flags = save_flags; rpb-&gt;rpb_f_page = save_f_page; rpb-&gt;rpb_f_line = save_f_line; }  CCH_RELEASE(tdbb, &amp;rpb-&gt;getWindow(tdbb));  \/\/ If this is a delta version, apply changes ULONG length; if (prior) { const auto diffLength = tail - difference.getData(); length = difference.apply(diffLength, record-&gt;getLength(), record-&gt;getData()); } else { length = tail - record-&gt;getData(); }  if (format-&gt;fmt_length != length) { BUGCHECK(183);\/\/ msg 183 wrong record length }  rpb-&gt;rpb_address = record-&gt;getData(); rpb-&gt;rpb_length = format-&gt;fmt_length; }<\/code><\/pre>\n<p>\u041f\u043e\u043a\u0430 \u043f\u0440\u043e\u0441\u043a\u043e\u0447\u0438\u043c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u043e <strong>Record<\/strong> \u0438 <strong>Format<\/strong>, \u0438 \u0434\u043e\u0431\u0435\u0440\u0451\u043c\u0441\u044f \u0434\u043e \u0432\u044b\u0437\u043e\u0432\u0430 <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/blob\/v5.0.2\/src\/jrd\/vio.cpp#L573\" rel=\"noopener noreferrer nofollow\"><strong>unpack()<\/strong><\/a> \u0432 \u0441\u0442\u0440\u043e\u0447\u043a\u0435 39. \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e DPM-\u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>get_header()<\/strong> \u0443\u0436\u0435 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0432 \u043f\u043e\u043b\u044f <em>rpb_address<\/em> \u0438 <em>rpb_length<\/em>. \u0421\u0430\u043c\u0430 <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/blob\/v5.0.2\/src\/jrd\/vio.cpp#L573\" rel=\"noopener noreferrer nofollow\"><strong>unpack()<\/strong><\/a> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0444\u043b\u0430\u0433 <em>rpb_not_packed<\/em>, \u0435\u0441\u043b\u0438 \u043e\u043d \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d, \u0442\u043e \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0443 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e, \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0431\u0430\u0439\u0442\u044b, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0443\u043b\u044f\u043c\u0438 \u0432 \u043a\u043e\u043d\u0446\u0435. \u042d\u0442\u043e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 5.0 (<a href=\"https:\/\/habr.com\/ru\/articles\/785590\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430 \u0425\u0430\u0431\u0440\u0435<\/a>). \u0415\u0441\u043b\u0438 \u0436\u0435 \u0444\u043b\u0430\u0433\u0430 \u043d\u0435\u0442, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f RLE-\u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430.<\/p>\n<pre><code class=\"cpp\">inline UCHAR* unpack(record_param* rpb, ULONG outLength, UCHAR* output) { if (rpb-&gt;rpb_flags &amp; rpb_not_packed) { const auto length = MIN(rpb-&gt;rpb_length, outLength); memcpy(output, rpb-&gt;rpb_address, length); output += length;  if (rpb-&gt;rpb_length &gt; length) { \/\/ Short records may be zero-padded up to the fragmented header size. \/\/ Take it into account while checking for a possible buffer overrun.  auto tail = rpb-&gt;rpb_address + length; const auto end = rpb-&gt;rpb_address + rpb-&gt;rpb_length;  while (tail &lt; end) { if (*tail++) BUGCHECK(179);\/\/ msg 179 decompression overran buffer } }  return output; } return Compressor::unpack(rpb-&gt;rpb_length, rpb-&gt;rpb_address, outLength, output); }  UCHAR* Compressor::unpack(ULONG inLength, const UCHAR* input,   ULONG outLength, UCHAR* output) { const auto end = input + inLength; const auto output_end = output + outLength;  while (input &lt; end) { const int length = (signed char) *input++;  if (length &lt; 0) { auto zipLength = (unsigned) -length;  if (length == -1) { zipLength = get_short(input); input += sizeof(USHORT); } else if (length == -2) { zipLength = get_long(input); input += sizeof(ULONG); }  if (input &gt;= end || output + zipLength &gt; output_end) BUGCHECK(179);\/\/ msg 179 decompression overran buffer  const auto c = *input++; memset(output, c, zipLength); output += zipLength; } else { if (input + length &gt; end || output + length &gt; output_end) BUGCHECK(179);\/\/ msg 179 decompression overran buffer  memcpy(output, input, length); output += length; input += length; } }  if (output &gt; output_end) BUGCHECK(179);\/\/ msg 179 decompression overran buffer  return output; }<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0432\u0441\u0451 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e: \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0439 \u0431\u0430\u0439\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 0 (\u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0441\u0442\u0430\u0440\u0448\u0438\u0439 \u0431\u0438\u0442), \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u041f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u043c, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u043c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u0442\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u0438 \u043e\u0447\u0435\u043d\u044c \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439, \u044d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0432 Firebird 5.0 .<\/p>\n<p>\u0415\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u0435, \u043f\u043e\u043a\u0430 \u0443\u043c\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 &#171;\u0433\u043e\u0440\u044f\u0447\u0438\u0439&#187;, \u0442\u043e \u0435\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0430\u0441\u0442\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u0430\u0436\u043d\u0430. \u041f\u0435\u0440\u0432\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442: \u0441\u0442\u0440\u043e\u043a\u0430 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u044f \u0434\u043e \u043a\u043e\u043d\u0446\u0430, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 500 \u043f\u043e\u043b\u0435\u0439, \u0430 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0437 \u043d\u0435\u0451 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0435 \u0434\u0432\u0430 \u043f\u043e\u043b\u044f. \u0414\u043b\u044f \u043d\u0435\u0437\u0430\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u043d <strong>memcpy()<\/strong> \u0432\u0441\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. \u042d\u0442\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u043f\u043e\u0437\u0436\u0435 \u0435\u0449\u0451 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c. \u0412\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u043d\u0435 \u0442\u0430\u043a \u0443\u0432\u0435\u0440\u0435\u043d: \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043c\u0443\u0449\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u043a\u0430\u043a \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0447\u0430\u0449\u0435, \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u0435\u043d\u044b \u0434\u0432\u0430 if-\u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u0445\u043e\u0442\u044f \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0434\u043d\u043e. \u041d\u043e \u0445\u0440\u0435\u043d \u0437\u043d\u0430\u0435\u0442, \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u0443 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e.<\/p>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a <strong>VIO_data()<\/strong>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 <strong>unpack()<\/strong> \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u043e\u0434, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u043e\u0438\u0442 <strong>CCH_RELEASE<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043f\u043e\u0445\u043e\u0436\u0435, \u043e\u0442\u0434\u0430\u0451\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432 \u043a\u0435\u0448. \u041b\u043e\u0433\u0438\u0447\u043d\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043c\u044b \u043e\u0442\u0442\u0443\u0434\u0430 \u0443\u0436\u0435 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b\u0438. \u042f \u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d \u043d\u0430 100%, \u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0447\u0442\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0431\u044b\u043b\u0430 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0430, \u043f\u043e\u043a\u0430 \u043c\u044b \u043a \u043d\u0435\u0439 \u043e\u0431\u0440\u0430\u0449\u0430\u043b\u0438\u0441\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0443\u0447\u0448\u0435, \u0447\u0442\u043e\u0431\u044b <strong>CCH_RELEASE<\/strong> \u0431\u044b\u043b \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u043d\u044c\u0448\u0435. \u041b\u043e\u0433\u0438\u0447\u043d\u043e, \u0447\u0442\u043e \u043a\u043e\u0434, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0439 delta-\u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 (\u0432\u0435\u0440\u0441\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c), \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 <strong>CCH_RELEASE<\/strong>. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043b\u0438 \u0442\u043e\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 <strong>CCH_RELEASE<\/strong>? \u041f\u043e\u0434\u0443\u043c\u0430\u044e \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>\u0412 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435 <strong>VIO_data()<\/strong> \u043c\u044b \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u043b\u044f <em>rpb_address<\/em> \u0438 <em>rpb_length<\/em> \u043d\u0430 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u0442\u0440\u043e\u043a\u0438. \u041d\u043e, \u043c\u0438\u043d\u0443\u0442\u043e\u0447\u043a\u0443! \u0410 \u043a\u0443\u0434\u0430 \u043c\u044b \u0435\u0433\u043e \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043b\u0438-\u0442\u043e? \u041c\u044b \u043f\u0440\u043e\u0441\u043a\u043e\u0447\u0438\u043b\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 <strong>Record<\/strong> \u0438 <strong>Format<\/strong>, \u043d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u0442\u0443\u0434\u0430.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/blob\/v5.0.2\/src\/jrd\/vio.cpp#L3847\" rel=\"noopener noreferrer nofollow\"><strong>VIO_Record()<\/strong><\/a> \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f:<\/p>\n<pre><code class=\"cpp\">Record* VIO_record(thread_db* tdbb, record_param* rpb, const Format* format, MemoryPool* pool) { SET_TDBB(tdbb); \/\/ If format wasn't given, look one up if (!format) format = MET_format(tdbb, rpb-&gt;rpb_relation, rpb-&gt;rpb_format_number);  Record* record = rpb-&gt;rpb_record;  if (!record) { if (!pool) pool = rpb-&gt;rpb_relation-&gt;rel_pool;  record = rpb-&gt;rpb_record = FB_NEW_POOL(*pool) Record(*pool, format); } record-&gt;reset(format); return record; }<\/code><\/pre>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f, \u043d\u0435\u043b\u044c\u0437\u044f \u043b\u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <em>rpb_record<\/em>, \u0435\u0441\u043b\u0438 \u0442\u0430\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u0442, \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0438\u0437 \u043f\u0443\u043b\u0430, \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 <em>rpb<\/em>. \u041e\u0445 \u0443\u0436 \u044d\u0442\u043e\u0442 <em>rpb<\/em>, \u044d\u0442\u043e \u043f\u0440\u044f\u043c\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043e\u043d \u0436\u0435 \u0441\u043b\u0443\u0436\u0438\u0442 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0418\u0437 <strong>VIO_data()<\/strong> \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>VIO_record()<\/strong> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <em>format<\/em>, \u0440\u0430\u0432\u043d\u044b\u043c null, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d <strong>MET_format()<\/strong>.<\/p>\n<h2>Metadata<\/h2>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043e\u043d\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/blob\/v5.0.2\/src\/jrd\/met.epp\" rel=\"noopener noreferrer nofollow\">met.epp<\/a>. \u0421\u0443\u0434\u044f \u043f\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0430\u0439\u043b\u0430, \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0439\u0441\u044f \u043a \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c. \u0418\u0442\u0430\u043a, \u0444\u0443\u043d\u043a\u0446\u0438\u044f <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/blob\/v5.0.2\/src\/jrd\/met.epp#L1424\" rel=\"noopener noreferrer nofollow\"><strong>MET_format()<\/strong><\/a>:<\/p>\n<pre><code class=\"cpp\">Format* MET_format(thread_db* tdbb, jrd_rel* relation, USHORT number) { SET_TDBB(tdbb); Attachment* attachment = tdbb-&gt;getAttachment(); Database* dbb = tdbb-&gt;getDatabase();  Format* format; vec&lt;Format*&gt;* formats = relation-&gt;rel_formats; if (formats &amp;&amp; (number &lt; formats-&gt;count()) &amp;&amp; (format = (*formats)[number])) { return format; }  format = NULL; AutoCacheRequest request(tdbb, irq_r_format, IRQ_REQUESTS);  FOR(REQUEST_HANDLE request) X IN RDB$FORMATS WITH X.RDB$RELATION_ID EQ relation-&gt;rel_id AND X.RDB$FORMAT EQ number { blb* blob = blb::open(tdbb, attachment-&gt;getSysTransaction(), &amp;X.RDB$DESCRIPTOR);  \/\/ Use generic representation of formats with 32-bit offsets  HalfStaticArray&lt;UCHAR, BUFFER_MEDIUM&gt; buffer; blob-&gt;BLB_get_data(tdbb, buffer.getBuffer(blob-&gt;blb_length), blob-&gt;blb_length); unsigned bufferPos = 2; USHORT count = buffer[0] | (buffer[1] &lt;&lt; 8);  format = Format::newFormat(*relation-&gt;rel_pool, count);  Array&lt;Ods::Descriptor&gt; odsDescs; Ods::Descriptor* odsDesc = odsDescs.getBuffer(count); memcpy(odsDesc, buffer.begin() + bufferPos, count * sizeof(Ods::Descriptor));  for (Format::fmt_desc_iterator desc = format-&gt;fmt_desc.begin();  desc &lt; format-&gt;fmt_desc.end(); ++desc, ++odsDesc) { *desc = *odsDesc; if (odsDesc-&gt;dsc_offset) format-&gt;fmt_length = odsDesc-&gt;dsc_offset + desc-&gt;dsc_length; }  const UCHAR* p = buffer.begin() + bufferPos + count * sizeof(Ods::Descriptor); count = p[0] | (p[1] &lt;&lt; 8); p += 2;  Array&lt;UCHAR&gt; tmpArray;\/\/ must be aligned for the maximum datatype align requirement while (count-- &gt; 0) { USHORT offset = p[0] | (p[1] &lt;&lt; 8); p += 2;  Ods::Descriptor odsDflDesc; memcpy(&amp;odsDflDesc, p, sizeof(odsDflDesc)); p += sizeof(Ods::Descriptor);  dsc desc = odsDflDesc;  desc.dsc_address = tmpArray.getBuffer(desc.dsc_length, false); memcpy(desc.dsc_address, p, desc.dsc_length); EVL_make_value(tdbb, &amp;desc, &amp;format-&gt;fmt_defaults[offset], relation-&gt;rel_pool);  p += desc.dsc_length; } } END_FOR  if (!format) format = Format::newFormat(*relation-&gt;rel_pool);  format-&gt;fmt_version = number;  \/\/ Link the format block into the world  formats = relation-&gt;rel_formats = vec&lt;Format*&gt;::newVector(*relation-&gt;rel_pool, relation-&gt;rel_formats, number + 1); (*formats)[number] = format;  return format; }<\/code><\/pre>\n<p>\u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f, \u0432\u0434\u0440\u0443\u0433 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u0443\u0436\u0435 \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 <em>relation-&gt;rel_formats<\/em>, \u0435\u0441\u043b\u0438 \u0434\u0430, \u0442\u043e \u0437\u0430\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u043e\u0442\u0442\u0443\u0434\u0430. \u0410 \u0432\u043e\u0442 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435! \u0412\u0438\u0434\u0438\u043c\u043e, epp-\u0444\u0430\u0439\u043b\u044b \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043d\u0430 SQL-\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441. \u0418\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b <strong>RDB$FORMATS<\/strong> \u0437\u0430\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0430\u0442 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u0438\u0437 BLOB-\u043f\u043e\u043b\u044f (BLOB &#8212; \u044d\u0442\u043e SQL-\u0442\u0438\u043f \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043d\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0431\u0430\u0439\u0442\u043e\u0432) \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u0430\u044f: \u043f\u0435\u0440\u0432\u044b\u0435 \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 &#8212; \u044d\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u0435\u0439, \u0438 \u044d\u0442\u0438 \u043f\u043e\u043b\u044f \u043f\u0430\u0440\u0441\u044f\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <strong>Ods::Descriptor<\/strong>. \u041e\u0433\u043e, \u043c\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u0441 ODS, \u0438 \u0432\u0435\u0440\u043d\u0443\u043b\u0438\u0441\u044c \u043e\u043f\u044f\u0442\u044c \u043a \u043d\u0435\u043c\u0443 \u0436\u0435, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043d\u0435\u0433\u043e.<\/p>\n<pre><code class=\"cpp\">struct Descriptor { UCHARdsc_dtype; SCHARdsc_scale; USHORTdsc_length; SSHORTdsc_sub_type; USHORTdsc_flags; ULONGdsc_offset; };<\/code><\/pre>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u043e\u0442 \u0438 \u043e\u043d, \u0444\u043e\u0440\u043c\u0430\u0442 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0442\u0430\u0431\u043b\u0438\u0446. \u0421\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0442\u0443\u0442 <em>dsc_offset<\/em>, \u043e\u043d \u0432\u0440\u043e\u0434\u0435 \u043a\u0430\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442\u044c \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u043f\u043e\u043b\u044f\u043c \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443, \u043d\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u044f \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e. \u041f\u043e\u043a\u0430 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u043f\u043e\u043b\u0435\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b \u0442\u0438\u043f\u0430 VARCHAR, \u043d\u043e \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0435\u0449\u0451 \u0434\u043e\u0431\u0435\u0440\u0451\u043c\u0441\u044f. \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 <strong>MET_format()<\/strong>, \u0432 \u0446\u0438\u043a\u043b\u0435 for \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0434\u043b\u0438\u043d\u044b \u0441\u0442\u0440\u043e\u043a\u0438: \u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043f\u043e \u043f\u043e\u043b\u044f\u043c, \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043f\u043e\u043b\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440. \u041d\u0443 \u043b\u0430\u0434\u043d\u043e, \u0445\u043e\u0442\u044f \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043f\u043e\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c. \u0412\u0442\u043e\u0440\u043e\u0439 \u0446\u0438\u043a\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u043f\u043e\u043b\u0435\u0439. \u0412 \u043a\u043e\u043d\u0446\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 <strong>Format<\/strong> \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 relation.rel_formats \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0439.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u0443\u0434\u0430 \u0436\u0435 \u043c\u044b \u0432\u0441\u0451 \u0442\u0430\u043a\u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0443. \u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>VIO_Record()<\/strong> \u0435\u0441\u0442\u044c \u0432\u044b\u0437\u043e\u0432 <em>record-&gt;reset(format)<\/em> , \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u043e\u0442 \u0447\u0442\u043e:<\/p>\n<pre><code class=\"cpp\">void reset(const Format* format = NULL) { if (format &amp;&amp; format != m_format) { m_data.resize(format-&gt;fmt_length); m_format = format; } m_fake_nulls = false; }<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0435 <em>m_data<\/em> &#8212; \u044d\u0442\u043e <strong>Firebird::Array<\/strong> , \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440-\u043c\u0430\u0441\u0441\u0438\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0432\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440.<\/p>\n<p>\u041d\u0430\u0441\u0447\u0451\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0435\u0441\u0442\u044c <em>offset<\/em>, \u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442\u0441\u044f \u0441 \u043d\u0430\u043b\u0438\u0447\u0438\u0435\u043c \u043f\u043e\u043b\u0435\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b, \u044f \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0443 \u0432\u043e\u0442 \u0447\u0442\u043e: \u043d\u0435\u0442 \u0432 Firebird \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u043e\u043b\u0435\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b, VARCHAR \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a CHAR, \u043d\u043e \u0445\u0432\u043e\u0441\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043d\u0443\u043b\u0435\u0432\u044b\u0445 \u0431\u0430\u0439\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0436\u0438\u043c\u0430\u044e\u0442\u0441\u044f RLE-\u043c\u0435\u0442\u043e\u0434\u043e\u043c.<\/p>\n<p>\u0414\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u0448\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d <strong>Format<\/strong>, \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u043b\u043e\u0441\u044c: \u0432 \u0442\u043e\u043c \u043a\u043e\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0438 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>VIO_data()<\/strong> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <em>fmt_length<\/em> \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0447\u0442\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u043b\u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440. \u041d\u043e \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0444\u043e\u0440\u043c\u0430\u0442 \u0441\u0446\u0435\u043f\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u0431\u0430\u0439\u0442\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a\u0438. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0447\u0430\u0441\u0442\u044f\u0445 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0441\u0442\u043e\u0438\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0430\u0443\u0437\u0443 \u0438 \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u043e\u0431\u043e\u0431\u0449\u0438\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u043d\u044f\u0442\u044c. \u0421\u0430\u043c\u043e\u0439 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439, \u0434\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u0434\u043d\u044f\u0442\u044c\u0441\u044f, \u0431\u044b\u043b\u0430 <strong>VIO_get()<\/strong>, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u0430\u044f \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u041e\u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 <em>rpb<\/em>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u0430 (relation) \u0438 \u043d\u0435\u043a\u0438\u0439 \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u044b \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u043d\u043e\u043c\u0435\u0440 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>DPM_get()<\/strong>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451) \u0438 \u043d\u0430\u0439\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>VIO_data()<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u0442 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 <strong>Firebird::Array<\/strong> \u0438 \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0435\u0451 \u0441 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u041c\u044b \u043e\u0442\u0432\u0435\u0442\u0438\u043b\u0438 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u0430\u043a \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043f\u043e\u043b\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u0440\u043e\u043a: \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439.<\/p>\n<p>\u0412 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e Firebird \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u0442\u0440\u043e\u043a \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u044b. \u041a\u0430\u043a \u043c\u044b \u0432\u0438\u0434\u0435\u043b\u0438, \u0432 \u0442\u043e\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u0430, \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b \u044d\u0442\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0430. \u0418\u0437 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u044b \u0443\u0437\u043d\u0430\u043b\u0438, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 Format, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432, \u0438 \u043d\u043e\u043c\u0435\u0440 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0441\u0442\u0440\u043e\u043a\u0438. \u0415\u0441\u043b\u0438 \u0442\u0430\u043a, \u0442\u043e \u044f \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0447\u0438\u0442\u0430\u0435\u0442 \u0442\u0430\u043a\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e Format \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435, \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u043b\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0438 \u043a\u0430\u043a-\u0442\u043e \u0438\u0445 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c. \u0422\u0430\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0433\u0434\u0435-\u0442\u043e \u0432 vio.cpp, \u0438 \u043e\u043d\u0430, \u044f \u0434\u0443\u043c\u0430\u044e, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <strong>VIO_data()<\/strong>.<\/p>\n<p>\u041f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043d\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f\/\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0441\u043f\u0440\u044f\u0442\u0430\u043d \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 <strong>CCH_FETCH()<\/strong>\/<strong>CCH_RELEASE()<\/strong> , \u044d\u0442\u0443 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0443\u044e \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u044b \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438, \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0434\u0435\u044f\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u043d\u0435\u0439 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c.<\/p>\n<p>\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u0434\u043d\u044f\u0442\u044c\u0441\u044f \u043a \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u043c \u0441\u043b\u043e\u044f\u043c \u043b\u043e\u0433\u0438\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<h2>\u0421\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430<\/h2>\n<p>\u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u043e\u043c\u0443 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c \u0438 \u043a\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043f\u043e\u0437\u043d\u0430\u043d\u0438\u044f, \u0434\u0443\u043c\u0430\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0438\u0437\u0432\u043e\u043b\u044c\u0442\u0435!<\/p>\n<ol>\n<li>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c RLE-\u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a: \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0439 \u0431\u0430\u0439\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u043d\u0443\u043b\u044f, \u0442\u043e \u0431\u0435\u0440\u0451\u043c \u0435\u0433\u043e \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e, \u0438 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0431\u0430\u0439\u0442\u0430. \u0414\u0432\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f: -1 \u0438 -2 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u0438 \u0441\u0443\u043f\u0435\u0440-\u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432. \u041f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f?<\/p>\n<\/li>\n<li>\n<p>\u041c\u044b \u0432\u0438\u0434\u0435\u043b\u0438, \u0447\u0442\u043e \u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044b (relation) \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432. \u041a\u0430\u043a Firebird \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u0431\u0440\u0430\u0442\u044c \u0438 \u0441\u0446\u0435\u043f\u043b\u044f\u0442\u044c \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439?<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0433\u0438\u043f\u043e\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e: \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u0438\u0437 \u0441\u0442\u0440\u043e\u043a\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0439 \u043d\u0430\u043c Format, \u043f\u043e\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0441 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a, \u0447\u0442\u043e <strong>unpack()<\/strong> \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043b\u0443\u0447\u0430\u0439 <em>rpb_record_not_packed<\/em>, \u0430 \u0432\u043e\u0442 <strong>Compressor::unpack()<\/strong> &#8212; \u043d\u0435 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041a\u0430\u043a \u0435\u0433\u043e \u043f\u043e\u0447\u0438\u043d\u0438\u0442\u044c? \u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0443\u0445\u0443\u0434\u0448\u0438\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c?<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0431\u044b\u043b\u043e \u0432\u044b\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u043e\u0432\u0435\u0440\u0441\u0438\u043e\u043d\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c Format \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u044b. \u041a\u0430\u043a, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f SQL, \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c?<\/p>\n<\/li>\n<\/ol>\n<h2>\u0427\u0442\u043e \u043d\u0435 \u0432\u043e\u0448\u043b\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u044e<\/h2>\n<p>\u0421\u0442\u0430\u043b\u043e \u043c\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u0430\u043a \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442 RLE-\u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443 Compressor::unpack(), \u0432\u0430\u0436\u043d\u0430\u044f \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f! \u0412\u0434\u0440\u0443\u0433 \u0442\u0430\u043c \u0432\u0441\u0451 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c \u0441\u0443\u043f\u0435\u0440-\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e?<br \/> \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u044e IDA Freeware, \u043f\u0440\u043e\u0448\u0443 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c <strong>firebird.exe<\/strong>, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u043f\u0443\u0442\u044c \u043a <strong>firebird.pdb<\/strong>, \u043e\u043d \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442. \u0418\u0449\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0438 \u0438\u0445 \u043d\u0435\u0442. \u0412\u043e\u043e\u0431\u0449\u0435 \u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0438\u0441\u044c \u0441 &#171;VIO_&#187;. \u0427\u0442\u043e \u0437\u0430 \u0435\u0440\u0443\u043d\u0434\u0430? \u041c\u043e\u0436\u0435\u0442, \u0444\u0430\u0439\u043b \u043d\u0435 \u0442\u043e\u0442? \u0413\u043b\u044f\u043d\u0443\u043b, firebird.exe \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u043a\u043e\u043b\u043e \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u0430, \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u043e. \u0417\u0430\u0433\u043b\u044f\u043d\u0443\u043b \u0432 plugins\/ , \u0442\u0430\u043c \u043b\u0435\u0436\u0438\u0442 <strong>engine13.dll<\/strong>, \u043e\u043d \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 8 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442, \u0438 pdb-\u0444\u0430\u0439\u043b \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0438\u043c\u0435\u0435\u0442\u0441\u044f. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u044e \u0435\u0433\u043e \u0432 IDA, \u0444\u0444\u0443\u0445, \u044d\u0442\u043e \u043e\u043d\u043e. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0431\u0435\u0437 \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u043e\u0432, \u0432\u0441\u0435 if-\u044b \u043d\u0430 \u0441\u0432\u043e\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 (\u043f\u043b\u043e\u0445\u0438\u0445).<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/918552\/\"> https:\/\/habr.com\/ru\/articles\/918552\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439 \u044f \u0437\u0430\u043b\u0435\u0437\u0443 \u0432\u043d\u0443\u0442\u0440\u044c \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 Firebird. \u042d\u0442\u043e \u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0438 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044f \u0441\u0432\u043e\u044e \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e: \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0434\u0440\u043e\u0431\u0438\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0431\u0430\u0437\u044b \u043d\u0430 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043d\u0435 \u0431\u0443\u0434\u0443 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043a\u0430\u0436\u0434\u0443\u044e \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0438 \u043d\u0435 \u0431\u0443\u0434\u0443 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0432 \u0432\u0438\u0434\u0435 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432, \u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0435\u043b\u043a\u0430\u043c\u0438. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u044f \u0431\u0443\u0434\u0443 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043a\u0443\u0441\u043a\u0438 \u043a\u043e\u0434\u0430, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u0438 \u043a\u0430\u043a \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443. \u042f \u0432\u0435\u0440\u044e, \u0447\u0442\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 core-\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u043c \u0441\u043b\u043e\u0436\u043d\u044b\u043c, \u043d\u043e \u0441\u0430\u043c\u044b\u043c \u0432\u0430\u0436\u043d\u044b\u043c \u0448\u0430\u0433\u043e\u043c, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u043d\u0430\u0447\u0430\u0442\u044c. \u0410 \u043d\u044e\u0430\u043d\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c 50%-70% \u043a\u043e\u0434\u0430, \u043f\u043e\u0442\u043e\u043c \u0438\u0437\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043b\u0435\u0433\u0447\u0435. \u041d\u043e \u043b\u0435\u0433\u0447\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0442\u043e\u043c, \u0430 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0441\u043a\u0443\u0447\u043d\u043e\u0433\u043e C++ \u043a\u043e\u0434\u0430.<\/p>\n<p>\u042f \u043e\u0447\u0435\u043d\u044c \u043f\u043b\u043e\u0445\u043e \u0437\u043d\u0430\u044e C++, \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 Firebird \u0432\u0438\u0436\u0443 \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437, \u043a\u0430\u043a SQL-\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0437\u043d\u0430\u043a\u043e\u043c \u0441 Firebird \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0433\u043b\u0443\u0431\u043e\u043a\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u043e\u0438\u0445 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439 \u0442\u0430\u043a\u043e\u0435 \u0441\u0435\u0431\u0435.<\/p>\n<h2>\u041d\u0430\u0447\u0430\u043b\u043e<\/h2>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c, \u043d\u0430\u043c \u043b\u0443\u0447\u0448\u0435 \u0438\u043c\u0435\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432. \u0417\u0430\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0441\u0430\u0439\u0442 \u0438 \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043f\u043e\u043c\u0438\u043c\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439! \u042d\u0442\u043e \u0442\u0430\u043a \u043c\u0438\u043b\u043e, \u043a\u0430\u0447\u0430\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e, \u044f \u0431\u0440\u0430\u043b \u0432\u0435\u0440\u0441\u0438\u044e 5.0.2, \u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043c\u043e\u0438\u0445 \u0438\u0437\u044b\u0441\u043a\u0430\u043d\u0438\u0439 \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u044b \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439, \u0438 \u0441 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u044b \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445.<\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u043e\u0433\u043e, \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438. \u041e\u043d\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043d\u0430 github. \u041f\u0440\u0438\u044f\u0442\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0442\u0435\u0433\u0438, \u043a\u0430\u0447\u0430\u0435\u043c \u0442\u0435\u0433 5.0.2.<\/p>\n<p>\u042f \u0441\u043c\u0435\u043b\u043e \u0437\u0430\u044f\u0432\u0438\u043b, \u0447\u0442\u043e \u0431\u0443\u0434\u0443 \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 core-\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u043e \u0434\u0430\u0436\u0435 \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e, \u0438 \u044f \u0432\u044b\u0431\u0435\u0440\u0443 \u0434\u043b\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u0447\u0430\u0441\u0442\u044c core-\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430. \u041a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u044f\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0433\u0434\u0435-\u0442\u043e \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u0438 \u0443\u043c\u0435\u044e\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u044d\u0442\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c. \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f, \u0431\u0443\u0434\u0443 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u043e\u043d\u0438 \u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f: \u0445\u043e\u0447\u0443 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0443\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 SELECT-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432 \u0432\u0438\u0434\u0435 \u0431\u0430\u0439\u0442\u043e\u0432 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0438 \u0434\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043f\u043e \u0441\u0435\u0442\u0438.<\/p>\n<p>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f &#8212; \u044d\u0442\u043e \u043e\u0442\u043a\u0443\u0434\u0430 \u0442\u0435\u0431\u044f, \u0431\u043b\u0438\u043d, \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0447\u0442\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u0451\u043b \u043d\u0435 \u0432 \u0434\u0435\u0431\u0440\u0438, \u0430 \u043a\u0443\u0434\u0430 \u043d\u0430\u0434\u043e? \u0422\u043e\u0447\u043d\u043e \u043d\u0435 \u0441 main(), \u0442\u0430\u043c \u0431\u0443\u0434\u0435\u0442 &#171;\u0410\u0432\u0440\u0430\u0430\u043c \u0440\u043e\u0434\u0438\u043b \u0418\u0441\u0430\u0430\u043a\u0430, \u0418\u0441\u0430\u0430\u043a \u0440\u043e\u0434\u0438\u043b \u0418\u0430\u043a\u043e\u0432\u0430&#8230;&#187;, \u0442\u0430\u043a \u044f \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0434\u043e\u0447\u0438\u0442\u0430\u044e. \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0443\u0434\u0430\u0447\u043d\u043e \u0442\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u0442\u0430\u043a\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0432 \u0441\u0430\u043c\u043e\u0439 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u043a\u043e\u0434\u0430, \u043e\u0442\u043a\u0443\u0434\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043b\u0438\u0437\u043a\u043e \u043a \u043c\u0435\u0441\u0442\u0443 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0438 \u043f\u043e\u043c\u0435\u043d\u044c\u0448\u0435 \u0431\u043e\u043a\u043e\u0432\u044b\u0445 \u043e\u0442\u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439. \u0412\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f \u043c\u0430\u043b\u043e \u0447\u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u044e. \u041d\u0443\u0436\u043d\u044b \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u0430\u0437\u044b \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043d\u0443 \u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0435. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0432\u043e\u0438\u0445 \u043a\u043e\u043f\u0430\u043d\u0438\u0439 \u044f \u0431\u0443\u0434\u0443 \u0447\u0435\u0440\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 (\u0447\u0442\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430) \u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 (\u043e\u0442\u043b\u0430\u0434\u043a\u0430) \u043f\u043e\u0434\u0445\u043e\u0434\u044b.<\/p>\n<h2>\u0422\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430<\/h2>\n<p>\u0418 \u043d\u0430\u0447\u043d\u0451\u043c \u043c\u044b \u0441 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f. \u0421\u0440\u0435\u0434\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0433\u043b\u0430\u0437 \u0446\u0435\u043f\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430 &#171;fbtracemgr.exe&#187;, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0441\u0443\u0434\u044f \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e, \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0443 Firebird \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u0430\u044f: \u0447\u0442\u043e-\u0442\u043e \u0435\u0441\u0442\u044c \u0432 online-\u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0435, \u043d\u043e \u0437\u0430 \u043c\u043d\u043e\u0433\u0438\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0445\u043e\u0434\u0438\u0442\u044c \u0432 README-\u0444\u0430\u0439\u043b\u044b \u0438\u0437 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 doc , \u0432\u043e\u0442 \u0438 \u044d\u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439 \u0442\u0430\u043a\u043e\u0439. \u0424\u0430\u0439\u043b README.trace-services.txt \u0432 \u0446\u0435\u043b\u043e\u043c \u043f\u043e\u043b\u0435\u0437\u0435\u043d: \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e\u043c\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0443 \u043d\u0443\u0436\u0435\u043d \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043f\u043e\u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u043d\u0430 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435. \u0415\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u043d\u043e \u043e\u0447\u0435\u043d\u044c \u0441\u043c\u0443\u0442\u0438\u043b\u0430 \u0444\u0440\u0430\u0437\u0430 &#171;List of available events to trace is fixed and determined by the Firebird engine&#187;, \u0442\u043e \u0435\u0441\u0442\u044c \u0444\u0438\u0433 \u0432\u0430\u043c, \u0430 \u043d\u0435 \u0441\u043f\u0438\u0441\u043e\u043a. \u041b\u0430\u0434\u043d\u043e, \u043f\u0440\u043e\u0431\u0443\u044e \u0432\u0437\u044f\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0438 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043b\u044e\u0447\u0435\u0439 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e &#8212; \u0445\u0440\u0435\u043d \u0442\u0430\u043c, \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435. \u0422\u044b\u043a\u0441, \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u044f, \u043d\u0443 \u0442\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0443\u044e \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0443 (\u0442\u043e, \u0447\u0435\u043c \u044f \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f), \u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0443\u044e? \u041f\u043e\u0448\u0451\u043b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0435\u0451 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b fbtrace.conf, \u0438 \u0443\u0432\u0438\u0434\u0435\u043b \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0432\u0437\u044f\u043b \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439: \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e \u043d\u0435 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u043c, \u0430 \u0437\u043d\u0430\u043a\u043e\u043c \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0430. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0435 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041a\u0440\u0443\u0442\u043e, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0441\u044c \u043a \u0441\u0432\u043e\u0435\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0435, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u044e \u043a\u043e\u043d\u0444\u0438\u0433, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e, \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0435\u0442, \u0443\u0440\u0430. \u0414\u0435\u043b\u0430\u044e \u0437\u0430\u043f\u0440\u043e\u0441, \u0441\u043c\u043e\u0442\u0440\u044e \u0432\u044b\u0432\u043e\u0434 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 &#8212; \u043f\u0443\u0441\u0442\u043e. \u0418\u0434\u0443 \u0433\u0443\u0433\u043b\u0438\u0442\u044c, \u043d\u0430\u0445\u043e\u0436\u0443 \u0432\u043e\u0442 <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/issues\/7518\" rel=\"noopener noreferrer nofollow\">\u0442\u0430\u043a\u043e\u0435<\/a> . \u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0432 \u044d\u0442\u043e\u043c \u0442\u0438\u043a\u0435\u0442\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e, \u0447\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e, \u043d\u043e \u043d\u0438\u0444\u0438\u0433\u0430 \u043d\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b &#8212; \u0442\u0430\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b (\u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u043a \u0431\u0430\u0437\u0435) \u0438 workaround (\u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443 \u043c\u0435\u043d\u044f \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u0414\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code>2025-06-04T12:38:55.7690 (13224:000000000B6729C0) START_TRANSACTION         C:\\DATABASES\\TESTDB.FDB (ATT_36, SYSDBA:NONE, UTF8, TCPv4:192.168.100.3\/59403)                 (TRA_82, READ_COMMITTED | READ_CONSISTENCY | WAIT | READ_WRITE)  2025-06-04T12:38:55.7690 (13224:000000000B6729C0) PREPARE_STATEMENT         C:\\DATABASES\\TESTDB.FDB (ATT_36, SYSDBA:NONE, UTF8, TCPv4:192.168.100.3\/59403)                 (TRA_82, READ_COMMITTED | READ_CONSISTENCY | WAIT | READ_WRITE)  Statement 310: ------------------------------------------------------------------------------- SELECT * FROM orders       0 ms  2025-06-04T12:38:55.7690 (13224:000000000B6729C0) EXECUTE_STATEMENT_START         C:\\DATABASES\\TESTDB.FDB (ATT_36, SYSDBA:NONE, UTF8, TCPv4:192.168.100.3\/59403)                 (TRA_82, READ_COMMITTED | READ_CONSISTENCY | WAIT | READ_WRITE)  Statement 310: ------------------------------------------------------------------------------- SELECT * FROM orders  2025-06-04T12:38:55.7700 (13224:000000000B6729C0) EXECUTE_STATEMENT_FINISH         C:\\DATABASES\\TESTDB.FDB (ATT_36, SYSDBA:NONE, UTF8, TCPv4:192.168.100.3\/59403)                 (TRA_82, READ_COMMITTED | READ_CONSISTENCY | WAIT | READ_WRITE)  Statement 310: ------------------------------------------------------------------------------- SELECT * FROM orders 1 records fetched       0 ms, 5 fetch(es)  2025-06-04T12:38:55.7700 (13224:000000000B6729C0) CLOSE_CURSOR         C:\\DATABASES\\TESTDB.FDB (ATT_36, SYSDBA:NONE, UTF8, TCPv4:192.168.100.3\/59403)  Statement 310: ------------------------------------------------------------------------------- SELECT * FROM orders  2025-06-04T12:38:55.7700 (13224:000000000B6729C0) COMMIT_TRANSACTION         C:\\DATABASES\\TESTDB.FDB (ATT_36, SYSDBA:NONE, UTF8, TCPv4:192.168.100.3\/59403)                 (TRA_82, READ_COMMITTED | READ_CONSISTENCY | WAIT | READ_WRITE)       0 ms, 1 fetch(es), 1 mark(s)  2025-06-04T12:38:55.7850 (13224:000000000B6729C0) FREE_STATEMENT         C:\\DATABASES\\TESTDB.FDB (ATT_36, SYSDBA:NONE, UTF8, TCPv4:192.168.100.3\/59403)<\/code><\/pre>\n<p>\u041d\u0435 \u0442\u043e \u0447\u0442\u043e\u0431\u044b \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043d\u043e \u0447\u0442\u043e-\u0442\u043e: \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 Firebird \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u0438\u044f STATEMENT, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u0442\u0430\u0434\u0438\u0438 PREPARE \u0438 EXECUTE, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u0435 CURSOR, \u044d\u0442\u043e \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f. \u0411\u044b\u043b\u043e \u0431\u044b \u0448\u0438\u043a\u0430\u0440\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0443 \u043f\u043e\u0433\u043b\u0443\u0431\u0436\u0435 \u0432 \u043a\u0438\u0448\u043a\u0438, \u043d\u043e \u0438 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u043f\u0430\u0441\u0438\u0431\u043e.<\/p>\n<p>\u0422\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0435 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043b \u043c\u043e\u0438\u0445 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0439, \u043d\u043e \u043e\u043d, \u043f\u043e\u0445\u043e\u0436\u0435, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u043d\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 Firebird-\u0430, \u0430 \u0434\u043b\u044f \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0442\u043e\u0440\u043e\u0432 \u0438 SQL-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043a\u0442\u043e \u0438 \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u0430\u043a\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0442\u043e\u0440\u043c\u043e\u0437\u044f\u0442 \u0438 \u043a\u0430\u043a\u0438\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0432\u0438\u0441\u044f\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043e\u043b\u0433\u043e.<\/p>\n<p>\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u043e\u0433, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443. \u042f \u043d\u0435 \u043d\u0430\u0447\u0430\u043b \u0440\u0430\u0441\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u043d\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u0440\u043e\u0434\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u042f \u0442\u0430\u043a\u0436\u0435 \u0437\u043d\u0430\u044e, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u043b\u0443\u0448\u0430\u0435\u0442 \u0441\u0435\u0442\u044c \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 \u0434\u0438\u0441\u043a\u043e\u043c, \u044d\u0442\u043e \u0434\u0432\u0435 \u0435\u0433\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u044b, \u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0446\u0435\u043f\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u0433\u0440\u0430\u043d\u0438\u0446. \u041a\u043e\u0434 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043c\u043d\u0435 \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c, \u0438, \u0437\u0430\u0431\u0435\u0433\u0430\u044f \u0432\u043f\u0435\u0440\u0451\u0434, \u044f \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0432\u0435\u0437\u043b\u043e.<\/p>\n<h2>\u0414\u0438\u0441\u043a\u043e\u0432\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438 Data Page Manager<\/h2>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0437\u0430\u0439\u0442\u0438 \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b: \u0447\u0442\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0434\u0430\u043d\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043d\u0430 \u0434\u0438\u0441\u043a\u0435. \u0415\u0441\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 <a href=\"https:\/\/firebirdsql.org\/file\/documentation\/html\/en\/firebirddocs\/firebirdinternals\/firebird-internals.html\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442<\/a>, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043c\u0435\u043d\u0443\u0435\u0442\u0441\u044f \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043c On-Disk Structure (\u043a\u0440\u0430\u0442\u043a\u043e ODS), \u0438 \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c: \u0444\u0430\u0439\u043b \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u0431\u0438\u0442 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0431\u044b\u0432\u0430\u044e\u0442 \u0438\u043b\u0438 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0438\u043b\u0438 \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0445\u0441\u044f \u043a \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c. \u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0442\u0440\u043e\u043a\u0430\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0440\u0430\u0437\u0431\u0438\u0442 \u043d\u0430 \u0434\u0432\u0430 \u0443\u0440\u043e\u0432\u043d\u044f: \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u043e\u0434\u043d\u043e\u0441\u0432\u044f\u0437\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u0436\u0435 \u0445\u0440\u0430\u043d\u044f\u0442 \u0441\u0442\u0440\u043e\u043a\u0438-\u0437\u0430\u043f\u0438\u0441\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u0415\u0441\u0442\u044c \u0435\u0449\u0451 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432, \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a, \u043d\u043e \u043f\u043e\u043a\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u044d\u0442\u043e. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u043e\u0431\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435: \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0435 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0430, \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043a\u0430\u043a \u043b\u0435\u0436\u0430\u0442 \u043f\u043e\u043b\u044f \u0432\u043d\u0443\u0442\u0440\u0438, \u043c\u043e\u0436\u0435\u0442 \u0441\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e? \u0417\u0430\u043f\u0438\u0448\u0435\u043c \u0432 \u043a\u043e\u043f\u0438\u043b\u043e\u0447\u043a\u0443 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043a\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442\u044b \u0432 \u043a\u043e\u0434\u0435.<\/p>\n<p>\u041d\u0443 \u0447\u0442\u043e, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 \u0447\u0442\u043e-\u0442\u043e, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0435\u0435\u0441\u044f \u043a ODS. \u0412 src\/jrd\/ \u0441\u0440\u0430\u0437\u0443 \u043d\u0430\u0445\u043e\u0434\u0438\u043c <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/blob\/v5.0.2\/src\/jrd\/ods.h\" rel=\"noopener noreferrer nofollow\">ods.h<\/a> \u0438 <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/blob\/v5.0.2\/src\/jrd\/ods.cpp\" rel=\"noopener noreferrer nofollow\">ods.cpp<\/a> . \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/blob\/v5.0.2\/src\/jrd\/ods.h#L713\" rel=\"noopener noreferrer nofollow\"><strong>rhd<\/strong><\/a>, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0443\u044e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0437\u0430\u043f\u0438\u0441\u0438, \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c, \u0433\u0434\u0435 \u043e\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0438&#8230; \u043a\u0430\u043a-\u0442\u043e \u0442\u0443\u0445\u043b\u043e: \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u043a\u043e\u0434\u0435 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438, \u0430 \u043c\u043d\u0435-\u0442\u043e \u043d\u0443\u0436\u0435\u043d \u043a\u043e\u0434 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0434\u0430\u043d\u043d\u044b\u043c. \u0427\u0435\u0441\u0442\u043d\u043e \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u044f \u0437\u0430\u0431\u0443\u043a\u0441\u043e\u0432\u0430\u043b, \u043d\u0430\u0447\u0430\u043b \u0438\u0441\u043a\u0430\u0442\u044c, \u0433\u0434\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043d\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u043c\u043e\u0437\u0430\u0438\u043a\u0430 \u0441\u043b\u043e\u0436\u0438\u043b\u0430\u0441\u044c, \u0438 \u0434\u043b\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u0438 \u0441\u0440\u0430\u0437\u0443 \u0441\u043a\u0430\u0436\u0443 \u043e\u0442\u0432\u0435\u0442: \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <a href=\"https:\/\/github.com\/FirebirdSQL\/firebird\/blob\/v5.0.2\/src\/jrd\/ods.h#L759\" rel=\"noopener noreferrer nofollow\"><strong>rdhf<\/strong><\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438, \u043d\u043e \u043f\u0435\u0440\u0432\u044b\u0435 6 \u043f\u043e\u043b\u0435\u0439 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0441 \u043f\u043e\u043b\u044f\u043c\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <strong>rdh<\/strong>. <\/p>\n<pre><code class=\"cpp\">\/\/ Record header struct rhd { ULONG rhd_transaction;\/\/ transaction id (lowest 32 bits) ULONG rhd_b_page;\/\/ back pointer USHORT rhd_b_line;\/\/ back line USHORT rhd_flags;\/\/ flags, etc UCHAR rhd_format;\/\/ format version UCHAR rhd_data[1];\/\/ record data };  \/\/ Record header for fragmented record struct rhdf { ULONG rhdf_transaction;\/\/ transaction id (lowest 32 bits) ULONG rhdf_b_page;\/\/ back pointer USHORT rhdf_b_line;\/\/ back line USHORT rhdf_flags;\/\/ flags, etc UCHAR rhdf_format;\/\/ format version    \/\/ until here, same as rhd USHORT rhdf_tra_high;\/\/ higher bits of transaction id ULONG rhdf_f_page;\/\/ next fragment page USHORT rhdf_f_line;\/\/ next fragment line UCHAR rhdf_data[1];\/\/ record data };<\/code><\/pre>\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <strong>rdhf<\/strong> \u043e\u0447\u0435\u043d\u044c<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-467873","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/467873","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=467873"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/467873\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=467873"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=467873"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=467873"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}