Новые возможности Firebird 2.1 (in Russian, Vlad Khorsun)

5,540 views
5,310 views

Published on

PPT in Russian by Vlad Khorsun, core Firebird developer. Presentation is devoted to the set of new features in Firebird 2.1. Though now we have 2.5 is going to be released, it is still interesting, since many people still have 1.5 or 2.0, so 2.5 will be big move for them

Published in: Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,540
On SlideShare
0
From Embeds
0
Number of Embeds
18
Actions
Shares
0
Downloads
20
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Новые возможности Firebird 2.1 (in Russian, Vlad Khorsun)

  1. 1. FIREBIRD 2. 1 Новая версия Новые возможности Первая российская конференция по СУБД Firebird и InterBase Хорсун В ладислав [email_address]
  2. 2. FIREBIRD 2. 1 <ul><li>GLOBAL TEMPORARY TABLE </li></ul><ul><li>Глобальные временные таблицы </li></ul><ul><li>COMMON TABLE EXPRESSIONS </li></ul><ul><li>Сложные и рекурсивные запросы ? Это просто ! </li></ul><ul><li>TYPE OF </li></ul><ul><li>Домены в процедурах, триггерах и CAST </li></ul><ul><li>REPLACE, MERGE </li></ul><ul><li>Вставка или изменение ? Пусть сервер решает сам ;) </li></ul>Первая российская конференция по СУБД Firebird и InterBase
  3. 3. GLOBAL TEMPORARY TABLE <ul><li>Стандартные свойства </li></ul><ul><ul><li>Общие метаданные </li></ul></ul><ul><ul><li>Раздельные данные </li></ul></ul><ul><ul><li>Индексы, триггеры, контроль уникальности и ссылочной целостности </li></ul></ul><ul><ul><li>Время жизни – соединение или транзакция </li></ul></ul><ul><li>Специфика Firebird </li></ul><ul><ul><li>Нет проблем со сборкой мусора </li></ul></ul><ul><ul><li>Хранение вне файла БД, forced writes off </li></ul></ul>Первая российская конференция по СУБД Firebird и InterBase
  4. 4. GLOBAL TEMPORARY TABLE <ul><li>Синтаксис </li></ul><ul><ul><li>CREATE GLOBAL TEMPORARY TABLE </li></ul></ul><ul><ul><li>… </li></ul></ul><ul><ul><li>[ON COMMIT <DELETE | PRESERVE> ROWS] </li></ul></ul><ul><ul><li>ON COMMIT DELETE ROWS </li></ul></ul><ul><ul><li>время жизни данных - транзакция </li></ul></ul><ul><ul><li>ON COMMIT PRESERVE ROWS </li></ul></ul><ul><ul><li>время жизни данных - соединение </li></ul></ul><ul><ul><li>По умолчанию - DELETE </li></ul></ul>Первая российская конференция по СУБД Firebird и InterBase
  5. 5. GLOBAL TEMPORARY TABLE Первая российская конференция по СУБД Firebird и InterBase Правила ссылочной целостности master detail persistent on commit preserve rows on commit delete rows persistent ь on commit preserve rows ь on commit delete rows ь ь
  6. 6. GLOBAL TEMPORARY TABLE Первая российская конференция по СУБД Firebird и InterBase database CREATE GLOBAL TEMPORARY TABLE T1 session 1 session 2 страницы не выделены страницы не выделены страницы выделены (временный файл1, FW = OFF ) страницы освобождены (временный файл удалён) INSERT INTO T1 SELECT FROM T1 страницы выделены disconnect страницы освобождены (временный файл удалён) INSERT INTO T1 SELECT FROM T1 страницы выделены (временный файл 2 , FW = OFF ) disconnect страницы не выделены Общие метаданные Раздельные данные
  7. 7. COMMON TABLE EXPRESSIONS Первая российская конференция по СУБД Firebird и InterBase WITH -- новое ключевое слово WITH CTE_A -- имя первого табличного выражения [(a1, a2, …)] -- алиасы полей, необязательные AS ( SELECT … ), -- определение выражения CTE_B [(b1, b2, …)] -- второе табличное AS ( SELECT … ), -- выражение … SELECT … -- основной запрос, использующий FROM CTE _ A, CTE_B, -- табличные выражения TAB1, TAB2 -- и обычные таблицы WHERE … Простые не рекурсивные табличные выражения
  8. 8. COMMON TABLE EXPRESSIONS Первая российская конференция по СУБД Firebird и InterBase Примеры простых табличных выражений WITH A AS (SELECT … FROM T1), B AS (SELECT … FROM A), C AS (SELECT … FROM A, B B1, B B2), D AS (SELECT … FROM E), E AS (SELECT … FROM D), F AS (WITH …) <ul><li>Выражений может быть несколько </li></ul><ul><li>В выражении можно использовать </li></ul><ul><li>любые конструкции синтаксиса </li></ul><ul><li>SELECT </li></ul><ul><li>Они могут ссылаться друг на друга </li></ul><ul><li>Их можно использовать в любой </li></ul><ul><li>части запроса </li></ul><ul><li>Их можно использовать в одном запросе несколько раз </li></ul><ul><li>Их можно использовать с любым </li></ul><ul><li>DML запросом : INSERT, UPDATE, </li></ul><ul><li>DELETE, SELECT </li></ul><ul><li>Их можно использовать в PSQL : </li></ul><ul><li>FOR WITH … SELECT … </li></ul><ul><li>Операторы WITH не могут быть </li></ul><ul><li>вложенными </li></ul><ul><li>Ссылки между CTE не должны иметь </li></ul><ul><li>циклов </li></ul>
  9. 9. COMMON TABLE EXPRESSIONS Первая российская конференция по СУБД Firebird и InterBase WITH RECURSIVE -- новое ключевое слово RECURSIVE CTE_R AS ( SELECT … FROM T1 -- не рекурсивный член UNION ALL -- обязательно ALL SELECT … -- рекурсивный член FROM CTE_R -- рекурсивная ссылка ) … -- другие выражения SELECT … -- основной запрос FROM CTE_R … WHERE … Рекурсивные табличные выражения <ul><li>CTE может ссылаться на само на себя </li></ul><ul><li>Рекурсивное выражение – это объединение рекурсивных и не рекурсивных членов </li></ul><ul><li>Обязательно должен быть не рекурсивный член </li></ul><ul><li>Сначала перечисляются не рекурсивные члены </li></ul><ul><li>Рекурсивные члены отделяются друг от друга с помощью UNION ALL </li></ul><ul><li>По-прежнему не допускаются циклические ссылки </li></ul><ul><li>Рекурсивные члены не могут использовать агрегатные функции, DISTINCT, GROUP BY , HAVING </li></ul><ul><li>Рекурсивный член может содержать ровно одну рекурсивную ссылку и только во FROM </li></ul><ul><li>Рекурсивная ссылка не должна быть членом внешнего объединения </li></ul>
  10. 10. COMMON TABLE EXPRESSIONS Первая российская конференция по СУБД Firebird и InterBase Примеры рекурсивных табличных выражений WITH RECURSIVE R_TREE (ID, LEVEL) AS ( SELECT ID, 0 FROM TREE WHERE PARENT_ID IS NULL UNION ALL SELECT TREE.ID, R_TREE.LEVEL + 1 FROM TREE, R_TREE WHERE TREE.PARENT_ID = R_TREE.ID ) SELECT TREE.*, R_TREE.LEVEL FROM TREE, R_TREE WHERE TREE.ID = R_TREE.ID
  11. 11. COMMON TABLE EXPRESSIONS Первая российская конференция по СУБД Firebird и InterBase Примеры рекурсивных табличных выражений WITH RECURSIVE R AS ( SELECT PEOPLE, FATHER, MOTHER FROM PEOPLES WHERE NAME = ‘VLAD’ UNION ALL SELECT F.PEOPLE_ID, F.FATHER, F.MOTHER FROM PEOPLES F, R WHERE F.PEOPLE_ID = R.FATHER UNION ALL SELECT M.PEOPLE_ID, M.FATHER, M.MOTHER FROM PEOPLES M, R WHERE M.PEOPLE_ID = R. MOTHER ) SELECT * FROM R CREATE TABLE PEOPLES ( PEOPLE_ID INT NOT NULL PRIMARY KEY, NAME VARCHAR(255), FATHER INT REFERENCES PEOPLES, MOTHER INT REFERENCES PEOPLES )
  12. 12. Домены в параметрах процедур, в переменных и в CAST Первая российская конференция по СУБД Firebird и InterBase CREATE DOMAIN D_MONEY AS NUMERIC (12, 4); CREATE TABLE T (ID INT, AMOUNT D_MONEY ); CREATE PROCEDURE PROC1 (I1 TYPE OF D_MONEY ) RETURNS (O1 TYPE OF D_MONEY ) AS DECLARE V_SUM TYPE OF D_MONEY ; BEGIN V_SUM = I1; O1 = V_SUM; SUSPEND; END; SELECT CAST(1 AS TYPE OF D_MONEY ) FROM RDB$DATABASE; ALTER DOMAIN D_MONEY TYPE NUMERIC (18, 4); <ul><li>Из определения домена используется только тип данных , ограничения ( CHECK, NOT NULL ) не используются. Чтобы подчеркнуть этот факт введено TYPE OF . </li></ul><ul><li>Сохраняются зависимости доменов от процедуртриггеров </li></ul><ul><li>При изменении домена процедуры не перекомпилируются сервером </li></ul><ul><li>Зависимые от домена объекты ‘ почувствуют ’ изменение домена при загрузке в кеш метаданных </li></ul>
  13. 13. REPLACE Первая российская конференция по СУБД Firebird и InterBase REPLACE INTO <table> [(col1, …, colN)] VALUES (val1, …, valN) [ MATCHING (mcol1, …, mcolM)] [RETURNING (val1, …, valR) [INTO :var1, …, :varR]] INSERT или UPDATE ? IF EXISTS(SELECT * FROM <table> WHERE mc1 = val1 AND … AND mcM = valM) THEN UPDATE <table> SET col1 = val1, … colN = valN WHERE mc1 = val1 AND … AND mcM = valM) ELSE INSERT INTO <table> [(col1, …, colN)] VALUES (val1, …, valN) REPLACE - два в одном ! <ul><li>Если MATCHING не задан, то для поиска совпадения используется первичный ключ, который обязательно должен быть определён </li></ul><ul><li>Требуются права доступа и на INSERT , и на UPDATE </li></ul><ul><li>При использовании RETURNING , условию MATCHING должно соответствовать не более одной записи </li></ul>
  14. 14. MERGE Первая российская конференция по СУБД Firebird и InterBase MERGE INTO <table> -- новое ключевое слово MERGE USING <table_or_join> -- источник данных для вставкиобновления ON <search_condition> -- условие поиска обновляемой строки -- запрос для обновления [WHEN MATCHED THEN UPDATE SET col1 = val1, … , colN = valN] -- запрос для вставки [WHEN NOT MATCHED THEN INSERT [col1, …, colN] VALUES (val1, …, valN)] REPLACE – это хорошо, но если данные в другой таблице ? MERGE INTO AMOUNTS USING ENTRIES E ON AMOUNTS.GOODID = E.GOODID AND AMOUNTS.DT = E.DT WHEN MATCHED THEN UPDATE SET SUMMA = SUMMA + E.DBT - E.CRD WHEN NOT MATCHED THEN INSERT (GOODID, DT, SUMMA) VALUES (E.GOODID, E.DT, E.DBT - E.CRD)

×