Возможности SQL
В этом разделе возможности Tarantool сравниваются с разделом «Feature taxonomy and definition for mandatory features» стандарта SQL:2016.
Для каждой возможности из этого списка приведен простой пример SQL-запроса. Если Tarantool успешно обрабатывает пример, он помечается как «OK», в противном случае — как «No».
Идентификатор | Возможность | Пример | Тесты |
|---|---|---|---|
E011-01 | INTEGER и SMALLINT |
| ОК. |
E011-02 | Типы данных REAL, DOUBLE PRECISION и FLOAT |
| Нет. Тип данных с плавающей точкой в Tarantool — DOUBLE. Примечание: Совместимость типов SQL с плавающей точкой между релизами 2.1 и 2.2 не планируется. Причина в том, что в 2.1 для колонок этих типов устанавливается формат 'number', а в 2.2 он будет ограничен до 'float32' и 'float64'. Изменение формата требует миграции данных и не может быть выполнено автоматически, так как в 2.1 нет информации, позволяющей отличить колонки 'number' (созданные из Lua) от колонок FLOAT/DOUBLE/REAL (созданных из SQL). |
E011-03 | Типы данных DECIMAL и NUMERIC |
| Нет, типы данных NUMERIC не поддерживаются, хотя тип данных DECIMAL поддерживается. |
E011-04 | Арифметические операторы |
| ОК. |
E011-05 | Числовые сравнения |
| ОК. |
E011-06 | Неявное приведение между числовыми типами данных |
| ОК, так как в Tarantool допускается сравнение 1.00 со колонкой типа INTEGER. |
ID | Возможность | Пример | Тесты |
|---|---|---|---|
E021-01 | Символьный тип данных (включая все варианты написания) |
| Нет, CHAR не поддерживается. Этот тип неподдерживаемых возможностей учитывается только один раз. |
E021-02 | Тип данных CHARACTER VARYING (включая все варианты написания) |
| Нет, в Tarantool допускается только VARCHAR(n), что является синонимом STRING. |
E021-03 | Символьные литералы |
| ОК, при этом исключается плохая практика использования |
E021-04 | Функция CHARACTER_LENGTH |
| ОК. Tarantool рассматривает это как синоним LENGTH(). |
E021-05 | OCTET_LENGTH |
| Нет. Такой функции нет. |
E021-06 | Функция SUBSTRING |
| Нет. Такой функции нет. Есть функция SUBSTR(x,n,n), которая поддерживается. |
E021-07 | Конкатенация символов |
| ОК. |
E021-08 | Функции UPPER и LOWER |
| |
E021-09 | Функция TRIM |
| ОК. |
E021-10 | Неявное приведение типов между символьными строками фиксированной и переменной длины |
| Нет, символьного типа строк фиксированной длины не существует. |
E021-11 | Функция POSITION |
| Нет. Функция POSITION в Tarantool требует ' |
E021-12 | Сравнение символов |
| ОК. Следует отметить, что по умолчанию при сравнении используется двоичное правило сортировки, но можно легко использовать предложение COLLATE. |
Идентификатор | Возможность | Пример | Тесты |
|---|---|---|---|
E031 | Идентификаторы |
| Нет. Список зарезервированных слов в Tarantool отличается от списка зарезервированных слов стандарта. |
E031-01 | Идентификаторы с разделителями |
| ОК. Кроме того, заключение идентификаторов в двойные кавычки означает, что они не будут преобразованы в верхний или нижний регистр — такое поведение отсутствует в некоторых других СУБД. |
E031-02 | Идентификаторы в нижнем регистре |
| ОК. |
E031-03 | Завершающий знак подчеркивания |
| ОК. |
ID функции | Функция | Пример | Тесты |
|---|---|---|---|
E051-01 | SELECT DISTINCT |
| OK. |
E051-02 | Предложение GROUP BY |
| OK. |
E051-04 | GROUP BY может содержать колонки, не входящие в список выборки |
| OK. |
E051-05 | Элементы списка выборки могут быть переименованы |
| OK. |
E051-06 | Предложение HAVING |
| OK. Tarantool поддерживает HAVING, и GROUP BY не является обязательным перед HAVING. |
E051-07 | Квалифицированная * в списке SELECT |
| OK. |
E051-08 | Корреляционные имена в предложении FROM |
| OK. |
E051-09 | Переименование колонок в предложении FROM |
| Нет. |
ID | Возможность | Пример | Тесты |
|---|---|---|---|
E061-01 | Предикат сравнения |
| OK. |
E061-02 | Предикат BETWEEN |
| OK. |
E061-03 | Предикат IN со списком значений |
| OK. |
E061-04 | Предикат LIKE |
| OK. |
E061-05
Предикат LIKE: |
| OK. | E061-06 |
Предикат NULL |
| OK. | E061-07 |
Квантифицированный предикат сравнения |
| Нет. Синтаксическая ошибка. | E061-08 |
Предикат EXISTS |
| OK. | E061-09 |
Подзапросы в предикате сравнения |
| OK. | E061-11 |
Подзапросы в предикате IN |
| OK. | E061-12 |
Подзапросы в квантифицированном предикате сравнения |
| Нет. Синтаксическая ошибка. | E061-13 |
Коррелированные подзапросы |
| OK. | E061-14 |
Идентификатор | Возможность | Пример | Тесты |
|---|---|---|---|
E071-01 | Табличный оператор UNION DISTINCT |
| Нет. Однако |
E071-02 | Табличный оператор UNION ALL |
| |
E071-03 | Табличный оператор EXCEPT DISTINCT |
| Нет. Однако |
E071-05 | Колонки, объединяемые табличными операторами, не обязаны иметь одинаковый тип данных |
| Поддерживается. |
E071-06 | Табличные операторы в подзапросах |
| Поддерживается. |
Tarantool не поддерживает права, кроме как через NoSQL.
ID | Возможность | Пример | Тесты |
|---|---|---|---|
E091-01 | AVG |
| Нет. Tarantool поддерживает AVG, но отсутствует предупреждение об исключении NULL-значений. |
E091-02 | COUNT |
| OK. |
E091-03 | MAX |
| OK. |
E091-04 | MIN |
| OK. |
E091-05 | SUM |
| OK. |
E091-06 | квантор ALL |
| OK. |
E091-07 | квантор DISTINCT |
| OK. |
ID | Возможность | Пример | Тесты |
|---|---|---|---|
E111 | Инструкция SELECT, возвращающая одну строку |
| ОК. |
Feature ID | Функция | Пример | Тесты |
|---|---|---|---|
E121-01 | DECLARE CURSOR | Нет. Tarantool не поддерживает курсоры. | E121-02 |
Колонки в ORDER BY не обязательно должны присутствовать в списке выборки |
| E121-03 | |
Выражения со значениями в предложении ORDER BY |
| Поддерживается. | E121-04 |
Оператор OPEN | Нет. Tarantool не поддерживает курсоры. | E121-06 | Позиционный оператор UPDATE |
Нет. Tarantool не поддерживает курсоры. | E121-07 | Позиционный оператор DELETE | Нет. Tarantool не поддерживает курсоры. |
E121-08 | Оператор CLOSE | Нет. Tarantool не поддерживает курсоры. | E121-10 |
Неявный NEXT в операторе FETCH | Нет. Tarantool не поддерживает курсоры. | E121-17 | Курсоры WITH HOLD |
Идентификатор | Возможность | Пример | Тесты |
|---|---|---|---|
E131 | Поддержка значения NULL (NULL вместо значений) |
| OK. |
ID | Возможность | Пример | Тесты |
|---|---|---|---|
E141-01 | Ограничения NOT NULL |
| OK. |
E141-02 | Ограничения UNIQUE для колонок NOT NULL |
| OK. |
E141-03 | Ограничения PRIMARY KEY |
| OK, хотя Tarantool не должен всегда требовать наличия первичного ключа. |
E141-04 | Базовое ограничение FOREIGN KEY со значением по умолчанию NO ACTION для действий удаления и обновления ссылок |
| OK. |
E141-06 | Ограничения CHECK |
| OK. |
E141-07 | Значения по умолчанию для колонок |
| OK. |
E141-08 | NOT NULL, выводимое из первичного ключа |
| OK. Вставить NULL не удается, хотя явно не указано, что колонка имеет ограничение NOT NULL. |
E141-10 | Имена во внешнем ключе можно указывать в любом порядке |
| OK. |
Идентификатор | Возможность | Пример | Тесты |
|---|---|---|---|
E151-01 | Инструкция COMMIT |
| Нет. Tarantool поддерживает COMMIT, но сначала необходимо выполнить START TRANSACTION. |
E151-02 | Инструкция ROLLBACK |
| Да. |
Feature ID | Feature | Example | Tests |
|---|---|---|---|
E152-01
Оператор SET TRANSACTION: |
| Нет. Синтаксическая ошибка. | E152-02
Оператор SET TRANSACTION: |
ID | Возможность | Пример | Тесты |
|---|---|---|---|
E153 | Обновляемые запросы с подзапросами |
| Нет. |
E161 | SQL-комментарии с использованием двойного минуса |
| ОК. |
E171 | Поддержка SQLSTATE |
| Нет. Tarantool возвращает сообщение об ошибке, но не строку SQLSTATE. |
ID функции | Функция | Пример | Тесты |
|---|---|---|---|
F021 | Базовая информационная схема |
| Нет. Метаданные Tarantool не находятся в схеме с таким именем (не учитывается в итоговом балле). |
Feature ID | Feature | Example | Tests |
|---|---|---|---|
F031-01 | Инструкция CREATE TABLE для создания постоянных базовых таблиц |
| Нет. Необходимо всегда указывать PRIMARY KEY (этот недостаток учитывается только один раз). |
F031-02 | Инструкция CREATE VIEW |
| OK. |
F031-03 | Оператор GRANT | Нет. В Tarantool привилегии поддерживаются только через NoSQL. | F031-04
Оператор ALTER TABLE: |
| Да. В Tarantool поддерживается ALTER TABLE, а поддержка ADD COLUMN добавлена в Tarantool 2.7. | F031-13
Оператор DROP TABLE: |
|
Нет. В Tarantool поддерживается DROP TABLE, но это предложение не поддерживается. | F031-16
Оператор DROP VIEW: |
| Нет. В Tarantool поддерживается DROP VIEW, но это предложение не поддерживается. |
Идентификатор | Возможность | Пример | Тесты |
|---|---|---|---|
F041-01 | Внутреннее соединение, не обязательно с ключевым словом INNER |
| OK. |
F041-02 | Ключевое слово INNER |
| OK. |
F041-03 | LEFT OUTER JOIN |
| OK. |
F041-04 | RIGHT OUTER JOIN |
| Нет. Ошибка синтаксиса. |
F041-05 | Внешние соединения могут быть вложенными |
| OK. |
F041-07 | Внутренняя таблица в левом или правом внешнем соединении может также использоваться во внутреннем соединении |
| OK. |
F041-08 | Поддерживаются все операторы сравнения |
| OK. |
ID функции | Функция | Пример | Тесты |
|---|---|---|---|
F051-01 | Тип данных DATE (включая поддержку литерала DATE) |
| Нет. Tarantool не поддерживает тип данных DATE. |
F051-02 | Тип данных TIME (включая поддержку литерала TIME) |
| Нет. Синтаксическая ошибка. |
F051-03 | Тип данных TIMESTAMP (включая поддержку литерала TIMESTAMP) |
| Нет. Синтаксическая ошибка. |
F051-04 | Предикат сравнения для типов данных DATE, TIME и TIMESTAMP |
| Нет. Типы данных даты и времени не поддерживаются. |
F051-05 | Явное приведение (CAST) между типами даты-времени и строковыми типами |
| Нет. Типы данных даты и времени не поддерживаются. |
F051-06 | CURRENT_DATE |
| Нет. Синтаксическая ошибка. |
F051-07 | LOCALTIME |
| Нет. Синтаксическая ошибка. |
F051-08 | LOCALTIMESTAMP |
| Нет. Синтаксическая ошибка. |
ID функции | Функция | Пример | Тесты |
|---|---|---|---|
F081 | UNION и EXCEPT в представлениях |
| OK. |
Идентификатор | Возможность | Пример | Тесты |
|---|---|---|---|
F131-01 | Предложения WHERE, GROUP BY и HAVING поддерживаются в запросах с сгруппированными представлениями |
| OK. |
F131-02 | Несколько таблиц поддерживаются в запросах с сгруппированными представлениями |
| OK. |
F131-03 | Функции множеств поддерживаются в запросах с сгруппированными представлениями |
| OK. |
F131-04 | Подзапросы с предложениями GROUP BY и HAVING и сгруппированные представления |
| OK. |
F131-05 | Однострочный SELECT с предложениями GROUP BY и HAVING и сгруппированными представлениями |
| OK. |
Нет. В Tarantool нет модулей.
ID | Возможность | Пример | Тесты |
|---|---|---|---|
F201 | Функция CAST |
| OK. |
ID | Возможность | Пример | Тесты |
|---|---|---|---|
F221 | Явные значения по умолчанию |
| Нет. Синтаксическая ошибка. |
Идентификатор | Возможность | Тесты |
|---|---|---|
F311-01 | CREATE SCHEMA | Нет. В Tarantool нет схем или баз данных. |
F311-02 | CREATE TABLE for persistent base tables | Нет. В Tarantool нет CREATE TABLE внутри CREATE SCHEMA. |
F311-03 | CREATE VIEW | Нет. В Tarantool нет CREATE VIEW внутри CREATE SCHEMA. |
F311-04
CREATE VIEW: | Нет. В Tarantool нет CREATE VIEW внутри CREATE SCHEMA. | F311-05 |
ID функции | Функция | Пример | Тесты |
|---|---|---|---|
F471 | Скалярные значения подзапроса |
| ОК. |
F481 | Расширенный предикат NULL |
| Нет. Синтаксическая ошибка. |
ID | Возможность | Пример | Тесты |
|---|---|---|---|
S011 | Различаемые типы |
| Нет. Tarantool не поддерживает различаемые типы. |
Feature ID | Feature | Example | Tests |
|---|---|---|---|
T321-01 | Пользовательские функции без перегрузки |
| Нет. Пользовательские функции для SQL создаются в Lua с другим синтаксисом. |
T321-02 | Пользовательские процедуры без перегрузки |
| Нет. Пользовательские функции для SQL создаются в Lua с другим синтаксисом. |
T321-03 | Вызов функции |
| Да. Tarantool может вызывать пользовательские функции Lua. |
T321-04 | Оператор CALL |
| Нет. Tarantool не поддерживает операторы CALL. |
T321-05 | Оператор RETURN |
| Нет. Tarantool не поддерживает операторы RETURN. |
ID | Возможность | Пример | Тесты |
|---|---|---|---|
T631 | Предикат IN с одним элементом списка |
| OK. |
Общее количество элементов, отмеченных «No»: 67
Общее количество элементов, отмеченных «OK»: 79