{"id":270068,"date":"2015-12-10T15:55:03","date_gmt":"2015-12-10T12:55:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=270068"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=270068","title":{"rendered":"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0430\u0440\u0441\u0435\u0440\u0430, \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 SQL \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e EMFText"},"content":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/45a\/9f3\/216\/45a9f3216ed64ca197f3cb2958fdddfb.jpg\"\/><\/p>\n<p>  \u042d\u0442\u043e 6-\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0446\u0438\u043a\u043b\u0430 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438. \u0412 <a href=\"http:\/\/habrahabr.ru\/post\/270483\/\">\u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043e\u0431\u0449\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e EMFText. \u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043e\u0442 \u0438\u0433\u0440\u0443\u0448\u0435\u0447\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u043a \u0431\u043e\u043b\u0435\u0435 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e\u043c\u0443. \u0411\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432, \u043a\u043e\u0434\u0430 \u0438 \u0442\u0435\u043a\u0441\u0442\u0430. \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c EMFText \u0438\u043b\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0442\u043e \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0432\u0430\u043c \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b \u0443\u0437\u043d\u0430\u0435\u0442\u0435 \u0447\u0442\u043e-\u0442\u043e \u043d\u043e\u0432\u043e\u0435 \u043e EMF (\u0434\u0435\u043b\u0435\u0433\u0430\u0442\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439).<\/p>\n<p>  \u041f\u043e\u0434\u043e\u0431\u043d\u043e \u043e\u0442\u0432\u0430\u0436\u043d\u043e\u043c\u0443 \u0445\u043e\u0431\u0431\u0438\u0442\u0443 \u043c\u044b \u043d\u0430\u0447\u043d\u0451\u043c \u0441\u0432\u043e\u0439 \u043f\u0443\u0442\u044c \u0441 BNF-\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438 SQL, \u0434\u043e\u0439\u0434\u0451\u043c \u0434\u043e \u0436\u0443\u0442\u043a\u043e\u0433\u043e \u0434\u0440\u0430\u043a\u043e\u043d\u0430 (\u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438) \u0438 \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043a \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435, \u043d\u043e \u0443\u0436\u0435 \u0434\u0440\u0443\u0433\u043e\u0439\u2026<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h4><font color=\"#902213\"><b>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/b><\/font><\/h4>\n<p>  \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043f\u0430\u0440\u0441\u0435\u0440, \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 SQL. \u041a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<p>  \u0412\u043e\u043e\u0431\u0449\u0435, SQL \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u044f\u0437\u044b\u043a. \u0413\u043e\u0440\u0430\u0437\u0434\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0447\u0435\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Java. \u0427\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u043e\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438 <a href=\"http:\/\/docs.oracle.com\/javase\/specs\/jls\/se8\/html\/jls-19.html\">Java<\/a> \u0438 <a href=\"http:\/\/savage.net.au\/SQL\/sql-2003-2.bnf.html\">SQL<\/a>. \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0436\u0435\u0441\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u043a SQL \u2013 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446 (CREATE TABLE), \u043f\u0440\u0438\u0447\u0435\u043c, \u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<h4><font color=\"#902213\"><b>1 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430<\/b><\/font><\/h4>\n<p>  \u041a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f <a href=\"https:\/\/www.eclipse.org\/downloads\/\">Eclipse Modeling Tools<\/a>. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e <a href=\"http:\/\/www.emftext.org\/index.php\/EMFText_Download\">EMFText<\/a> \u043e\u0442\u0441\u044e\u0434\u0430 <a href=\"http:\/\/emftext.org\/update_trunk\">http:\/\/emftext.org\/update_trunk<\/a>.<\/p>\n<h4><font color=\"#902213\"><b>2 \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/b><\/font><\/h4>\n<p>  \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043b\u0438\u0431\u043e \u0432\u0437\u044f\u0442\u044c <a href=\"https:\/\/github.com\/AresEkb\/sql\">\u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442<\/a>, \u043b\u0438\u0431\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 (File -&gt; New -&gt; Other\u2026 -&gt; EMFText Project).<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f1e\/dda\/0f8\/f1edda0f8de64dbc89652e962948c270.png\"\/><\/p>\n<p>  \u0412 \u043d\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0432 \u043f\u0430\u043f\u043a\u0435 model \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0434\u043b\u044f \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438 (sql.ecore) \u0438 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438 (sql.cs) \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u044b \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0438\u0441\u044c \u0432 <a href=\"http:\/\/habrahabr.ru\/post\/270483\/\">\u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>. \u0414\u0432\u0430 \u044d\u0442\u0438\u0445 \u0444\u0430\u0439\u043b\u0430 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u044f\u0437\u044b\u043a. \u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0437 \u043d\u0438\u0445.<\/p>\n<p>  \u0423\u0434\u0430\u043b\u0438\u0442\u0435 \u0432\u0441\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0438 \u0442\u0438\u043f\u044b \u0438\u0437 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438, \u043e\u043d\u0438 \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f. \u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u043b\u0438\u0431\u043e \u0432 \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435, \u043b\u0438\u0431\u043e \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c. \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 File -&gt; New -&gt; Other\u2026 -&gt; Sirius -&gt; Representations File. \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0438\u0437 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 (sql.ecore). \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u043e\u0447\u043a\u0443 \u0437\u0440\u0435\u043d\u0438\u044f \u00abDesign\u00bb. \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u0441\u044c \u043d\u0430 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0443 Sirius (Window -&gt; Perspective -&gt; Open Perspective -&gt; Other\u2026). \u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 aird-\u0444\u0430\u0439\u043b. \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u043f\u0430\u043a\u0435\u0442\u0430 sql \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u043e\u0432.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/675\/328\/888\/67532888834f439081518acf5d48ca15.png\"\/><\/p>\n<blockquote><p><b>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/b><\/p>\n<p>  <a href=\"http:\/\/habrahabr.ru\/company\/cit\/blog\/266433\/\">\u0414\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440<\/a> \u0438 <a href=\"http:\/\/habrahabr.ru\/company\/cit\/blog\/267335\/\">\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c<\/a> \u043c\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445. \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u043b\u044e\u0431\u0438\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u043c\u044b\u0448\u043a\u043e\u0439, \u0430 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"http:\/\/habrahabr.ru\/company\/cit\/blog\/269291\/\">Xcore<\/a>. \u042f \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0435\u0433\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 EMFText, \u043d\u043e \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c Ecore-\u043c\u043e\u0434\u0435\u043b\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 OCLinEcore. \u041e\u043d \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439, \u043a\u0430\u043a \u0438 Xcore, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043c\u0435\u0441\u0442\u043e Java \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <a href=\"http:\/\/habrahabr.ru\/company\/cit\/blog\/264963\/\">OCL<\/a>. \u041a\u0441\u0442\u0430\u0442\u0438, \u0432 <a href=\"https:\/\/github.com\/AresEkb\/sql\/blob\/master\/org.emftext.language.sql\/model\/sql.ecore\">\u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438<\/a> \u043e\u0434\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0438 \u043e\u0434\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043a\u0430\u043a-\u0440\u0430\u0437 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e OCLinEcore, \u043d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>  \u0421\u043b\u043e\u0432\u043e\u043c, \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u044c\u044e \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c 4 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u043d\u0430 \u0432\u044b\u0431\u043e\u0440 \ud83d\ude42 \u0414\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u044b\u0439, \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439, \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 Java-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439, \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 OCL-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439.<\/p><\/blockquote>\n<p>  <\/p>\n<h4><font color=\"#902213\"><b>3 \u041f\u043e\u0434\u0445\u043e\u0434\u044b \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438 \u044f\u0437\u044b\u043a\u0430<\/b><\/font><\/h4>\n<p>  \u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u043f\u0443\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430: 1) \u043e\u0442 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438\u043b\u0438 2) \u043e\u0442 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430.<\/p>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b \u043f\u044b\u0442\u0430\u0435\u0442\u0435\u0441\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c, <b>\u0447\u0442\u043e<\/b> \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u044f\u0437\u044b\u043a. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044f\u0437\u044b\u043a \u0438\u0437 <a href=\"http:\/\/habrahabr.ru\/post\/270483\/\">\u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/a> \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438, \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430. \u0410 \u044f\u0437\u044b\u043a \u0438\u0437 <a href=\"http:\/\/habrahabr.ru\/company\/cit\/blog\/266433\/\">\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/a> \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u044f\u043a\u043e\u0440\u044f, \u0441\u0432\u044f\u0437\u0438, \u0443\u0437\u043b\u044b, \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u0438\u0434\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0435 \u0432 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043b\u0430\u0441\u0441. \u0410 \u0437\u0430\u0442\u0435\u043c \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0435 \u0434\u043b\u044f \u044d\u0442\u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0443\u044e \u043d\u043e\u0442\u0430\u0446\u0438\u044e. \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u044d\u0442\u043e \u043f\u0443\u0442\u044c \u043e\u0442 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438 \u043a \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0443.<\/p>\n<p>  \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0435 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0443 \u044f\u0437\u044b\u043a\u0430, \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 <b>\u043a\u0430\u043a<\/b> \u043d\u0430 \u044d\u0442\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0435 \u0432 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438 \u043a\u043b\u0430\u0441\u0441. \u041c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u0430\u044f \u0438 \u0441\u043b\u043e\u0436\u043d\u0430\u044f. \u0412\u044b \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0435 \u0438\u0437 \u043d\u0435\u0451 \u0432\u0441\u0451 \u043b\u0438\u0448\u043d\u0435\u0435, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0435 \u0435\u0451 \u0438 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u0443\u044e \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u044c. \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u044d\u0442\u043e \u043f\u0443\u0442\u044c \u043e\u0442 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u043a \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0435.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u0443\u0442\u044c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c, \u043d\u043e \u043e\u043d \u043e\u043f\u0430\u0441\u0435\u043d \u0442\u0435\u043c, \u0447\u0442\u043e \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043e\u0442\u043e\u0440\u0432\u0430\u043d\u043d\u043e\u0439 \u043e\u0442 \u044f\u0437\u044b\u043a\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 SQL? \u041b\u0438\u0447\u043d\u043e \u044f \u0431\u044b\u043b \u0443\u0431\u0435\u0436\u0434\u0451\u043d, \u0447\u0442\u043e \u044d\u0442\u043e \u044f\u0437\u044b\u043a \u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445, \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u0445, \u043a\u043b\u044e\u0447\u0430\u0445,\u2026 \u2013 \u043e\u0431 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 SQL \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u0445 Information Schema \u0438 Definition Schema. \u041b\u043e\u0433\u0438\u0447\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438 \u044f\u0437\u044b\u043a\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u044b: \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0438 \u0442.\u043f. \u041d\u043e \u044d\u0442\u043e \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0421\u0423\u0411\u0414, \u0430 \u043d\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u044f\u0437\u044b\u043a\u0430 SQL.<\/p>\n<p>  \u0422\u0430\u0431\u043b\u0438\u0446\u044b, \u0441\u0442\u043e\u043b\u0431\u0446\u044b, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u043a \u0442\u0430\u043a\u043e\u0432\u044b\u0435 \u0432 SQL \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442. \u0412\u043c\u0435\u0441\u0442\u043e \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u00ab\u0422\u0430\u0431\u043b\u0438\u0446\u0430\u00bb, \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b \u00ab\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b\u00bb, \u00ab\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b\u00bb, \u00ab\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b\u00bb, \u2026<\/p>\n<p>  \u042d\u0442\u0438\u043c SQL \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0438\u0437 <a href=\"http:\/\/habrahabr.ru\/post\/270483\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/a>. \u041f\u0440\u0438\u043d\u044f\u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c SQL \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Java. \u041d\u043e, \u0431\u043b\u0438\u043d, \u043d\u0430 Java \u044f \u043c\u043e\u0433\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c:<\/p>\n<pre><code class=\"java\">public class User {     public int id;     public String name; } <\/code><\/pre>\n<p>  \u0410 \u043d\u0430 SQL \u044f \u043d\u0435 \u043c\u043e\u0433\u0443 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e, \u0430 \u043c\u043e\u0433\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b:<\/p>\n<pre><code class=\"sql\">CREATE TABLE &quot;user&quot; (     id INT CONSTRAINT user_pk PRIMARY KEY,     name VARCHAR(50) NOT NULL ); <\/code><\/pre>\n<p>  \u0418\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432:<\/p>\n<pre><code class=\"sql\">CREATE TABLE &quot;user&quot; (     id INT CONSTRAINT user_pk PRIMARY KEY ); ALTER TABLE &quot;user&quot; ADD COLUMN name VARCHAR(50) NOT NULL; <\/code><\/pre>\n<p>  \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f SQL-\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442\u0441\u044f. \u041c\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u043f\u043e\u0442\u043e\u043c \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0435\u0451, \u043f\u043e\u0442\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u0438\u043c\u0435\u043d\u0435\u043c. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0435\u0441\u043b\u0438 \u0431\u044b \u0432 Java \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0437\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0443 \u043d\u0438\u0445 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c\/\u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u043e\u0432! \u041a\u0430\u043a \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434?<\/p>\n<blockquote><p><b>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/b><\/p>\n<p>  \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u044d\u0442\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 SQL \u044f\u0437\u044b\u043a\u043e\u043c \u0441 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0435\u0439. \u042f \u0443\u0436\u0435 \u0447\u0443\u0432\u0441\u0442\u0432\u0443\u044e, \u043a\u0430\u043a \u0432 \u043c\u0435\u043d\u044f \u043b\u0435\u0442\u044f\u0442 \u043f\u043e\u043c\u0438\u0434\u043e\u0440\u044b \u0437\u0430 \u00ab\u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0439\u00bb SQL \ud83d\ude42 \u041d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0441\u0435\u0440 \u0438\u043b\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 SQL-\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0438 \u0432\u044b \u043f\u0440\u0438\u0434\u0451\u0442\u0435 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u044d\u0442\u043e \u0440\u0430\u0432\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430. \u0427\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438\u043b\u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432, \u043f\u0430\u0440\u0441\u0435\u0440\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434, \u043d\u043e \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0411\u0414. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044d\u0442\u0430 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e (\u0432 \u043a\u043b\u0430\u0441\u0441\u0430\u0445, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0445 \u0437\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043e\u043a, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043b\u0435\u0435), \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u0441\u0451 \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0434\u0435\u0438 \u0432 \u0447\u0430\u0441\u0442\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0441\u0441\u044b\u043b\u043e\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0435\u0440\u043f\u0430\u0442\u044c \u0438\u0437 <a href=\"http:\/\/www.jamopp.org\/\">JaMoPP<\/a>.<\/p><\/blockquote>\n<p>  <\/p>\n<h4><font color=\"#902213\"><b>4 \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438 SQL<\/b><\/font><\/h4>\n<p>  \u0418\u0442\u0430\u043a, \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438 \u0445\u043e\u0440\u043e\u0448 \u0434\u043b\u044f \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u0442\u0438\u043f\u0430 <a href=\"http:\/\/habrahabr.ru\/company\/cit\/blog\/270483\/\">EntityModel<\/a> \u0438\u043b\u0438 <a href=\"http:\/\/habrahabr.ru\/company\/cit\/blog\/266433\/\">Anchor<\/a>. \u0410 \u043f\u0440\u0438\u0434\u0442\u0438 \u043a \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438 SQL \u043d\u0430\u043c \u043f\u0440\u043e\u0449\u0435 \u0432\u0442\u043e\u0440\u044b\u043c \u043f\u0443\u0442\u0451\u043c. \u041c\u044b \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 <a href=\"http:\/\/savage.net.au\/SQL\/sql-2003-2.bnf.html\">\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438 SQL<\/a> \u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b.<\/p>\n<p>  BNF-\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0430 \u044f\u0437\u044b\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043f\u0440\u0430\u0432\u0438\u043b, \u0432 \u043b\u0435\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b, \u0430 \u0432 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u2013 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u043b\u0438 \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u041c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b, \u043d\u0435 \u0434\u0443\u043c\u0430\u044f, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438\u0437 \u043b\u0435\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441, \u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438\u0437 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u2013 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0438\u043b\u0438 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043b\u0430\u0441\u0441. \u041d\u043e, \u043f\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u0430\u044f, \u0441 \u043d\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0443\u0434\u043e\u0431\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043b \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0441\u0440\u0430\u0437\u0443 \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u0443\u044e \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u044c.<\/p>\n<ol>\n<li>\u0415\u0441\u043b\u0438 \u0432 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u00ab\u0441\u043b\u043e\u0436\u043d\u0430\u044f\u00bb \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0442\u043e \u0434\u043b\u044f \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438\u0437 \u043b\u0435\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u043c <b>\u043a\u043b\u0430\u0441\u0441<\/b>.<\/li>\n<li>\u0415\u0441\u043b\u0438 \u0432 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432\u044b\u0431\u043e\u0440 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u00ab\u0441\u043b\u043e\u0436\u043d\u044b\u0445\u00bb \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0442\u043e \u0434\u043b\u044f \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438\u0437 \u043b\u0435\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u043c <b>\u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441<\/b>, \u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u043c <b>\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c \u043e\u0442 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0433\u043e.<\/li>\n<li>\u0415\u0441\u043b\u0438 \u0432 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432\u044b\u0431\u043e\u0440 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u00ab\u043f\u0440\u043e\u0441\u0442\u044b\u0445\u00bb \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0442\u043e \u0434\u043b\u044f \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438\u0437 \u043b\u0435\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u043c <b>\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435<\/b>.<\/li>\n<li>\u0415\u0441\u043b\u0438 \u043f\u0440\u0430\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u00ab\u043f\u0440\u043e\u0441\u0442\u0430\u044f\u00bb, \u043d\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u0442\u043e \u043b\u0438\u0431\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u043b\u044f \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438\u0437 \u043b\u0435\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 <b>\u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 Ecore<\/b>, \u043b\u0438\u0431\u043e (\u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e) \u0441\u043e\u0437\u0434\u0430\u0451\u043c <b>\u043d\u043e\u0432\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445<\/b>.<\/li>\n<li>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u00ab\u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e\u00bb \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438\u0437 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u043e\u0439 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u0441\u043e\u0437\u0434\u0430\u0451\u043c <b>\u0430\u0442\u0440\u0438\u0431\u0443\u0442<\/b> \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u0438\u0437 \u043b\u0435\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430.<\/li>\n<li>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u00ab\u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e\u00bb \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438\u0437 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u043e\u0439 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u0441\u043e\u0437\u0434\u0430\u0451\u043c <b>non-containment \u0441\u0441\u044b\u043b\u043a\u0443<\/b> \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u0438\u0437 \u043b\u0435\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043d\u0430 \u043a\u043b\u0430\u0441\u0441 \u0438\u043c\u0435\u043d\u0443\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/li>\n<li>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u00ab\u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e\u00bb \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438\u0437 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u043c <b>containment \u0441\u0441\u044b\u043b\u043a\u0443<\/b> \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u0438\u0437 \u043b\u0435\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043d\u0430 \u043a\u043b\u0430\u0441\u0441, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0441\u0438\u043c\u0432\u043e\u043b\u0443 \u0438\u0437 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438.<\/li>\n<\/ol>\n<p>  \u0412\u0441\u0435 \u044d\u0442\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u0437\u0432\u0443\u0447\u0430\u0442 \u043a\u0430\u043a \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0434\u0435\u0442\u0441\u043a\u0438\u0439 \u0441\u0430\u0434 \ud83d\ude42 \u0427\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u00ab\u043f\u0440\u043e\u0441\u0442\u044b\u0435\u00bb \u0438 \u00ab\u0441\u043b\u043e\u0436\u043d\u044b\u0435\u00bb? \u0422\u0430\u043a\u0436\u0435 \u0438\u0437 \u044d\u0442\u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u0445.<\/p>\n<p>  \u042f \u043d\u0430\u0447\u0430\u043b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u0441 \u0447\u0451\u0442\u043a\u0438\u043c\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f\u043c\u0438. \u041d\u043e \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0443\u0447\u043d\u043e\u0433\u043e \u0442\u0440\u0443\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u0441\u044f \u0432 \u044d\u0442\u0443 \u0438 \u0442\u0430\u043a \u0443\u0436\u0435 \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e\u043a\u0430 \u0442\u0430\u043a\u0438\u043c\u0438 \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u043c\u0438.<\/p>\n<h5><font color=\"#902213\">4.1 \u0410\u043d\u0430\u043b\u0438\u0437 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f &lt;table definition&gt;<\/font><\/h5>\n<p>  \u0418\u0442\u0430\u043a, \u043f\u0435\u0440\u0432\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446.<\/p>\n<pre><code>&lt;table definition&gt;    ::=           CREATE [ &lt;table scope&gt; ] TABLE &lt;table name&gt; &lt;table contents source&gt;          [ ON COMMIT &lt;table commit action&gt; ROWS ] <\/code><\/pre>\n<p>  \u041e\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u00ab\u0441\u043b\u043e\u0436\u043d\u044b\u043c\u00bb: \u0432 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0435\u0441\u0442\u044c \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u0438 \u043a\u043e\u043c\u043c\u0438\u0442\u0435. \u041f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u043e\u0434\u043f\u0430\u0434\u0430\u0435\u0442 \u043f\u043e\u0434 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044e 1, \u0437\u043d\u0430\u0447\u0438\u0442, \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043a\u043b\u0430\u0441\u0441 TableDefinition.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f60\/394\/5ef\/f603945efd174ec98a859aeb1afee3c6.png\"\/><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0438\u0437 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445 \u043c\u044b \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u043c\u0438 5-7 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0438\u043b\u0438 \u0441\u0441\u044b\u043b\u043a\u0443 \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 TableDefinition.<\/p>\n<h5><font color=\"#902213\">4.2 \u0410\u043d\u0430\u043b\u0438\u0437 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f &lt;table scope&gt;<\/font><\/h5>\n<p>  <\/p>\n<pre><code>&lt;table scope&gt;    ::=   &lt;global or local&gt; TEMPORARY &lt;global or local&gt;    ::=   GLOBAL | LOCAL <\/code><\/pre>\n<p>  \u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u0430\u0432\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u00ab\u043f\u0440\u043e\u0441\u0442\u044b\u0435\u00bb. \u0414\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0432 \u043e\u0434\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0438 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0435\u0439 3 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 TableScope \u0441 \u0442\u0440\u0435\u043c\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438:<\/p>\n<ul>\n<li>PERSISTENT<\/li>\n<li>GLOBAL_TEMPORARY<\/li>\n<li>LOCAL_TEMPORARY<\/li>\n<\/ul>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435 \u044f\u0432\u043d\u043e. \u041d\u043e \u0438\u0437 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f &lt;table definition&gt; \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430, \u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a-\u0440\u0430\u0437 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<blockquote><p><b>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/b><\/p>\n<p>  \u0423 \u0432\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u043e\u0436\u0438\u0442\u044c\u0441\u044f \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0432\u0441\u0435 \u043c\u043e\u0438 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u2013 \u0432\u0441\u0451 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0431\u0435\u0437\u0443\u043c\u043d\u044b\u043c \u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u043c. \u041d\u043e \u0432\u0441\u0451 \u043f\u0440\u043e\u0449\u0435, \u0447\u0435\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u0430\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u044f\u0437\u044b\u043a.<\/p><\/blockquote>\n<p>  \u041d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b &lt;table scope&gt; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u0435 \u0434\u043b\u044f &lt;table definition&gt;. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0435\u0439 5 \u0443 \u043a\u043b\u0430\u0441\u0441\u0430 TableDefinition \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 tableScope \u0441 \u0442\u0438\u043f\u043e\u043c TableScope.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/453\/278\/a8c\/453278a8c2d147f08e23d304b2d9b520.png\"\/><\/p>\n<h5><font color=\"#902213\">4.3 \u0410\u043d\u0430\u043b\u0438\u0437 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f &lt;table name&gt;<\/font><\/h5>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0434\u043b\u044f \u0438\u043c\u0435\u043d\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u043d\u0430\u0442\u044b\u043a\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u0437\u0434\u043e\u0440\u043e\u0432\u0435\u043d\u043d\u0443\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u043f\u0440\u0430\u0432\u0438\u043b, \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435, \u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u0432 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 SQL!<\/p>\n<pre><code>&lt;table name&gt;    ::=   &lt;local or schema qualified name&gt; &lt;local or schema qualified name&gt;    ::=   [ &lt;local or schema qualifier&gt; &lt;period&gt; ] &lt;qualified identifier&gt; &lt;local or schema qualifier&gt;    ::=   &lt;schema name&gt; | MODULE &lt;qualified identifier&gt;    ::=   &lt;identifier&gt; &lt;schema name&gt;    ::=   [ &lt;catalog name&gt; &lt;period&gt; ] &lt;unqualified schema name&gt; &lt;unqualified schema name&gt; ::= &lt;identifier&gt; &lt;catalog name&gt;    ::=   &lt;identifier&gt; &lt;identifier&gt;    ::=   &lt;actual identifier&gt; &lt;actual identifier&gt;    ::=   &lt;regular identifier&gt; | &lt;delimited identifier&gt; &lt;regular identifier&gt;    ::=   &lt;identifier body&gt; &lt;identifier body&gt;    ::=   &lt;identifier start&gt; [ &lt;identifier part&gt; ... ] &lt;identifier part&gt;    ::=   &lt;identifier start&gt; | &lt;identifier extend&gt; &lt;identifier start&gt;    ::=   !! See the Syntax Rules. &lt;identifier extend&gt;    ::=   !! See the Syntax Rules. &lt;delimited identifier&gt;    ::=   &lt;double quote&gt; &lt;delimited identifier body&gt; &lt;double quote&gt; &lt;delimited identifier body&gt;    ::=   &lt;delimited identifier part&gt; ... &lt;delimited identifier part&gt;    ::=   &lt;nondoublequote character&gt; | &lt;doublequote symbol&gt; &lt;nondoublequote character&gt;    ::=   !! See the Syntax Rules. &lt;doublequote symbol&gt;    ::=   &lt;double quote&gt; &lt;double quote&gt; &lt;double quote&gt;    ::=   &quot; <\/code><\/pre>\n<p>  \u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0438 \u0438\u043c\u0451\u043d \u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u043d\u0435 \u0432 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438. \u0412\u043e\u043f\u0440\u043e\u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0433\u0434\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u0434\u0435\u0442\u0430\u043b\u044f\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043c\u0430\u0442\u0435\u043c\u043e\u0434\u0435\u043b\u044c\u044e. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0442\u0430\u043a\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043c\u0451\u043d \u0442\u0430\u0431\u043b\u0438\u0446:<\/p>\n<ol>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 EString, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0432 Java \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 java.lang.String.<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0442\u0440\u0435\u043c\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438 (\u0438\u043c\u044f \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430, \u0438\u043c\u044f \u0441\u0445\u0435\u043c\u044b \u0438 \u0438\u043c\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043d\u0435 \u0432\u0438\u0434\u043d\u044b \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438.<br \/> \n<ol>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 java.lang.String<\/li>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u043d\u043e\u0432\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u00ab\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u00bb<\/li>\n<\/ol>\n<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0436\u0435 \u0442\u0440\u0435\u043c\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0443\u0436\u0435 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438.<br \/> \n<ol>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 EString<\/li>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u043d\u043e\u0432\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u00ab\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u00bb<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0431\u0435\u0441\u0441\u043e\u043d\u043d\u044b\u0445 \u043d\u043e\u0447\u0435\u0439 \u0438 \u043a\u0443\u0440\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 <a href=\"http:\/\/www.jamopp.org\/\">JaMoPP<\/a> \u044f \u043f\u0440\u0438\u0448\u0451\u043b \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442 3.1. \u0412 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445 1 \u0438 2 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0432\u0430 <b>\u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0438\u0445\u0441\u044f<\/b> \u0432\u0438\u0434\u0430 \u0442\u043e\u043a\u0435\u043d\u043e\u0432: \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0438 \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0438\u043c\u044f. \u041f\u0440\u043e\u0449\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u0434\u0438\u043d \u0432\u0438\u0434 \u0442\u043e\u043a\u0435\u043d\u0430 \u0434\u043b\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432. \u0412\u0441\u0451 \u0447\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430) \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438, \u0430 \u0432\u0441\u0451 \u0447\u0442\u043e \u043f\u0440\u043e\u0449\u0435 \u2013 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/da2\/c88\/2c8\/da2c882c8dd5429a99f884d508632f45.png\"\/><\/p>\n<h5><font color=\"#902213\">4.4 \u0410\u043d\u0430\u043b\u0438\u0437 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f &lt;table contents source&gt;<\/font><\/h5>\n<p>  <\/p>\n<pre><code>&lt;table contents source&gt;    ::=           &lt;table element list&gt;      |     OF &lt;path-resolved user-defined type name&gt; [ &lt;subtable clause&gt; ] [ &lt;table element list&gt; ]      |     &lt;as subquery clause&gt; &lt;table element list&gt;    ::=   &lt;left paren&gt; &lt;table element&gt; [ { &lt;comma&gt; &lt;table element&gt; }... ] &lt;right paren&gt; &lt;left paren&gt;    ::=   ( &lt;right paren&gt;    ::=   ) &lt;comma&gt;    ::=   , <\/code><\/pre>\n<p>  \u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0434\u043b\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e\u0434\u043f\u0430\u0434\u0430\u0435\u0442 \u043f\u043e\u0434 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044e 2, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 TableContentsSource, \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 TableElementList. \u0410 \u0434\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c.<\/p>\n<p>  \u0412 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0435\u0439 7 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 TableDefinition \u043a \u043a\u043b\u0430\u0441\u0441\u0443 TableContentsSource. \u0414\u043b\u044f \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e containment \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 true.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/61e\/84d\/b5e\/61e84db5ed5f48fb8908e08463ac1772.png\"\/><\/p>\n<p>  \u0414\u043b\u044f \u0441\u043a\u043e\u0431\u043e\u043a \u0438 \u0437\u0430\u043f\u044f\u0442\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u044b, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043d\u0435 \u043d\u0443\u0436\u043d\u044b, \u043e\u043d\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043b\u0435\u043a\u0441\u0435\u0440\u0430.<\/p>\n<h5><font color=\"#902213\">4.5 \u0410\u043d\u0430\u043b\u0438\u0437 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f &lt;table element&gt;<\/font><\/h5>\n<p>  <\/p>\n<pre><code>&lt;table element&gt;    ::=           &lt;column definition&gt;      |     &lt;table constraint definition&gt;      |     &lt;like clause&gt;      |     &lt;self-referencing column specification&gt;      |     &lt;column options&gt; <\/code><\/pre>\n<p>  \u0412 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0435\u0439 2 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 TableElement \u0438 \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0442 \u043d\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441 ColumnDefinition. \u0414\u0440\u0443\u0433\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043f\u043e\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c.<\/p>\n<p>  \u0412 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0435\u0439 7 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043e\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 TableElementList \u043a \u043a\u043b\u0430\u0441\u0441\u0443 TableElement. \u0414\u043b\u044f \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e containment \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 true.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/33a\/c4f\/7fa\/33ac4f7fadc44dc4a96f73f5ea485969.png\"\/><\/p>\n<h5><font color=\"#902213\">4.6 \u0410\u043d\u0430\u043b\u0438\u0437 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f &lt;column definition&gt;<\/font><\/h5>\n<p>  <\/p>\n<pre><code>&lt;column definition&gt;    ::=           &lt;column name&gt; [ &lt;data type&gt; | &lt;domain name&gt; ] [ &lt;reference scope check&gt; ]          [ &lt;default clause&gt; | &lt;identity column specification&gt; | &lt;generation clause&gt; ]          [ &lt;column constraint definition&gt; ... ] [ &lt;collate clause&gt; ] &lt;column name&gt;    ::=   &lt;identifier&gt; <\/code><\/pre>\n<p>  \u0412 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0435\u0439 5 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0443 \u043a\u043b\u0430\u0441\u0441\u0430 ColumnDefinition \u0430\u0442\u0440\u0438\u0431\u0443\u0442 columnName \u0441 \u0442\u0438\u043f\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 EString. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/9ab\/6c5\/407\/9ab6c54070f747c6ba7436ca7d115db9.png\"\/><\/p>\n<h4><font color=\"#902213\"><b>5 \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u043d\u0430\u044f \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u044c SQL<\/b><\/font><\/h4>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u043e\u043a\u0443\u0440\u0438\u0442\u0435 \u0435\u0449\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u0432\u0438\u043b \u0438\u0437 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438 SQL, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0442\u0430\u043a\u0443\u044e <a href=\"https:\/\/github.com\/AresEkb\/sql\/tree\/master\/org.emftext.language.sql\/model\">\u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u044c<\/a>.<\/p>\n<p>  \u041a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043c\u043e\u0434\u0435\u043b\u0438 \u2013 \u044d\u0442\u043e SQLScript, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (Statement) \u0434\u0432\u0443\u0445 \u0432\u0438\u0434\u043e\u0432: \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0438. \u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0438 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0434\u0432\u0443\u0445 \u0432\u0438\u0434\u043e\u0432: \u043f\u0440\u043e\u0431\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438. \u041f\u0435\u0440\u0432\u044b\u0435 \u043d\u0430\u043c \u0432 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b. \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0434\u0432\u0443\u0445 \u0432\u0438\u0434\u043e\u0432: \u043e\u0434\u043d\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u0438 \u043c\u043d\u043e\u0433\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0435.<\/p>\n<p>  \u0412\u043e\u043e\u0431\u0449\u0435, \u0447\u0430\u0441\u0442\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0432 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u044c \u044f\u0437\u044b\u043a\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443 \u043a\u043e\u0434\u0430. \u041d\u043e \u0434\u0430\u043b\u0435\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0441\u0435\u0440, \u043d\u043e \u0438 \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440. \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043c\u043e\u0433 \u0433\u0435\u043d\u0435\u0440\u0438\u0442\u044c \u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/a03\/253\/0f4\/a032530f4f384871aeb295e0e9191a3f.png\"\/><\/p>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043f\u0440\u0430\u0432\u0430. UnsignedInteger \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 Java-\u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043f\u043e\u0437\u0436\u0435. \u0410 \u0442\u0438\u043f\u044b \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u0442\u044b \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 Java-\u043a\u043b\u0430\u0441\u0441\u044b.<\/p>\n<p>  \u041d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0438\u0441\u0443\u043d\u043a\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u0445 (\u0441\u043d\u0438\u0437\u0443 \u0441\u043f\u0440\u0430\u0432\u0430) \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043c\u0435\u043d\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0438 \u0442\u0430\u0431\u043b\u0438\u0446, \u0432\u043e\u0432\u043b\u0435\u0447\u0451\u043d\u043d\u044b\u0445 \u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435, \u0430 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043d\u0438\u0445. \u041f\u0430\u0440\u0441\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0433\u0440\u0430\u0444, \u0430 \u043d\u0435 \u0434\u0435\u0440\u0435\u0432\u043e.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/0a8\/26c\/997\/0a826c997ba64b858d07ac8bb952e3e9.png\"\/><\/p>\n<p>  \u041f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/270\/3ff\/450\/2703ff4503f149cc9a8802bab2976f71.png\"\/><\/p>\n<p>  \u041c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u0430, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u044b \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044b:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f0d\/718\/22b\/f0d71822bc8a4497b6b8a5b15ab5b09d.png\"\/><\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0434\u0430\u0442\u0443 \u0438\u043b\u0438 \u0432\u0440\u0435\u043c\u044f:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/5fe\/31e\/3b9\/5fe31e3b904f49a79fa0be0485b1fb18.png\"\/><\/p>\n<p>  \u0418\u043b\u0438 NULL:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/fee\/774\/9dc\/fee7749dc4ae4a388847ee1e1c17dfc7.png\"\/><\/p>\n<h4><font color=\"#902213\"><b>6 \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 SQL<\/b><\/font><\/h4>\n<p>  \u0418\u0442\u0430\u043a, \u043c\u044b \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0434\u043e\u0448\u043b\u0438 \u0434\u043e \u042d\u0440\u0435\u0431\u043e\u0440\u0430, \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u0436\u0443\u0442\u043a\u043e\u0433\u043e \u0434\u0440\u0430\u043a\u043e\u043d\u0430 \u0421\u043c\u0430\u0443\u0433\u0430 (\u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u044c). \u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/33f\/69f\/82c\/33f69f82cfaf4b4cb356c2baec5740a3.jpg\"\/><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0441\u043d\u043e\u0432\u0430 \u043e\u043f\u0438\u0448\u0435\u043c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 SQL, \u043d\u043e \u0443\u0436\u0435 \u043d\u0435 \u043d\u0430 BNF, \u0430 \u043d\u0430 BNF-\u043f\u043e\u0434\u043e\u0431\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u0432 \u0444\u0430\u0439\u043b\u0435 sql.cs.<\/p>\n<p>  \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0430) \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432, \u0431) \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0451\u043d \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438 \u0438 \u0432) \u043a\u043b\u0430\u0441\u0441 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 (\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438):<\/p>\n<pre><code>SYNTAXDEF sql FOR &lt;http:\/\/www.emftext.org\/language\/sql&gt; START Common.SQLScript <\/code><\/pre>\n<p>  \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0435 <a href=\"http:\/\/www.emftext.org\/EMFTextGuide.php\">EMFText<\/a>:<\/p>\n<pre><code>OPTIONS {     reloadGeneratorModel = &quot;true&quot;;     usePredefinedTokens = &quot;false&quot;;     caseInsensitiveKeywords = &quot;true&quot;;     disableBuilder = &quot;true&quot;;     disableDebugSupport = &quot;true&quot;;     disableLaunchSupport = &quot;true&quot;;     disableTokenSorting = &quot;true&quot;;     overrideProposalPostProcessor = &quot;false&quot;;     overrideManifest = &quot;false&quot;;     overrideUIManifest = &quot;false&quot;; } <\/code><\/pre>\n<p>  2 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043e\u043f\u0446\u0438\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u043f\u0435\u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0444\u0430\u0439\u043b\u043e\u0432 MANIFEST.MF \u0432 \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u0445 org.emftext.language.sql.resource.sql \u0438 org.emftext.language.sql.resource.sql.ui \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u0412 \u044d\u0442\u0438\u0445 \u0444\u0430\u0439\u043b\u0430\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e Java \u0432 JavaSE-1.8, \u0442.\u043a. \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Stream API. \u0410 \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441 \u00ab1.0.0\u00bb \u043d\u0430 \u00ab1.0.0.qualifier\u00bb \u0438\u043d\u0430\u0447\u0435 \u0431\u0443\u0434\u0443\u0442 \u043d\u0435\u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043c\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.<\/p>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0442\u043e\u043a\u0435\u043d\u043e\u0432 UNSIGNED_INTEGER \u0438 EXACT_NUMERIC_LITERAL \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0442\u0441\u044f. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0434\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u0442\u044c \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0443.<\/p>\n<pre><code>TOKENS {     \/\/ Default     DEFINE WHITESPACE $('\\u0009'|'\\u000A'|'\\u000B'|'\\u000C'|'\\u000D'|'\\u0020'|'\\u00A0'|'\\u2000'|'\\u2001'$ +                       $|'\\u2002'|'\\u2003'|'\\u2004'|'\\u2005'|'\\u2006'|'\\u2007'|'\\u2008'|'\\u2009'|'\\u200A'$ +                       $|'\\u200B'|'\\u200C'|'\\u200D'|'\\u200E'|'\\u200F'|'\\u2028'|'\\u2029'|'\\u3000'|'\\uFEFF')$;      \/\/ Single characters     DEFINE FRAGMENT SIMPLE_LATIN_LETTER $($ + SIMPLE_LATIN_UPPER_CASE_LETTER + $|$ + SIMPLE_LATIN_LOWER_CASE_LETTER + $)$;     DEFINE FRAGMENT SIMPLE_LATIN_UPPER_CASE_LETTER $'A'..'Z'$;     DEFINE FRAGMENT SIMPLE_LATIN_LOWER_CASE_LETTER $'a'..'z'$;     DEFINE FRAGMENT DIGIT $('0'..'9')$;      DEFINE FRAGMENT PLUS_SIGN $'+'$;     DEFINE FRAGMENT MINUS_SIGN $'-'$;     DEFINE FRAGMENT SIGN $($ + PLUS_SIGN + $|$ + MINUS_SIGN + $)$;     DEFINE FRAGMENT COLON $':'$;     DEFINE FRAGMENT PERIOD $'.'$;     DEFINE FRAGMENT SPACE $' '$;     DEFINE FRAGMENT UNDERSCORE $'_'$;     DEFINE FRAGMENT SLASH $'\/'$;     DEFINE FRAGMENT ASTERISK $'*'$;     DEFINE FRAGMENT QUOTE $'\\''$;     DEFINE FRAGMENT QUOTE_SYMBOL $($ + QUOTE + QUOTE + $)$;     DEFINE FRAGMENT NONQUOTE_CHARACTER $~($ + QUOTE + $|$ + NEWLINE + $)$;      DEFINE FRAGMENT DOUBLE_QUOTE $'&quot;'$;     DEFINE FRAGMENT DOUBLEQUOTE_SYMBOL $($ + DOUBLE_QUOTE + DOUBLE_QUOTE + $)$;     DEFINE FRAGMENT NONDOUBLEQUOTE_CHARACTER $~($ + DOUBLE_QUOTE + $|$ + NEWLINE + $)$;     DEFINE FRAGMENT NEWLINE $('\\r\\n'|'\\r'|'\\n')$;      \/\/ Comments     DEFINE SIMPLE_COMMENT SIMPLE_COMMENT_INTRODUCER + $($ + COMMENT_CHARACTER + $)*$;     DEFINE FRAGMENT SIMPLE_COMMENT_INTRODUCER MINUS_SIGN + MINUS_SIGN;     DEFINE FRAGMENT COMMENT_CHARACTER $~('\\n'|'\\r'|'\\uffff')$;      DEFINE BRACKETED_COMMENT BRACKETED_COMMENT_INTRODUCER + BRACKETED_COMMENT_CONTENTS + BRACKETED_COMMENT_TERMINATOR;     DEFINE FRAGMENT BRACKETED_COMMENT_INTRODUCER SLASH + ASTERISK;     DEFINE FRAGMENT BRACKETED_COMMENT_TERMINATOR ASTERISK + SLASH;     DEFINE FRAGMENT BRACKETED_COMMENT_CONTENTS $.*$; \/\/ TODO: Nested comments      \/\/ Literals     DEFINE UNSIGNED_INTEGER $($ + DIGIT + $)+$;      DEFINE EXACT_NUMERIC_LITERAL $($ + UNSIGNED_INTEGER + $($ + PERIOD + $($ + UNSIGNED_INTEGER + $)?)?|$ + PERIOD + UNSIGNED_INTEGER + $)$;     DEFINE APPROXIMATE_NUMERIC_LITERAL MANTISSA + $'E'$ + EXPONENT;     DEFINE FRAGMENT MANTISSA EXACT_NUMERIC_LITERAL;     DEFINE FRAGMENT EXPONENT SIGNED_INTEGER;     DEFINE FRAGMENT SIGNED_INTEGER SIGN + $?$ + UNSIGNED_INTEGER;      DEFINE QUOTED_STRING QUOTE + CHARACTER_REPRESENTATION + $*$ + QUOTE;     DEFINE FRAGMENT CHARACTER_REPRESENTATION $($ + NONQUOTE_CHARACTER + $|$ + QUOTE_SYMBOL + $)$;      \/\/ Names and identifiers     DEFINE IDENTIFIER ACTUAL_IDENTIFIER;     DEFINE FRAGMENT ACTUAL_IDENTIFIER $($ + REGULAR_IDENTIFIER + $|$ + DELIMITED_IDENTIFIER + $)$;     DEFINE FRAGMENT REGULAR_IDENTIFIER IDENTIFIER_BODY;     DEFINE FRAGMENT IDENTIFIER_BODY IDENTIFIER_START + IDENTIFIER_PART + $*$;     DEFINE FRAGMENT IDENTIFIER_PART $($ + IDENTIFIER_START + $|$ + IDENTIFIER_EXTEND + $)$;     DEFINE FRAGMENT IDENTIFIER_START $('A'..'Z'|'a'..'z')$; \/\/ TODO: \\p{L} - \\p{M}     DEFINE FRAGMENT IDENTIFIER_EXTEND $($ + DIGIT + $|$ + UNDERSCORE + $)$; \/\/ TODO: Support more characters     DEFINE FRAGMENT DELIMITED_IDENTIFIER DOUBLE_QUOTE + DELIMITED_IDENTIFIER_BODY + DOUBLE_QUOTE;     DEFINE FRAGMENT DELIMITED_IDENTIFIER_BODY DELIMITED_IDENTIFIER_PART + $+$;     DEFINE FRAGMENT DELIMITED_IDENTIFIER_PART $($ + NONDOUBLEQUOTE_CHARACTER + $|$ + DOUBLEQUOTE_SYMBOL + $)$; } <\/code><\/pre>\n<p>  \u0420\u0430\u0441\u043a\u0440\u0430\u0441\u0438\u043c \u0442\u043e\u043a\u0435\u043d\u044b:<\/p>\n<pre><code>TOKENSTYLES {     &quot;SIMPLE_COMMENT&quot;, &quot;BRACKETED_COMMENT&quot;     COLOR #999999, ITALIC;          &quot;QUOTED_STRING&quot;     COLOR #000099, ITALIC;          &quot;EXACT_NUMERIC_LITERAL&quot;, &quot;APPROXIMATE_NUMERIC_LITERAL&quot;, &quot;UNSIGNED_INTEGER&quot;     COLOR #009900; } <\/code><\/pre>\n<p>  \u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 RULES { } \u043e\u043f\u0438\u0448\u0435\u043c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438\u0437 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<h5><font color=\"#902213\">6.1 \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u0434\u043b\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0432 \u0446\u0435\u043b\u043e\u043c, \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u0438 \u0438\u043c\u0451\u043d<\/font><\/h5>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0447\u0438\u0442\u0430\u043b\u0438 <a href=\"http:\/\/habrahabr.ru\/company\/cit\/blog\/270483\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e<\/a>, \u0442\u043e \u0441\u043c\u044b\u0441\u043b \u044d\u0442\u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u0434\u043b\u044f \u0432\u0430\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u0432\u0438\u0434\u0435\u043d:<\/p>\n<pre><code>    Common.SQLScript ::= (statements !0)*;     Common.SimpleComment ::= value[SIMPLE_COMMENT];     Common.BracketedComment ::= value[BRACKETED_COMMENT];     Common.SchemaQualifiedName ::= ((catalogName[IDENTIFIER] &quot;.&quot;)? schemaName[IDENTIFIER] &quot;.&quot;)? name[IDENTIFIER]; <\/code><\/pre>\n<p>  <\/p>\n<h5><font color=\"#902213\">6.2 \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u0434\u043b\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432<\/font><\/h5>\n<p>  <\/p>\n<pre><code>    @SuppressWarnings(explicitSyntaxChoice)     Literal.ExactNumericLiteral ::= value[EXACT_NUMERIC_LITERAL] | value[UNSIGNED_INTEGER];      Literal.ApproximateNumericLiteral ::= value[APPROXIMATE_NUMERIC_LITERAL];     Literal.CharacterStringLiteral ::= (&quot;_&quot; characterSetName)? values[QUOTED_STRING] (separators values[QUOTED_STRING])*;     Literal.NationalCharacterStringLiteral ::= &quot;N&quot; values[QUOTED_STRING] (separators values[QUOTED_STRING])*;     Literal.DateLiteral ::= &quot;DATE&quot; value[QUOTED_STRING];     Literal.TimeLiteral ::= &quot;TIME&quot; value[QUOTED_STRING];     Literal.TimestampLiteral ::= &quot;TIMESTAMP&quot; value[QUOTED_STRING];     Literal.BooleanLiteral ::= value[ &quot;TRUE&quot; : &quot;FALSE&quot; ]?; <\/code><\/pre>\n<p>  \u0421\u0442\u043e\u0438\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0435. \u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0442\u043e\u043a\u0435\u043d\u043e\u0432 EXACT_NUMERIC_LITERAL \u0438 UNSIGNED_INTEGER \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0442\u0441\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0432 SQL-\u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u0447\u0438\u0441\u043b\u043e \u0432 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0438\u0441\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u00ab.\u00bb, \u0442\u043e \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043b\u0435\u043a\u0441\u0435\u0440\u043e\u043c \u043a\u0430\u043a UNSIGNED_INTEGER. \u0417\u0430\u0442\u0435\u043c \u043f\u0430\u0440\u0441\u0435\u0440, \u0443\u0432\u0438\u0434\u0435\u0432 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 UNSIGNED_INTEGER \u0432\u043c\u0435\u0441\u0442\u043e EXACT_NUMERIC_LITERAL, \u0432\u044b\u0434\u0430\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0443, \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043e\u0436\u0438\u0434\u0430\u043b\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u0442\u043e\u043a\u0435\u043d. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0438 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0442\u044c \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0443 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c.<\/p>\n<p>  \u0410, \u0432\u043e\u0442, APPROXIMATE_NUMERIC_LITERAL \u0443\u0436\u0435 \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0441\u043f\u0443\u0442\u0430\u0435\u0448\u044c \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0442\u043e\u043a\u0435\u043d\u0430\u043c\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u043d\u0451\u043c \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0441\u0438\u043c\u0432\u043e\u043b \u00abE\u00bb.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 <a href=\"http:\/\/savage.net.au\/SQL\/sql-2003-2.bnf.html\">BNF-\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0443 SQL<\/a>, \u0442\u043e, \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0438, \u0447\u0442\u043e \u0432 \u043d\u0435\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d \u0444\u043e\u0440\u043c\u0430\u0442 \u0434\u0430\u0442\u044b \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0430 \u043c\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043b\u0438\u0441\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c QUOTED_STRING. \u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u043e\u043f\u0438\u0441\u0430\u043b\u0438 \u0442\u043e\u043a\u0435\u043d\u044b \u0434\u043b\u044f \u0434\u0430\u0442\u044b \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0442\u043e \u043e\u043d\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u043b\u0438\u0441\u044c \u0431\u044b \u0441 \u0442\u043e\u043a\u0435\u043d\u043e\u043c QUOTED_STRING \u0438 \u043d\u0430\u043c \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0442\u044c \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0443 (\u0432\u0435\u0437\u0434\u0435, \u0433\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043a\u0435\u043d QUOTED_STRING \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0435\u0449\u0451 \u0438 \u0442\u043e\u043a\u0435\u043d\u044b \u0434\u043b\u044f \u0434\u0430\u0442\u044b \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u0430\u043a \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435). \u041b\u0438\u0431\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432 (\u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432) \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438, \u0447\u0442\u043e \u0431\u0435\u0437\u0443\u043c\u043d\u043e \u0435\u0451 \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u043b\u043e \u0431\u044b.<\/p>\n<p>  \u041f\u0440\u043e\u0449\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0431\u043e\u0440 \u0434\u0430\u0442\u044b \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u043a\u043e\u0434\u0435, \u0430 \u043d\u0435 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043b\u0435\u043a\u0441\u0435\u0440\u0430. \u0414\u0430\u043b\u0435\u0435 \u044f \u043e\u043f\u0438\u0448\u0443, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<h5><font color=\"#902213\">6.3 \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u0434\u043b\u044f \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445<\/font><\/h5>\n<p>  \u0422\u0443\u0442 \u0432\u0441\u0451 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u0421\u0442\u043e\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 SQL \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0435 \u0442\u043e\u043a\u0435\u043d\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u00abDATE\u00bb \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0434\u043b\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432. \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0441\u043a\u0440\u0430\u0441\u0438\u0442\u044c \u0442\u043e\u043a\u0435\u043d\u044b, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a \u0442\u0438\u043f\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u0442\u043e\u043a\u0435\u043d\u044b, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430\u043c, \u0432 \u0440\u0430\u0437\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430, \u0442\u043e \u0432 EMFText \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043b\u0435\u043a\u0441\u0435\u0440 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u0432 \u043a\u0430\u043a\u043e\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u00abDATE\u00bb.<\/p>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u044e\u0442 \u0436\u0438\u0437\u043d\u044c \u00ab\u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0435\u00bb \u0442\u043e\u043a\u0435\u043d\u044b \u0442\u0438\u043f\u0430 \u00abDOUBLE\u00bb \u00abPRECISION\u00bb. \u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u0431\u044b\u043b\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u043e\u0431\u0435\u043b\u0430 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b &quot;_&quot; \u0438\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0443\u0431\u0440\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u043e\u0435 \u0441\u043b\u043e\u0432\u043e?.. \u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u0432 \u00ab\u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445\u00bb \u0442\u043e\u043a\u0435\u043d\u0430\u0445, \u0445\u043e\u0442\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u043f\u0440\u043e\u0431\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u044b \u0441\u0442\u0440\u043e\u043a, \u0442\u0430\u0431\u0443\u043b\u044f\u0446\u0438\u044e \u0438 \u0442.\u043f. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 EMFText, \u0438\u0437\u043c\u0435\u043d\u0438\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u043d\u043e \u0442\u043e\u0433\u0434\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440, \u043d\u043e \u044d\u0442\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043e\u043b\u0433\u043e. \u0412 \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440, \u0430 \u043d\u0435 \u043f\u0430\u0440\u0441\u0435\u0440, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u043f\u043e\u043a\u0430 \u043d\u0430 \u0442\u0430\u043a\u043e\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438.<\/p>\n<p>  \u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u00ab\u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445\u00bb \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 6.5. \u041f\u0430\u0440\u0441\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u043d\u043e \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 SQL-\u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u00abGLOBAL\u00bb \u00abTEMPORARY\u00bb \u0438\u043b\u0438 \u00abLOCAL\u00bb \u00abTEMPORARY\u00bb.<\/p>\n<pre><code>    Datatype.ExactNumericType ::=         kind[ NUMERIC : &quot;NUMERIC&quot;, DECIMAL : &quot;DECIMAL&quot;, DEC : &quot;DEC&quot;, SMALLINT : &quot;SMALLINT&quot;,               INTEGER : &quot;INTEGER&quot;, INT : &quot;INT&quot;, BIGINT : &quot;BIGINT&quot; ]         (&quot;(&quot; precision[UNSIGNED_INTEGER] (&quot;,&quot; scale[UNSIGNED_INTEGER])? &quot;)&quot;)?;      Datatype.ApproximateNumericType ::=         kind[ FLOAT : &quot;FLOAT&quot;, REAL : &quot;REAL&quot;, DOUBLE_PRECISION : &quot;DOUBLE PRECISION&quot; ]         (&quot;(&quot; precision[UNSIGNED_INTEGER] &quot;)&quot;)?;      Datatype.CharacterStringType ::=         kind[ CHARACTER : &quot;CHARACTER&quot;, CHAR : &quot;CHAR&quot;, VARCHAR : &quot;VARCHAR&quot;,               CHARACTER_VARYING : &quot;CHARACTER VARYING&quot;, CHAR_VARYING : &quot;CHAR VARYING&quot; ]         (&quot;(&quot; length[UNSIGNED_INTEGER] &quot;)&quot;)?         (&quot;CHARACTER&quot; &quot;SET&quot; characterSetName)?         (&quot;COLLATE&quot; collationName)?;      Datatype.NationalCharacterStringType ::=          kind[ NATIONAL_CHARACTER : &quot;NATIONAL CHARACTER&quot;, NATIONAL_CHAR : &quot;NATIONAL CHAR&quot;,               NATIONAL_CHARACTER_VARYING : &quot;NATIONAL CHARACTER VARYING&quot;,               NATIONAL_CHAR_VARYING : &quot;NATIONAL CHAR VARYING&quot;,               NCHAR : &quot;NCHAR&quot;, NCHAR_VARYING : &quot;NCHAR VARYING&quot; ]         (&quot;(&quot; length[UNSIGNED_INTEGER] &quot;)&quot;)?         (&quot;COLLATE&quot; collationName)?;      Datatype.BinaryLargeObjectStringType ::=         kind[ BINARY_LARGE_OBJECT : &quot;BINARY LARGE OBJECT&quot;, BLOB : &quot;BLOB&quot; ]         (&quot;(&quot; length &quot;)&quot;)?;      Datatype.LargeObjectLength ::= value[UNSIGNED_INTEGER]         multiplier[ K : &quot;K&quot;, M : &quot;M&quot;, G : &quot;G&quot; ]?         units[ CHARACTERS : &quot;CHARACTERS&quot;, CODE_UNITS : &quot;CODE_UNITS&quot;, OCTETS : &quot;OCTETS&quot; ]?;      Datatype.DateType ::= &quot;DATE&quot;;      Datatype.TimeType ::= &quot;TIME&quot;         (&quot;(&quot; precision[UNSIGNED_INTEGER] &quot;)&quot;)?         (withTimeZone[&quot;WITH&quot; : &quot;WITHOUT&quot;] &quot;TIME&quot; &quot;ZONE&quot;)?;      Datatype.TimestampType ::= &quot;TIMESTAMP&quot;         (&quot;(&quot; precision[UNSIGNED_INTEGER] &quot;)&quot;)?         (withTimeZone[&quot;WITH&quot; : &quot;WITHOUT&quot;] &quot;TIME&quot; &quot;ZONE&quot;)?;      Datatype.BooleanType ::= &quot;BOOLEAN&quot;; <\/code><\/pre>\n<p>  <\/p>\n<h5><font color=\"#902213\">6.4 \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/font><\/h5>\n<p>  \u0422\u0443\u0442 \u0432\u0441\u0451 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e:<\/p>\n<pre><code>    Function.DatetimeValueFunction ::=         kind[ CURRENT_DATE : &quot;CURRENT_DATE&quot;, CURRENT_TIME : &quot;CURRENT_TIME&quot;,               LOCALTIME : &quot;LOCALTIME&quot;, CURRENT_TIMESTAMP : &quot;CURRENT_TIMESTAMP&quot;,               LOCALTIMESTAMP : &quot;LOCALTIMESTAMP&quot; ]         (&quot;(&quot; precision[UNSIGNED_INTEGER] &quot;)&quot;)?;      Expression.NullSpecification ::= &quot;NULL&quot;; <\/code><\/pre>\n<p>  <\/p>\n<h5><font color=\"#902213\">6.5 \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u0442\u0430\u0431\u043b\u0438\u0446<\/font><\/h5>\n<p>  \u0421\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u0445 \u0435\u0441\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b. \u041a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c, \u043d\u043e \u0437\u0430 \u0441\u0447\u0451\u0442 \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438. \u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u044c\u044e, \u0430 \u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0438 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438 \u0437\u0430\u0431\u0443\u0434\u0435\u043c, \u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043b\u044f \u043d\u0430\u0441 \u0432\u0430\u0436\u043d\u0435\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0430.<\/p>\n<pre><code>    Schema.TableReference ::= ((catalogName[IDENTIFIER] &quot;.&quot;)? schemaName[IDENTIFIER] &quot;.&quot;)? target[IDENTIFIER];      @SuppressWarnings(explicitSyntaxChoice)     Schema.TableDefinition ::= &quot;CREATE&quot;         ( scope[ PERSISTENT : &quot;&quot; ]         | scope[ GLOBAL_TEMPORARY : &quot;GLOBAL&quot;, LOCAL_TEMPORARY : &quot;LOCAL&quot; ] &quot;TEMPORARY&quot; )         &quot;TABLE&quot; schemaQualifiedName !0         contentsSource &quot;;&quot; !0;      Schema.TableElementList ::= &quot;(&quot; !1 elements (&quot;,&quot; !1 elements)* !0 &quot;)&quot;;      Schema.Column ::= name[IDENTIFIER] dataType         (&quot;DEFAULT&quot; defaultOption)?         constraintDefinition?         (&quot;COLLATE&quot; collationName)?;      Schema.LiteralDefaultOption ::= literal;          Schema.DatetimeValueFunctionDefaultOption ::= function;          Schema.ImplicitlyTypedValueSpecificationDefaultOption ::= specification;          Schema.NotNullColumnConstraint ::=         (&quot;CONSTRAINT&quot; schemaQualifiedName)?         &quot;NOT&quot; &quot;NULL&quot;;      Schema.UniqueColumnConstraint ::=         (&quot;CONSTRAINT&quot; schemaQualifiedName)?         kind[ UNIQUE : &quot;UNIQUE&quot; , PRIMARY_KEY : &quot;PRIMARY KEY&quot; ];      Schema.ReferentialColumnConstraint ::=         (&quot;CONSTRAINT&quot; schemaQualifiedName)?         &quot;REFERENCES&quot; referencedTable         (&quot;(&quot; referencedColumns[IDENTIFIER] (&quot;,&quot; referencedColumns[IDENTIFIER])* &quot;)&quot;)?;      Schema.UniqueTableConstraint ::=         (&quot;CONSTRAINT&quot; schemaQualifiedName)?         kind[ UNIQUE : &quot;UNIQUE&quot; , PRIMARY_KEY : &quot;PRIMARY KEY&quot; ]         &quot;(&quot; columns[IDENTIFIER] (&quot;,&quot; columns[IDENTIFIER])* &quot;)&quot;;      Schema.ReferentialTableConstraint ::=         (&quot;CONSTRAINT&quot; schemaQualifiedName)?         &quot;FOREIGN&quot; &quot;KEY&quot; &quot;(&quot; columns[IDENTIFIER] (&quot;,&quot; columns[IDENTIFIER])* &quot;)&quot;         &quot;REFERENCES&quot; referencedTable         (&quot;(&quot; referencedColumns[IDENTIFIER] (&quot;,&quot; referencedColumns[IDENTIFIER])* &quot;)&quot;)?; <\/code><\/pre>\n<p>  <\/p>\n<h4><font color=\"#902213\"><b>7 \u0420\u0430\u0437\u0431\u043e\u0440 \u0442\u043e\u043a\u0435\u043d\u043e\u0432<\/b><\/font><\/h4>\n<p>  \u041b\u0435\u043a\u0441\u0435\u0440 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0440\u043e\u043a. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u044d\u0442\u0438\u0445 \u0441\u0442\u0440\u043e\u043a \u043d\u0443\u0436\u043d\u043e \u043b\u0438\u0431\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0447\u0438\u0441\u043b\u043e, \u0434\u0430\u0442\u0430, \u0432\u0440\u0435\u043c\u044f), \u043b\u0438\u0431\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0435, \u043d\u043e \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0445 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430\u0445 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u044f\u0442\u044c \u0434\u0432\u0435 \u043a\u0430\u0432\u044b\u0447\u043a\u0438 \u043d\u0430 \u043e\u0434\u043d\u0443).<\/p>\n<p>  \u0412 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 EMFText \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u041d\u043e SQL \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u044f\u0437\u044b\u043a, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<h5><font color=\"#902213\">7.1 \u0420\u0430\u0437\u0431\u043e\u0440 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432<\/font><\/h5>\n<p>  \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0442\u043e\u043a\u0435\u043d\u0430 \u2013 \u043e\u0434\u043d\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438.<\/p>\n<p>  \u0414\u043b\u044f \u043d\u0438\u0445 \u043f\u0440\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u0432\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 &quot;-&quot;. \u0410 \u043f\u0440\u0438 \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u2013 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u044b:<\/p>\n<pre><code class=\"java\">package org.emftext.language.sql.resource.sql.analysis;  import java.util.Map; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.emftext.language.sql.resource.sql.ISqlTokenResolveResult; import org.emftext.language.sql.resource.sql.ISqlTokenResolver;  public class SqlSIMPLE_COMMENTTokenResolver implements ISqlTokenResolver {      public String deResolve(Object value, EStructuralFeature feature, EObject container) {         return &quot;--&quot; + ((String) value);     }      public void resolve(String lexem, EStructuralFeature feature, ISqlTokenResolveResult result) {         result.setResolvedToken(lexem.substring(2));     }      public void setOptions(Map&lt;?, ?&gt; options) {     }  } <\/code><\/pre>\n<p>  <\/p>\n<h5><font color=\"#902213\">7.2 \u0420\u0430\u0437\u0431\u043e\u0440 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432<\/font><\/h5>\n<p>  \u0421 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u0415\u0441\u043b\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043f\u0435\u0446\u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0438 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0441\u043b\u043e\u0432\u043e\u043c, \u0442\u043e \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0431\u0435\u0437 \u043a\u0430\u0432\u044b\u0447\u0435\u043a. \u0418\u043d\u0430\u0447\u0435 \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0434\u0432\u043e\u0439\u043d\u044b\u0445 \u043a\u0430\u0432\u044b\u0447\u043a\u0430\u0445.<\/p>\n<pre><code class=\"java\">package org.emftext.language.sql.resource.sql.analysis;  import java.util.Map;  import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.emftext.language.sql.resource.sql.ISqlTokenResolveResult; import org.emftext.language.sql.resource.sql.ISqlTokenResolver;  public class SqlIDENTIFIERTokenResolver implements ISqlTokenResolver { \t     public String deResolve(Object value, EStructuralFeature feature, EObject container) {         return Helper.formatIdentifier((String) value);     }      public void resolve(String lexem, EStructuralFeature feature, ISqlTokenResolveResult result) {         try {             result.setResolvedToken(Helper.parseIdentifier(lexem));         }         catch (Exception e) {             result.setErrorMessage(e.getMessage());         }     }      public void setOptions(Map&lt;?, ?&gt; options) {     }  } <\/code><\/pre>\n<p>  \u041c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0443\u044e \u0447\u0430\u0441\u0442\u044c SQL, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u044f\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 (\u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u0432 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u0445):<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">public class Helper<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">package org.emftext.language.sql.resource.sql.analysis;  import java.util.Arrays; import java.util.HashSet; import java.util.Set;  public class Helper {          private static final String DOUBLE_QUOTE = &quot;\\&quot;&quot;;     private static final String DOUBLE_QUOTE_SYMBOL = &quot;\\&quot;\\&quot;&quot;;      private static final Set&lt;String&gt; RESERVED_WORDS = new HashSet&lt;String&gt;(Arrays.asList(new String[] { &quot;ADD&quot;, &quot;ALL&quot;,             &quot;ALLOCATE&quot;, &quot;ALTER&quot;, &quot;AND&quot;, &quot;ANY&quot;, &quot;ARE&quot;, &quot;ARRAY&quot;, &quot;AS&quot;, &quot;ASENSITIVE&quot;, &quot;ASYMMETRIC&quot;, &quot;AT&quot;, &quot;ATOMIC&quot;,             &quot;AUTHORIZATION&quot;, &quot;BEGIN&quot;, &quot;BETWEEN&quot;, &quot;BIGINT&quot;, &quot;BINARY&quot;, &quot;BLOB&quot;, &quot;BOOLEAN&quot;, &quot;BOTH&quot;, &quot;BY&quot;, &quot;CALL&quot;, &quot;CALLED&quot;,             &quot;CASCADED&quot;, &quot;CASE&quot;, &quot;CAST&quot;, &quot;CHAR&quot;, &quot;CHARACTER&quot;, &quot;CHECK&quot;, &quot;CLOB&quot;, &quot;CLOSE&quot;, &quot;COLLATE&quot;, &quot;COLUMN&quot;, &quot;COMMIT&quot;,             &quot;CONNECT&quot;, &quot;CONSTRAINT&quot;, &quot;CONTINUE&quot;, &quot;CORRESPONDING&quot;, &quot;CREATE&quot;, &quot;CROSS&quot;, &quot;CUBE&quot;, &quot;CURRENT&quot;, &quot;CURRENT_DATE&quot;,             &quot;CURRENT_DEFAULT_TRANSFORM_GROUP&quot;, &quot;CURRENT_PATH&quot;, &quot;CURRENT_ROLE&quot;, &quot;CURRENT_TIME&quot;, &quot;CURRENT_TIMESTAMP&quot;,             &quot;CURRENT_TRANSFORM_GROUP_FOR_TYPE&quot;, &quot;CURRENT_USER&quot;, &quot;CURSOR&quot;, &quot;CYCLE&quot;, &quot;DATE&quot;, &quot;DAY&quot;, &quot;DEALLOCATE&quot;, &quot;DEC&quot;,             &quot;DECIMAL&quot;, &quot;DECLARE&quot;, &quot;DEFAULT&quot;, &quot;DELETE&quot;, &quot;DEREF&quot;, &quot;DESCRIBE&quot;, &quot;DETERMINISTIC&quot;, &quot;DISCONNECT&quot;, &quot;DISTINCT&quot;,             &quot;DOUBLE&quot;, &quot;DROP&quot;, &quot;DYNAMIC&quot;, &quot;EACH&quot;, &quot;ELEMENT&quot;, &quot;ELSE&quot;, &quot;END&quot;, &quot;END-EXEC&quot;, &quot;ESCAPE&quot;, &quot;EXCEPT&quot;, &quot;EXEC&quot;,             &quot;EXECUTE&quot;, &quot;EXISTS&quot;, &quot;EXTERNAL&quot;, &quot;FALSE&quot;, &quot;FETCH&quot;, &quot;FILTER&quot;, &quot;FLOAT&quot;, &quot;FOR&quot;, &quot;FOREIGN&quot;, &quot;FREE&quot;, &quot;FROM&quot;,             &quot;FULL&quot;, &quot;FUNCTION&quot;, &quot;GET&quot;, &quot;GLOBAL&quot;, &quot;GRANT&quot;, &quot;GROUP&quot;, &quot;GROUPING&quot;, &quot;HAVING&quot;, &quot;HOLD&quot;, &quot;HOUR&quot;, &quot;IDENTITY&quot;,             &quot;IMMEDIATE&quot;, &quot;IN&quot;, &quot;INDICATOR&quot;, &quot;INNER&quot;, &quot;INOUT&quot;, &quot;INPUT&quot;, &quot;INSENSITIVE&quot;, &quot;INSERT&quot;, &quot;INT&quot;, &quot;INTEGER&quot;,             &quot;INTERSECT&quot;, &quot;INTERVAL&quot;, &quot;INTO&quot;, &quot;IS&quot;, &quot;ISOLATION&quot;, &quot;JOIN&quot;, &quot;LANGUAGE&quot;, &quot;LARGE&quot;, &quot;LATERAL&quot;, &quot;LEADING&quot;,             &quot;LEFT&quot;, &quot;LIKE&quot;, &quot;LOCAL&quot;, &quot;LOCALTIME&quot;, &quot;LOCALTIMESTAMP&quot;, &quot;MATCH&quot;, &quot;MEMBER&quot;, &quot;MERGE&quot;, &quot;METHOD&quot;, &quot;MINUTE&quot;,             &quot;MODIFIES&quot;, &quot;MODULE&quot;, &quot;MONTH&quot;, &quot;MULTISET&quot;, &quot;NATIONAL&quot;, &quot;NATURAL&quot;, &quot;NCHAR&quot;, &quot;NCLOB&quot;, &quot;NEW&quot;, &quot;NO&quot;, &quot;NONE&quot;,             &quot;NOT&quot;, &quot;NULL&quot;, &quot;NUMERIC&quot;, &quot;OF&quot;, &quot;OLD&quot;, &quot;ON&quot;, &quot;ONLY&quot;, &quot;OPEN&quot;, &quot;OR&quot;, &quot;ORDER&quot;, &quot;OUT&quot;, &quot;OUTER&quot;, &quot;OUTPUT&quot;,             &quot;OVER&quot;, &quot;OVERLAPS&quot;, &quot;PARAMETER&quot;, &quot;PARTITION&quot;, &quot;PRECISION&quot;, &quot;PREPARE&quot;, &quot;PRIMARY&quot;, &quot;PROCEDURE&quot;, &quot;RANGE&quot;,             &quot;READS&quot;, &quot;REAL&quot;, &quot;RECURSIVE&quot;, &quot;REF&quot;, &quot;REFERENCES&quot;, &quot;REFERENCING&quot;, &quot;REGR_AVGX&quot;, &quot;REGR_AVGY&quot;, &quot;REGR_COUNT&quot;,             &quot;REGR_INTERCEPT&quot;, &quot;REGR_R2&quot;, &quot;REGR_SLOPE&quot;, &quot;REGR_SXX&quot;, &quot;REGR_SXY&quot;, &quot;REGR_SYY&quot;, &quot;RELEASE&quot;, &quot;RESULT&quot;,             &quot;RETURN&quot;, &quot;RETURNS&quot;, &quot;REVOKE&quot;, &quot;RIGHT&quot;, &quot;ROLLBACK&quot;, &quot;ROLLUP&quot;, &quot;ROW&quot;, &quot;ROWS&quot;, &quot;SAVEPOINT&quot;, &quot;SCROLL&quot;,             &quot;SEARCH&quot;, &quot;SECOND&quot;, &quot;SELECT&quot;, &quot;SENSITIVE&quot;, &quot;SESSION_USER&quot;, &quot;SET&quot;, &quot;SIMILAR&quot;, &quot;SMALLINT&quot;, &quot;SOME&quot;, &quot;SPECIFIC&quot;,             &quot;SPECIFICTYPE&quot;, &quot;SQL&quot;, &quot;SQLEXCEPTION&quot;, &quot;SQLSTATE&quot;, &quot;SQLWARNING&quot;, &quot;START&quot;, &quot;STATIC&quot;, &quot;SUBMULTISET&quot;,             &quot;SYMMETRIC&quot;, &quot;SYSTEM&quot;, &quot;SYSTEM_USER&quot;, &quot;TABLE&quot;, &quot;THEN&quot;, &quot;TIME&quot;, &quot;TIMESTAMP&quot;, &quot;TIMEZONE_HOUR&quot;,             &quot;TIMEZONE_MINUTE&quot;, &quot;TO&quot;, &quot;TRAILING&quot;, &quot;TRANSLATION&quot;, &quot;TREAT&quot;, &quot;TRIGGER&quot;, &quot;TRUE&quot;, &quot;UESCAPE&quot;, &quot;UNION&quot;,             &quot;UNIQUE&quot;, &quot;UNKNOWN&quot;, &quot;UNNEST&quot;, &quot;UPDATE&quot;, &quot;UPPER&quot;, &quot;USER&quot;, &quot;USING&quot;, &quot;VALUE&quot;, &quot;VALUES&quot;, &quot;VAR_POP&quot;, &quot;VAR_SAMP&quot;,             &quot;VARCHAR&quot;, &quot;VARYING&quot;, &quot;WHEN&quot;, &quot;WHENEVER&quot;, &quot;WHERE&quot;, &quot;WIDTH_BUCKET&quot;, &quot;WINDOW&quot;, &quot;WITH&quot;, &quot;WITHIN&quot;, &quot;WITHOUT&quot;,             &quot;YEAR&quot; }));      private static boolean isReservedWord(String str) {         return RESERVED_WORDS.contains(str.toUpperCase());     }      public static boolean isEmpty(String str) {         return str == null || str.length() == 0;     }          public static String formatIdentifier(String str) {         if (!str.matches(&quot;[A-Z][A-Z0-9_]*&quot;) || isReservedWord(str)) {             return DOUBLE_QUOTE + str.replace(DOUBLE_QUOTE, DOUBLE_QUOTE_SYMBOL) + DOUBLE_QUOTE;         }         else {             return str;         }     }          public static String parseIdentifier(String str) {         if (str.startsWith(DOUBLE_QUOTE) && str.endsWith(DOUBLE_QUOTE) && str.length() &gt;= 2) {             return str.substring(1, str.length() - 1)                     .replace(DOUBLE_QUOTE_SYMBOL, DOUBLE_QUOTE);         }         else if (isReservedWord(str)) {             throw new IllegalArgumentException(                     String.format(&quot;Reserved word %s must be quoted when used as identifier&quot;, str.toUpperCase()));         }         else {             return str.toUpperCase();         }     }  } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<h5><font color=\"#902213\">7.3 \u0420\u0430\u0437\u0431\u043e\u0440 \u043d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b<\/font><\/h5>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b (UNSIGNED_INTEGER) \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0432 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 EInt, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0439 Java-\u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 int. \u041d\u043e \u043c\u044b \u043d\u0435 \u0438\u0449\u0435\u043c \u043b\u0451\u0433\u043a\u0438\u0445 \u043f\u0443\u0442\u0435\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0442\u0438\u043f:<\/p>\n<pre><code class=\"java\">package org.emftext.language.sql;  public class UnsignedInteger {      private int value;      private UnsignedInteger(int value) {         this.value = value;     }      public static UnsignedInteger valueOf(String str) {         return new UnsignedInteger(Integer.parseUnsignedInt(str));     }      @Override     public String toString() {         return String.format(&quot;%d&quot;, value);     }  } <\/code><\/pre>\n<p>  \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043b\u0435\u043a\u0441\u0435\u0440 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u043e\u043d \u0441\u0430\u043c \u0434\u043e\u0433\u0430\u0434\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b valueOf \u0438 toString. \u041f\u0440\u0438\u0447\u0451\u043c, \u044d\u0442\u043e \u0444\u0438\u0447\u0430 \u0434\u0430\u0436\u0435 \u043d\u0435 EMFText, \u0430 EMF \u0432\u043e\u043e\u0431\u0449\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 (\u0434\u0435)\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 XMI-\u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0433\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e SQL-\u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b.<\/p>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0443 \u0432\u0430\u0441 \u0432\u043e\u0437\u043d\u0438\u043a \u0432\u043e\u043f\u0440\u043e\u0441. \u041f\u043e\u0447\u0435\u043c\u0443 \u0434\u043b\u044f \u043d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f, \u0430 \u0434\u043b\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0437\u0430\u0445\u0430\u0440\u0434\u043a\u043e\u0434\u0438\u043b\u0438 \u0432\u0441\u0451 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043b\u0435\u043a\u0441\u0435\u0440\u0430? \u0412\u0435\u0434\u044c \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u044f\u0432\u043d\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0435\u0439, \u044d\u0442\u0430 \u043b\u043e\u0433\u0438\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 (\u0434\u0435)\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0435, \u043d\u043e \u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 XMI.<\/p>\n<p>  \u0410 \u043e\u0442\u0432\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439. \u0412 \u0434\u0440\u0443\u0433\u0438\u0445 (\u0434\u0435)\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430\u0445 \u043d\u0430\u043c \u043a\u0430\u043a-\u0440\u0430\u0437 \u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0432 \u0434\u0432\u043e\u0439\u043d\u044b\u0435 \u043a\u0430\u0432\u044b\u0447\u043a\u0438, \u0435\u0441\u043b\u0438 \u0432 \u043d\u0438\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u043b\u043e\u0432\u0430. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0435\/\u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 SQL-\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435.<\/p>\n<h5><font color=\"#902213\">7.4 \u0420\u0430\u0437\u0431\u043e\u0440 \u0434\u0430\u0442\u044b \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/font><\/h5>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0441\u0430\u043c\u043e\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u2013 \u044d\u0442\u043e \u0440\u0430\u0437\u0431\u043e\u0440 \u0434\u0430\u0442\u044b \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 Ecore \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0442\u0438\u043f \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u0442\u044b \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u2013 EDate, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0432 java.util.Date. \u041d\u043e \u0432 SQL \u043c\u043e\u0436\u0435\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0437\u043e\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u044d\u0442\u0438\u043c \u0442\u0438\u043f\u043e\u043c \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u0422\u0430\u043a\u0436\u0435 \u0432 SQL \u043c\u043e\u0436\u0435\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0440\u0435\u043c\u044f \u0441\u0443\u0442\u043e\u043a \u0431\u0435\u0437 \u0434\u0430\u0442\u044b, \u0434\u043b\u044f \u0447\u0435\u0433\u043e EDate \u0442\u043e\u0436\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448.<\/p>\n<p>  \u0412 Java \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u043d\u0430\u043c \u0442\u0438\u043f\u044b: java.time.LocalDate, java.time.LocalTime \u0438 java.time.ZonedDateTime. 2-\u043e\u0439, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0431\u0435\u0437 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0437\u043e\u043d\u044b, \u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e.<\/p>\n<p>  \u041d\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0443 \u044d\u0442\u0438\u0445 \u0442\u0438\u043f\u043e\u0432 \u043d\u0435\u0442 \u043c\u0435\u0442\u043e\u0434\u0430 valueOf, \u0430 toString \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a \u043a\u0430\u043a \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b. \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0431\u043e\u0440 \u0434\u0430\u0442\u044b \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043b\u0435\u043a\u0441\u0435\u0440\u0430 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u0430 \u0436\u0435 \u043b\u043e\u0433\u0438\u043a\u0430 \u043c\u043e\u0433\u043b\u0430 \u0431\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u043f\u0440\u0438 (\u0434\u0435)\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 XMI-\u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0445. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0444\u0438\u0447\u0435\u0439 EMF \u2013 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0430\u043c\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 (conversion delegates).<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0444\u0430\u0439\u043b plugin.xml \u0438 \u043d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 \u00ab\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u00bb (Extensions) \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 org.eclipse.emf.ecore.conversion_delegate. \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432 \u043d\u0435\u0433\u043e \u0444\u0430\u0431\u0440\u0438\u043a\u0443 \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438:<\/p>\n<ul>\n<li>URI \u2013 org.emftext.language.sql.conversionDelegateFactory<\/li>\n<li>Class \u2013 org.emftext.language.sql.ConversionDelegateFactory<\/li>\n<\/ul>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f89\/5ae\/87d\/f895ae87da854550a90011c4daafd3dc.png\"\/><\/p>\n<blockquote><p><b>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/b><\/p>\n<p>  \u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u043f\u0430\u0440\u0441\u0435\u0440 \u0438 \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043f\u043b\u0430\u0433\u0438\u043d Eclipse, \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0444\u0430\u0439\u043b plugin.xml \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0430 \u0444\u0430\u0431\u0440\u0438\u043a\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<pre><code class=\"java\">EDataType.Internal.ConversionDelegate.Factory.Registry.INSTANCE.put(   &quot;org.emftext.language.sql.conversionDelegateFactory&quot;,   new ConversionDelegateFactory()); <\/code><\/pre>\n<\/blockquote>\n<p>  \u0417\u0430\u0442\u0435\u043c \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u044c \u0438 \u0432 \u043f\u0430\u043a\u0435\u0442\u0435 (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 common) \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e (EAnnotation) \u0441 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c (Source) <a href=\"http:\/\/www.eclipse.org\/emf\/2002\/Ecore\">http:\/\/www.eclipse.org\/emf\/2002\/Ecore<\/a>. \u0412 \u043d\u0435\u0439 \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0437\u0430\u043f\u0438\u0441\u044c \u0441 \u043a\u043b\u044e\u0447\u043e\u043c conversionDelegates \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c org.emftext.language.sql.conversionDelegateFactory.<\/p>\n<blockquote><p><b>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/b><\/p>\n<p>  \u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 OCLinEcore \u0431\u044b\u043b <a href=\"https:\/\/bugs.eclipse.org\/bugs\/show_bug.cgi?id=482890\">\u0431\u0430\u0433<\/a>, \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044d\u0442\u0430 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0443\u0436\u043d\u043e \u0435\u0451 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0437\u0430\u043d\u043e\u0432\u043e. \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435 \u043e \u0447\u0451\u043c \u0440\u0435\u0447\u044c, \u0442\u043e \u0432\u0441\u0451 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e.<\/p><\/blockquote>\n<p>  \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e (\u0434\u0435)\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e (EAnnotation) \u0441 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c (Source) org.emftext.language.sql.conversionDelegateFactory:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/ed4\/ff7\/ad0\/ed4ff7ad054e4a2aa3cd1b9a9a3d7356.png\"\/><\/p>\n<p>  \u0422\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0444\u0430\u0431\u0440\u0438\u043a\u0430 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u0432:<\/p>\n<pre><code class=\"java\">package org.emftext.language.sql;  import org.eclipse.emf.ecore.EDataType; import org.eclipse.emf.ecore.EDataType.Internal.ConversionDelegate; import org.eclipse.emf.ecore.EDataType.Internal.ConversionDelegate.Factory; import org.emftext.language.sql.common.CommonPackage;  public class ConversionDelegateFactory implements Factory {      public ConversionDelegateFactory() {     }      @Override     public ConversionDelegate createConversionDelegate(EDataType eDataType) {         if (eDataType.equals(CommonPackage.eINSTANCE.getDateType())) {             return new DateConversionDelegate();         }         else if (eDataType.equals(CommonPackage.eINSTANCE.getTimeType())) {             return new TimeConversionDelegate();         }         else if (eDataType.equals(CommonPackage.eINSTANCE.getTimestampType())) {             return new TimestampConversionDelegate();         }         return null;     }  } <\/code><\/pre>\n<p>  \u0418 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043e\u0434\u0438\u043d \u0438\u0437 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u0432:<\/p>\n<pre><code class=\"java\">package org.emftext.language.sql;  import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder;  import org.eclipse.emf.ecore.EDataType.Internal.ConversionDelegate;  public class TimestampConversionDelegate implements ConversionDelegate {      private static final DateTimeFormatter FORMATTER = new DateTimeFormatterBuilder()             .append(DateTimeFormatter.ISO_LOCAL_DATE)             .appendLiteral(&quot; &quot;)             .append(DateTimeFormatter.ISO_TIME)             .toFormatter();          @Override     public String convertToString(Object value) {         ZonedDateTime timestamp = (ZonedDateTime) value;         return timestamp.format(FORMATTER);     }      @Override     public Object createFromString(String literal) {         return ZonedDateTime.parse(literal, FORMATTER);     }  } <\/code><\/pre>\n<p>  \u041f\u043e\u0434\u044b\u0442\u043e\u0436\u0443, \u0447\u0442\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438:<\/p>\n<ol>\n<li>\u0412 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 TimestampType<\/li>\n<li>\u0423\u043a\u0430\u0437\u0430\u043b\u0438, \u0447\u0442\u043e \u0432 Java \u044d\u0442\u043e\u0442 \u0442\u0438\u043f \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a java.time.ZonedDateTime<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u043b\u0438 \u0434\u0435\u043b\u0435\u0433\u0430\u0442 \u0434\u043b\u044f (\u0434\u0435)\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u043b\u0438 \u0438 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0444\u0430\u0431\u0440\u0438\u043a\u0443 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0430<\/li>\n<\/ol>\n<p>  <\/p>\n<blockquote><p><b>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/b><\/p>\n<p>  \u0412 EMF \u0435\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0438\u0434\u044b \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u0432: invocationDelegates, settingDelegates, validationDelegates.<\/p><\/blockquote>\n<p>  \u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0431\u043e\u0440 QUOTED_STRING, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b:<\/p>\n<pre><code class=\"java\">package org.emftext.language.sql.resource.sql.analysis;  import java.util.Map;  import org.eclipse.emf.ecore.EDataType; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.util.EcoreUtil; import org.emftext.language.sql.resource.sql.ISqlTokenResolveResult; import org.emftext.language.sql.resource.sql.ISqlTokenResolver;  public class SqlQUOTED_STRINGTokenResolver implements ISqlTokenResolver {      private static final String QUOTE = &quot;'&quot;;     private static final String QUOTE_SYMBOL = &quot;''&quot;;      public String deResolve(Object value, EStructuralFeature feature, EObject container) {         String result = EcoreUtil.convertToString((EDataType) feature.getEType(), value);         return QUOTE + result.replace(QUOTE, QUOTE_SYMBOL) + QUOTE;     }      public void resolve(String lexem, EStructuralFeature feature, ISqlTokenResolveResult result) {         lexem = lexem.substring(1, lexem.length() - 1);         lexem = lexem.replace(QUOTE_SYMBOL, QUOTE);         try {             result.setResolvedToken(EcoreUtil.createFromString((EDataType) feature.getEType(), lexem));         }         catch (Exception e) {             result.setErrorMessage(e.getMessage());         }     }      public void setOptions(Map&lt;?, ?&gt; options) {     }  } <\/code><\/pre>\n<p>  <\/p>\n<h4><font color=\"#902213\"><b>8 \u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043e\u043a<\/b><\/font><\/h4>\n<p>  \u0412 \u043d\u0430\u0448\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 SQL \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0438\u043b\u0438 \u0442\u0430\u0431\u043b\u0438\u0446. \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0432 \u044d\u0442\u0438\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u0445 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432, \u0430 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438 \u044d\u0442\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u043a \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f, \u0430 \u043a\u0430\u043a \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 non-containment \u0441\u0441\u044b\u043b\u043a\u0438 (columns, referencedColumns, referencedTable).<\/p>\n<p>  EMFText \u0443\u043c\u0435\u0435\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438, \u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0430\u0441 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442, \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0432\u043e\u044e.<\/p>\n<h5><font color=\"#902213\">8.1 \u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0438\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/font><\/h5>\n<p>  \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 <a href=\"http:\/\/habrahabr.ru\/company\/cit\/blog\/270483\/\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u043c\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b\u0438 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043e\u043a \u0432 EMFText.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 resolve \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u0438\u0441\u0442\u0438\u043d\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 resolveFuzzy (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0438\u043c\u0435\u043d\u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f), \u0442\u043e \u0438\u0449\u0435\u043c \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0432\u0441\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u0435\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0438.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 resolve \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u043b\u043e\u0436\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 resolveFuzzy, \u0442\u043e \u0438\u0449\u0435\u043c \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">public class TableColumnsConstraintColumnsReferenceResolver<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">package org.emftext.language.sql.resource.sql.analysis;  import java.util.Map; import java.util.function.Consumer; import java.util.stream.Stream;  import org.eclipse.emf.ecore.EReference; import org.emftext.language.sql.resource.sql.ISqlReferenceResolveResult; import org.emftext.language.sql.resource.sql.ISqlReferenceResolver; import org.emftext.language.sql.schema.Column; import org.emftext.language.sql.schema.TableColumnsConstraint;  public class TableColumnsConstraintColumnsReferenceResolver implements         ISqlReferenceResolver&lt;TableColumnsConstraint, Column&gt; {      public void resolve(String identifier, TableColumnsConstraint container, EReference reference, int position,             boolean resolveFuzzy, final ISqlReferenceResolveResult&lt;Column&gt; result) {          Stream&lt;Column&gt; columns = container.getOwner().getElements().stream()             .filter(element -&gt; element instanceof Column)             .map(col -&gt; (Column) col);          Consumer&lt;Column&gt; addMapping = col -&gt; result.addMapping(col.getName(), col);          if (resolveFuzzy) {             columns                 .filter(col -&gt; !container.getColumns().contains(col))                 .filter(col -&gt; col.getName().startsWith(identifier))                 .forEach(addMapping);         } else {             columns                 .filter(col -&gt; col.getName().equals(identifier))                 .findFirst()                 .ifPresent(addMapping);         }     }      public String deResolve(Column element, TableColumnsConstraint container, EReference reference) {         return element.getName();     }      public void setOptions(Map&lt;?, ?&gt; options) {     }  } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<h5><font color=\"#902213\">8.2 \u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/font><\/h5>\n<p>  \u0422\u0443\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430, \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0449\u0435\u043c (\u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432) \u0432\u0441\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 SQL-\u0441\u043a\u0440\u0438\u043f\u0442\u0435. \u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446 \u043c\u043e\u0433\u0443\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u0438 \u0441\u0445\u0435\u043c\u044b.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">public class TableReferenceTargetReferenceResolver<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">package org.emftext.language.sql.resource.sql.analysis;  import java.util.Map; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.stream.Stream;  import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.util.EcoreUtil; import org.emftext.language.sql.common.SQLScript; import org.emftext.language.sql.resource.sql.ISqlReferenceResolveResult; import org.emftext.language.sql.resource.sql.ISqlReferenceResolver; import org.emftext.language.sql.schema.TableDefinition; import org.emftext.language.sql.schema.TableReference;  public class TableReferenceTargetReferenceResolver implements ISqlReferenceResolver&lt;TableReference, TableDefinition&gt; {      public void resolve(String identifier, TableReference container, EReference reference, int position,             boolean resolveFuzzy, final ISqlReferenceResolveResult&lt;TableDefinition&gt; result) {          SQLScript sqlScript = (SQLScript) EcoreUtil.getRootContainer(container);          String catalogName = container.getCatalogName();         Predicate&lt;TableDefinition&gt; filter = !Helper.isEmpty(catalogName)                 ? table -&gt; catalogName.equals(table.getSchemaQualifiedName().getCatalogName())                 : table -&gt; true;          String schemaName = container.getSchemaName();         Predicate&lt;TableDefinition&gt; filter2 = !Helper.isEmpty(schemaName)                 ? table -&gt; schemaName.equals(table.getSchemaQualifiedName().getSchemaName())                 : table -&gt; true;          Stream&lt;TableDefinition&gt; tables = sqlScript.getStatements().stream()                 .filter(stmt -&gt; stmt instanceof TableDefinition)                 .map(table -&gt; (TableDefinition) table)                 .filter(filter.and(filter2));          Consumer&lt;TableDefinition&gt; addMapping =                 table -&gt; result.addMapping(table.getSchemaQualifiedName().getName(), table);          if (resolveFuzzy) {             tables.filter(table -&gt; table.getSchemaQualifiedName() != null &&                                    table.getSchemaQualifiedName().getName() != null &&                                    table.getSchemaQualifiedName().getName().toUpperCase().startsWith(identifier.toUpperCase()))                   .forEach(addMapping);         } else {             tables.filter(table -&gt; table.getSchemaQualifiedName() != null &&                                    table.getSchemaQualifiedName().getName() != null &&                                    table.getSchemaQualifiedName().getName().equals(identifier))                   .findFirst()                   .ifPresent(addMapping);         }     }          public String deResolve(TableDefinition element, TableReference container, EReference reference) {         return element.getSchemaQualifiedName().getName();     }      public void setOptions(Map&lt;?, ?&gt; options) {     }  } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<h5><font color=\"#902213\">8.3 \u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446<\/font><\/h5>\n<p>  \u0422\u0430\u043a\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043a\u043b\u044e\u0447\u0435\u0439. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043d\u0430 \u043a\u0430\u043a\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043a\u043b\u044e\u0447 \u0438 \u0437\u0430\u0442\u0435\u043c \u0438\u0449\u0435\u043c \u0432 \u044d\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">public class ReferentialConstraintReferencedColumnsReferenceResolver<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">package org.emftext.language.sql.resource.sql.analysis;  import java.util.Map; import java.util.function.Consumer; import java.util.stream.Stream;  import org.eclipse.emf.ecore.EReference; import org.emftext.language.sql.resource.sql.ISqlReferenceResolveResult; import org.emftext.language.sql.resource.sql.ISqlReferenceResolver; import org.emftext.language.sql.schema.Column; import org.emftext.language.sql.schema.ReferentialConstraint; import org.emftext.language.sql.schema.TableElementList;  public class ReferentialConstraintReferencedColumnsReferenceResolver         implements ISqlReferenceResolver&lt;ReferentialConstraint, Column&gt; {      public void resolve(String identifier, ReferentialConstraint container, EReference reference, int position,             boolean resolveFuzzy, final ISqlReferenceResolveResult&lt;Column&gt; result) {                  Stream&lt;Column&gt; columns = Stream.of(container.getReferencedTable().getTarget())             .filter(table -&gt; table != null)             .map(table -&gt; table.getContentsSource())             .filter(src -&gt; src instanceof TableElementList)             .flatMap(list -&gt; ((TableElementList) list).getElements().stream())             .filter(element -&gt; element instanceof Column)             .map(col -&gt; (Column) col);          Consumer&lt;Column&gt; addMapping = col -&gt; result.addMapping(col.getName(), col);                  if (resolveFuzzy) {             columns                 .filter(col -&gt; !container.getReferencedColumns().contains(col))                 .filter(col -&gt; col.getName().startsWith(identifier))                 .forEach(addMapping);         } else {             columns                 .filter(col -&gt; col.getName().equals(identifier))                 .findFirst()                 .ifPresent(addMapping);         }     }          public String deResolve(Column element, ReferentialConstraint container, EReference reference) {         return element.getName();     }      public void setOptions(Map&lt;?, ?&gt; options) {     }  } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<h4><font color=\"#902213\"><b>9 \u0410\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0435 \u0441\u0441\u044b\u043b\u043e\u0447\u043d\u044b\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432<\/b><\/font><\/h4>\n<p>  \u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u043e\u0442\u043c\u0435\u0442\u0438\u043b, \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0441\u0441\u044b\u043b\u043e\u043a, \u043d\u043e \u0438 \u043f\u0440\u0438 \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043a\u043e\u0434\u0430. \u041e\u0434\u043d\u0430\u043a\u043e, \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0434\u043b\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0441\u044b\u043b\u043e\u043a. \u0412 EMFText \u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438, \u043e\u0434\u043d\u0430\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0430\u0441 \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u043e\u0441\u0442\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c SQL-\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0438\u043c\u0435\u043d\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432 \u0438 \u0441\u0445\u0435\u043c:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">public class SqlProposalPostProcessor<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">package org.emftext.language.sql.resource.sql.ui;  import java.util.ArrayList; import java.util.List; import java.util.function.Function;  import org.eclipse.emf.ecore.EAttribute; import org.emftext.language.sql.common.SQLScript; import org.emftext.language.sql.resource.sql.analysis.Helper; import org.emftext.language.sql.schema.SchemaPackage; import org.emftext.language.sql.schema.TableDefinition;  public class SqlProposalPostProcessor {      public List&lt;SqlCompletionProposal&gt; process(List&lt;SqlCompletionProposal&gt; proposals) {         List&lt;SqlCompletionProposal&gt; newProposals = new ArrayList&lt;SqlCompletionProposal&gt;();          EAttribute catalogNameFeature = SchemaPackage.eINSTANCE.getTableReference_CatalogName();         EAttribute schemaNameFeature = SchemaPackage.eINSTANCE.getTableReference_SchemaName();                  for (SqlCompletionProposal proposal : proposals) {             if (catalogNameFeature.equals(proposal.getStructuralFeature())) {                 addTableReferenceProposal(newProposals, proposal, table -&gt; table.getSchemaQualifiedName().getCatalogName());             }             else if (schemaNameFeature.equals(proposal.getStructuralFeature())) {                 addTableReferenceProposal(newProposals, proposal, table -&gt; table.getSchemaQualifiedName().getSchemaName());             }             else {                 newProposals.add(proposal);             }         }                  return newProposals;     }      private static void addTableReferenceProposal(List&lt;SqlCompletionProposal&gt; proposals, SqlCompletionProposal oldProposal,             Function&lt;TableDefinition, String&gt; nameGetter) {         SQLScript sqlScript = (SQLScript) oldProposal.getRoot();         String prefix = oldProposal.getPrefix().toUpperCase();         sqlScript.getStatements().stream()                 .filter(stmt -&gt; stmt instanceof TableDefinition)                 .map(table -&gt; (TableDefinition) table)                 .map(nameGetter)                 .filter(name -&gt; name != null && name.length() &gt; 0)                 .filter(name -&gt; name.toUpperCase().startsWith(prefix))                 .forEach(name -&gt; proposals.add(new SqlCompletionProposal(                         oldProposal.getExpectedTerminal(), Helper.formatIdentifier(name), oldProposal.getPrefix(), true,                         oldProposal.getStructuralFeature(), oldProposal.getContainer())));     }  } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0434\u0430\u043b\u0435\u043a\u0430 \u043e\u0442 \u0438\u0434\u0435\u0430\u043b\u0430, \u043d\u043e \u0438\u0434\u0435\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u0430. \u0414\u043b\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 catalogName \u0438\u043b\u0438 schemaName \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 (TableReference) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 EMFText \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0430 \u0438\u043c\u0435\u043d\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432 \u0438\u043b\u0438 \u0441\u0445\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u0438\u0441\u044c \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0435.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0432 EMFText \u0435\u0441\u0442\u044c \u043e\u043f\u0446\u0438\u044f overrideCompletionProposal, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u0441\u0443\u0434\u044f \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u0442\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u043d\u043e \u043b\u0438\u0447\u043d\u043e \u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u043b.<\/p>\n<h4><font color=\"#902213\"><b>10 \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0438 \u043f\u0430\u0440\u0441\u0435\u0440\u0430 SQL<\/b><\/font><\/h4>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0432\u0442\u043e\u0440\u043e\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 Eclipse \u0438 \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 SQL-\u0441\u043a\u0440\u0438\u043f\u0442.<\/p>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0441\u043a\u0440\u0438\u043f\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0430\u0440\u0441\u0438\u0442\u0441\u044f: \u0441\u043b\u0435\u0432\u0430 \u0435\u0433\u043e \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e, \u0441\u043d\u0438\u0437\u0443 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0437\u043b\u0430.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/88e\/44b\/662\/88e44b662d1e4f28b3c692ed1b7c1433.png\"\/><\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u043a\u0430\u043a \u0434\u043b\u044f \u0441\u0441\u044b\u043b\u043e\u043a, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/e2b\/1dd\/4e7\/e2b1dd4e734f4010bc95782f13269eda.png\"\/><\/p>\n<h4><font color=\"#902213\"><b>11 \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 SQL<\/b><\/font><\/h4>\n<p>  \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 SQL-\u0441\u043a\u0440\u0438\u043f\u0442 \u0432 XMI-\u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u0418 \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/c88\/a90\/d36\/c88a90d3634b45fa83270094435dba79.png\"\/><\/p>\n<p>  \u042f \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043b \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u00abuser\u00bb \u0432 \u00abperson\u00bb \u0438 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u00abNAME\u00bb \u0432 \u00abFullName\u00bb.<\/p>\n<p>  \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u0432 SQL-\u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0443\u0447\u0442\u0435\u043d\u044b:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/b35\/556\/f95\/b35556f9583045a39805bf8e97e4aa91.png\"\/><\/p>\n<p>  \u0413\u0434\u0435-\u0442\u043e \u043f\u0440\u043e\u043f\u0430\u043b\u0438 \u043f\u0440\u043e\u0431\u0435\u043b\u044b, \u0433\u0434\u0435-\u0442\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043b\u0438\u0448\u043d\u0438\u0435. \u041d\u0430 \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u044d\u0442\u043e \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442, \u0445\u043e\u0442\u044f, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0443\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440, \u043d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<h4><font color=\"#902213\"><b>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/b><\/font><\/h4>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0441\u0435\u0440, \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e EMFText.<\/p>\n<p>  \u0412\u0430\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 SQL \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043a Eclipse, \u0430 \u043f\u0430\u0440\u0441\u0435\u0440 \u0438 \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0431\u0435\u0437 Eclipse. \u041c\u043d\u043e\u0433\u0438\u0435 \u043b\u044e\u0434\u0438 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 Eclipse \u0441\u0443\u0433\u0443\u0431\u043e \u043a\u0430\u043a IDE, \u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0442\u0438\u043f\u0430 EMFText, \u043a\u0430\u043a \u043f\u043b\u0430\u0433\u0438\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0443\u0442\u0440\u0438 Eclipse. \u042d\u0442\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0442\u0430\u043a.<\/p>\n<p>  \u041a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u043f\u0440\u043e\u0435\u043a\u0442, \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435, <a href=\"https:\/\/github.com\/AresEkb\/sql\">\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043d\u0430 GitHub<\/a>.<\/p>\n<p>  \u0417\u0430\u0447\u0435\u043c \u0432\u0441\u0451 \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u044b \u0443\u0437\u043d\u0430\u0435\u0442\u0435 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \ud83d\ude42               <\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/271945\/\"> http:\/\/habrahabr.ru\/post\/271945\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/45a\/9f3\/216\/45a9f3216ed64ca197f3cb2958fdddfb.jpg\"\/><\/p>\n<p>  \u042d\u0442\u043e 6-\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0446\u0438\u043a\u043b\u0430 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438. \u0412 <a href=\"http:\/\/habrahabr.ru\/post\/270483\/\">\u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043e\u0431\u0449\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e EMFText. \u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043e\u0442 \u0438\u0433\u0440\u0443\u0448\u0435\u0447\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u043a \u0431\u043e\u043b\u0435\u0435 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e\u043c\u0443. \u0411\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432, \u043a\u043e\u0434\u0430 \u0438 \u0442\u0435\u043a\u0441\u0442\u0430. \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c EMFText \u0438\u043b\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0442\u043e \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0432\u0430\u043c \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b \u0443\u0437\u043d\u0430\u0435\u0442\u0435 \u0447\u0442\u043e-\u0442\u043e \u043d\u043e\u0432\u043e\u0435 \u043e EMF (\u0434\u0435\u043b\u0435\u0433\u0430\u0442\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439).<\/p>\n<p>  \u041f\u043e\u0434\u043e\u0431\u043d\u043e \u043e\u0442\u0432\u0430\u0436\u043d\u043e\u043c\u0443 \u0445\u043e\u0431\u0431\u0438\u0442\u0443 \u043c\u044b \u043d\u0430\u0447\u043d\u0451\u043c \u0441\u0432\u043e\u0439 \u043f\u0443\u0442\u044c \u0441 BNF-\u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438 SQL, \u0434\u043e\u0439\u0434\u0451\u043c \u0434\u043e \u0436\u0443\u0442\u043a\u043e\u0433\u043e \u0434\u0440\u0430\u043a\u043e\u043d\u0430 (\u043c\u0435\u0442\u0430\u043c\u043e\u0434\u0435\u043b\u0438) \u0438 \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043a \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0435, \u043d\u043e \u0443\u0436\u0435 \u0434\u0440\u0443\u0433\u043e\u0439\u2026  <\/p>\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-270068","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/270068","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=270068"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/270068\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=270068"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=270068"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=270068"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}