
Новые возможности СУБД
- В команду PRESS TABLE добавлен модификатор WITH TRUNCATE, что позволяет выполнять уменьшение размера дискового пространства, занимаемого таблицей.
- Отменено ограничение в 64К записей для таблиц $$$ATTRI и $$$USR, что позволяет создавать базы с увеличенным количеством столбцов, индексов, пользователей, привилегий.
- Разрешена передача курсора в качестве параметра хранимой процедуры.
- Добавлены иерархическая обработка исключений в хранимых процедурах и возможность использования исключений в стиле Oracle.
- Добавлена возможность указания имени пользователя для глобальной переменной.
- Добавлены в процедурный язык функции MIN, LEAST, GREATEST, USERID.
- Добавлен вывод информации о возникающих в процедурах исключениях на консоль ядра и в файл linter.out.
- Добавлены новые временные зоны для функций TO_GMTIME/TO_LOCALTIME (для совместимости с Oracle).
- Реализована возможность использовать пул сортировки больше 2 Гигабайт.
- Разрешено обновлять объединение запросов, если каждый из объединяемых запросов обновляем.
Доработки для отдельных платформ
- Реализован новый универсальный механизм сборки дистрибутива для платформ Windows, UNIX, QNX с использованием параллельной сборки.
UNIX-платформы
- Исправлено конфигурирование сборки для архитектур ARM (принудительно ставится макрос LONG_ALIGN).
- Исправлены несколько модулей для их нормальной компиляции компилятором gcc 2.95 (в котором есть проблемы с разрывом выражения директивами условной компиляции).
- Поправлено размещение библиотек по каталогам (в частности, библиотеки libqsqllinter.so).
- Поправлен состав собираемых дистрибутивов – убраны устаревшие утилиты и неиспользуемые файлы (для UNIX и QNX)
Windows-платформы
- Реализован и находится в стадии тестирования вариант сборки для Windows64, в нем исправлены отображение русскоязычных сообщений и некорректная работа некоторых приложений.
- Исправлены проблемы работы нового сетевого сервера для платформы Windows.
Доработки ядра СУБД, компилятора SQL, компилятора хранимых процедур, процедур сортировки
Оптимизации
- Для пула страниц ядра реализован 32-битный хэш (ранее был 16-битный).
- Проведена оптимизация записи BLOB-значений: исключены избыточные операции из журнализации BLOB-транзакций и записи BLOB-значений, выполнено предотвращение повторной записи BLOB-страниц при COMMIT.
- Оптимизирована работа с кодировками и передача информации о них.
- Оптимизировано вычисление подзапросов в запросах типа SELECT COUNT(*).
- Оптимизировано вычисление SELECT-запросов с пустыми источниками (если они есть и если для них автоматически следует, что результат запроса пустой – это сразу выдается).
- Реализовано использование IQ вместо BV для стратегии слияния двух столбцов с использованием индекса только по одному из них – на очень большую таблицу. Это устраняет проблему с неэффективностью использования разреженных BV.
- Обеспечено ускорение работы с пулом страниц для случая, когда работает только один канал.
- Ограничен первоначальный размер временной таблицы с целью исключения большой задержки при создании временной таблицы.
Стандартизация и унификация поведения СУБД
- Добавлены автоматические преобразования строковой константы в число и числовой константы в строку (при сравнении или присваивании в SQL-запросах) – для совместимости с Oracle.
- Поправлена обработка NULL-параметров строковых функций в хранимых процедурах (возврат NULL-значения вместо исключения BADPARAM).
- Разрешен вызов процедуры в списке VALUES оператора INSERT.
- Разрешено использование параметров в аргументах функций CONCAT, NEXT_DAY, *TRIM, а также в предикате IS [NOT] NULL.
- Разрешено выбирать NULL-значение без преобразования типа в SELECT-запросе для VIEW (тип столбца при этом считается INTEGER).
- Разрешено использование подзапроса внутри функции NVL.
- Разрешено использование SYS_GUID() в конструкции GENERATED (для типа BYTE).
- Разрешено использование подзапроса с FETCH FIRST или ORDER BY в SELECT-списке.
- Разрешено использование параметров в выражениях группировки.
- Разрешено опускать третий аргумент в функции REPLACE в SQL-запросах.
- Разрешено опускать второй аргумент в SQL-функции TRUNC для даты.
- В команду ALTER SEQUENCE добавлен модификатор CURRENT VALUE <текущее значение>. В отличие от модификатора START/RESTART WITH, который устанавливает текущее и стартовое значение последовательности, модификатор CURRENT VALUE меняет только текущее значение последовательности, не трогая стартовое.
- Реализовано альтернативное поведение FETCH в хранимых процедурах по ключу запуска /RESIGNAL_ALL (отмена исключения “конец выборки”).
- Увеличен размер буфера VIEW в компиляторе SQL (с 8 до 16 килобайт).
- Добавлена проверка допустимости имени глобальной переменной, разрешен символ '#' в именах глобальных переменных.
- Устранена возможность создавать хранимые процедуры и триггеры от имени другого пользователя как некорректная.
- Обеспечено единообразное выполнение хранимой процедуры вне зависимости от того, по каналу в какой кодировке она была запущена.
- Устранены несоответствия поведения различных механизмов обработки исключений в хранимых процедурах.
- Разрешены в хранимых процедурах многострочные комментарии стиля /* ... */.
- Добавлена выдача трассировочной информации о странице для случая, когда блокировка страницы не даёт увеличить память канала.
- Запрещено создавать IN-MEMORY таблицу, на которую есть ссылки (что потом после удаления этой таблицы могло приводить к нарушению целостности базы).
- Вывод сообщений о выборе стратегии обработки запроса ограничен только отладочной версией ядра.
- Исправлена работа псевдозначения USER – оно всегда должно идентифицировать того пользователя, который подал исходный запрос, а не того, от имени которого выполняется текущий запрос (если они различаются).
- Поправлен тест на хранимые процедуры, чтобы имя пользовательской функции не совпадало с именем стандартной функции (MIN).
- Скорректирована информация о параметрах в результате претрансляции команды EXECUTE (в результате трансляции предложения EXECUTE INTO :VARIABLE PROC() должно выдаваться то же самое, что и в результате SELECT PROC() INTO :VARIABLE).
Рефакторинг кода
- Добавлен новый интерфейс обмена между процессами.
- Произведено разделение каналов на соединения и курсоры.
Устранение обнаруженных проблем
- Устранена проблема с созданием VIEW, который содержит SELECT из VIEW в SELECT-списке.
- Исправлена обработка конструкции WITH TIES (только после FETCH FIRST, но не LIMIT) и устранен конфликт разных конструкций, начинающихся с лексемы WITH.
- Исправлена проверка синтаксиса команд CREATE VARIABLE и DROP VARIABLE.
- Исправлена обработка выражений, содержащих аналитические функции с конструкцией OVER.
- Исправлена ситуация с WITH LOCK в INSERT FROM SELECT без FROM в подзапросе.
- Исправлена работа скалярных функций INSTR/POSITION со вторым аргументом – параметром типа CHAR.
- Исправлена работа функции ASCII для аргументов типов переменной длины.
- Исправлена работа функции NEXT_DAY в случае перехода на следующий год.
- Исправлено падение 64-битного ядра на проверке предиката IS NULL.
- Исправлено сохранение имен столбцов в случае оптимизации запросов путем раскрытия подзапросов.
- Исправлена проблема с раскрытием подзапроса: в случае соединения OUTER JOIN одной и той же пары стартовых множеств, если стоящее слева стартовое множество — подзапрос, то раскрытие его может привести к проблемам (некорректному JOIN), поэтому теперь оно запрещено.
- Устранена проблема с предикатом сравнения с подзапросом и преобразованием типов.
- Исправлены проблемы работы с кэшем кодировок в компиляторе sql.
- Исправлена обработка запросов с подзапросами (в частности, из временных таблиц), возвращающими пустую выборку.
- Добавлено сохранение и восстановление информации при уходе на вычисление пользовательской функции.
- Исправлена проблема - в некоторых контекстах не вычислялись пользовательские функции, требующие квантования.
- Исправлен случай пропуска вычисления пользовательских функций.
- Исправлена проблема с зависанием на прерывании выполнения SQL-запроса в момент, когда из запроса вызвана пользовательская функция.
- Исправлена проблема с запросом – вызовом процедуры, возвращающей курсор.
- Устранено зацикливание на получении кода ошибки “конец выборки” при обработке SELECT-запроса с вызовами пользовательских функций.
- Исправлены случаи утечки памяти и потери информации при вызове исполнителя хранимых процедур.
- Исправлены отметки заполнения страницы при выполнении INSERT FROM SELECT.
- Поправлена работа команды TEST TABLE FULL для таблиц $$$SYSRL и $$$ATTRI (учитывается, что информация о временных таблицах не отображается в индексах).
- Исправлена ситуация с BOOLEAN-выражением (предикат SIMILAR) в SELECT.
- Исправлена проблема с работой конструкции CASE, содержащей внутри себя соединение предикатов по OR.
- Исправлена проблема с созданием и последующим удалением схемы.
- Устранена проблема работы с многостраничными кодировками по системному каналу.
- Устранены проблемы при создании как простых, так и составных индексов на длинные столбцы.
- Исправлена ситуация с некорректной проверкой доступа для клиента, поддерживающего новый формат обмена запросами.
- Добавлены дополнительные проверки для устранения ситуаций, приводивших к падениям на 64-разрядных платформах.
- Исправлен случай выставления неправильных битов в BITMAP – сделан одинаковый код для всех компиляторов.
- Исправлено состояние процедурного канала при передаче им управления другому каналу (для выполнения другой процедуры или запроса).
- Курсоры с событиями исключены из проверки при завершении работы ядра (т.к. их активность является штатной). Системные и прочие внутренние курсоры исключены из проверки на активность клиентов.
- Устранен вывод сообщений о проблемах с памятью ядра после удаления UNION-объектов.
- Устранен некорректный возврат информации о столбцах AUTOINC RANGE при разном порядке байт клиента и сервера.
- Устранена проблема Linter Multiversion с выдачей неверной информации после обнаружения удаленной записи.
- Исправлена конверсия информации о представлениях при разном порядке байт клиента и сервера.
- Устранена проблема с откатом добавления столбца, для которого указано DEFAULT-значение.
- Сделано, чтобы COMMIT на пустую транзакцию не давал ошибку, а завершался успешно.
- Исправлено восстановление BLOB-значений.
- Исправлена ошибка в цикле обработки событий, из-за которой часть событий могла перестать работать.
- Устранена проблема работы с каналами сортировки, которая могла приводить к бесконечному ожиданию процесса сортировки некоторыми каналами.
- Добавлена отсутствующая проверка, приводившая к падению ядра СУБД при переполнении файла 1.31.
- Исправлен случай ошибочного назначения столбцу страницы с ограничениями целостности при создании таблицы.
- Исправлена работа с BLOB в режиме autocommit.
- Исправлена работа команды alter table modify blobfile.
- Исправлена проблема с зависанием при восстановлении таблицы из архива.
- Устранено падение при сжатии большого блока в in-kernel backup.
- Убран лишний запуск сетевого сервера при старте ядра из Администратора СУБД.
- Исправлена обработка запросов с обращением к записям псевдотаблицы $$$CHAN по rowid.
- Скорректирован подсчет размера памяти сортировки.
- Исправлена ситуации с падением ядра СУБД в цикле о всем каналам.
- Исправлена ситуация с ошибкой 1044 при трансляции процедуры, содержащей ошибки.
- Исправлена проблема с перезапуском процесса сортировки.
- Исправлена проблема работы с глобальными временными таблицами, когда их число превышало 8 для одного канала.
- Исправлена проблема с созданием уникального именованного индекса для глобальной временной таблицы
- Устранены проблемы поддержки формата BSON.
- Добавлено распознавание знаков + и – для констант в CASE и WHEN в процедурном языке.
- Исправлена обработка конструкции RETURN (NULL); в процедурном языке.
- Устранено падение ядра под Windows при трансляции процедуры с неопределенным кодом исключения.
- Устранено падение ядра при наличии в секции EXCEPTION ловушки WHEN ALL и дальнейшем RESIGNAL <имя>.
- Устранена ошибка в операторе присваивания результата процедуры типа BOOL.
- Исправлена для ситуация с падением ядра при трансляции хранимой процедуры с обращением к курсорной переменной.
- Устранена проблема в хранимой процедуре с TYPEOF(TABLE.FIELD).
- Устранен случай неправильной работы логического AND в хранимой процедуре.
- Исправлена проблема с неверным значением NULL-флага для результата хранимой процедуры.
- Добавлены проверки наличия канала при выполнении хранимой процедуры во избежание падения.
- Устранен конфликт имен параметров процедур с глобальными переменными.
- Исправлена ситуация с некорректной обработкой UNICODE-строк в качестве аргументов функции MAKESTR.
- Исправлена ошибка с возвратом значения глобальной переменной.
- Устранена проблема с множественными вызовами вложенных функций.
- Исправлена ситуация с падением транслятора хранимых процедур на трансляции процедуры с большим количеством параметров.
- Исправлена ситуация с потерей первых 2-х байтов у аргумента процедуры при преобразовании строки в VARBYTE.
- Устранена проблема с видимостью объектов в процедуре после вызова из нее другой процедуры, выполняемой от имени создателя.
- Устранена проблема с использованием глобальных переменных в хранимых процедурах.
- Устранена потеря значения точности для параметров хранимых процедур целых и вещественных типов.
Клиентские утилиты работы с СУБД
Утилита тестирования и восстановления БД testdb
- Добавлена новая диагностика и исправлены падения для тестирования сильно поврежденных индексов.
- Добавлены диагностика и исправление ситуации, когда существует одностолбцовый именованный индекс, а соответствующий ему столбец по какой-то причине не помечен как индексированный.
- Добавлено физическое тестирование всех системных таблиц по ключу –ts.
- Поправлена проверка повторных ссылок на страницу – не проверялось наличие повторной ссылки одного и того же типа.
- Исправлено падение на восстановлении BLOB.
Утилита inl (текстовый интерфейс подачи SQL-запросов)
- Реализовано автодополнение в верхнем регистре.
- Команда history дополнена возможностью запретить ведение истории или стереть её (hist[ory] on|off|clear), также добавлен ключ запуска –nohist.
- Исправлена работа утилиты как конвейерной для UNIX-платформ.
- Добавлен вывод времени выполнения для BLOB-команд.
- Устранен случай повторного вывода переменных командой DISPLAY VARIABLE.
- Исправлен синтаксический разбор операторов, разорванных между строками входного текста.
- Исправлено отображение информации о кодировках при разном порядке байт клиента и сервера.
- Исправлена обработка файла без символа конца строки перед символом конца файла.
- Исправлена проблема с падением на выполнении скриптов, работающих с геоданными.
- Исправлены падения на выдаче ответов под SunOS.
- Исправлено падение при неверном формате ответа от ядра СУБД.
Утилита dbstore (выгрузка данных в текстовые форматы)
- Поправлено сохранение результата запроса в XML-файл.
- Устранены проблемы с порядком восстановления объектов.
- Поправлена выгрузка информации для пользователей identified by LDAP, identified by Kerberos, identified by PROTOCOL.
- Поправлены размеры буферов, чтобы учесть возможность перекодирования в UTF-8.
- Устранена проблема с выгрузкой правил репликации, а также такая выгрузка запрещена в версии без поддержки распределенности.
- Поправлены проблемы с выгрузкой public-последовательностей и синонимов.
- Устранена проблема с выводом имени кодировки.
- Поправлена выгрузка INITIAL-значения autoinc-столбца типа BIGINT.
- Поправлена выгрузка таблиц с более чем одним BLOB-столбцом в случае работы с ключом –j.
- Поправлена выгрузка синонимов с русскими именами и синонимов на таблицы с русскими именами.
- Поправлена выгрузка ограничений целостности для таблиц с русским именами без ключа –k.
- Исправлена проблема со взятием имени пользователя в лишние двойные кавычки.
- Исправлена проблема с выгрузкой не всех пользователей на некоторых БД.
- Поправлена работа ключа –ds, добавлен параметр для ключа (теперь можно указывать -ds число).
- Поправлена совместная работа ключей –r и –sf.
- Поправлена работа разных вариантов ключа –o.
- Поправлена справка для ключа –k.
Утилита lindeskx (графический интерфейс администратора БД)
- Доработаны возможности визуального редактора схем БД. Поправлена автоматическая нумерация таблиц и столбцов. Поправлено сохранение свойства уникальности столбца.
- Расширены поля для ввода аргументов процедур с 150 до 4096 символов, в связи с этим добавлены проверки переполнения буфера запроса, увеличен буфер для отладки процедур (для передачи длинных аргументов в режиме отладки).
- Убрано удаление комментариев из исходного кода хранимых процедур.
- Скорректирован подсчет времени выполнения запроса.
- Стандартизовано отображения результата процедуры типа numeric.
- Устранено падение при разборе исключения от процедуры.
- Исправлена ситуация с падением под Linux при выполнении большого числа запросов (включая трансляцию процедур, содержащих ошибки).
- Исправлена ситуация с утечкой GDI объектов.
Утилита конвертации БД Datariver
- Добавлен разбор параметров для автоматической инициализации.
- Исправлено получение списка пользователей для Oracle.
- Исправлена проблема с перечитыванием списка объектов в случае их изменения.
- Исправлен тип подключения.
- Исправлено получение чисел float.
- Исправлено получение ESCape символов.
- Ускорено обновление процентов конвертации.
Утилита ldba (псевдографический интерфейс администратора БД)
- Добавлена поддержка хранимых событий.
Утилита архивирования и восстановления БД lhb
- Исправлена проблема с отсутствием кода возврата оператора run скриптового языка.
Утилита конвертации из dbf-формата dbf2lin
- Проведен рефакторинг кода.
Сетевые утилиты
- Исправлена работа dbs_tcp для Windows64 – несоответствие типов приводило к зацикливанию.
Программные интерфейсы СУБД
Интерфейс JDBC
- Исправлена проблема с неверными преобразованиями типов при работе на процессоре ARMv7 ARMADA XP.
- Актуализированы тесты.
Интерфейс ADO.NET
- Поправлено определение столбца IS_NULLABLE представления DOTNET_COLUMNS (должно означать, что значение соответствующего столбца может быть опущено).
- Доработан метод DataReader.GetSchemaTable для запросов, извлекающих данные из нескольких таблиц.
- Поправлена работа с параметрами в MultipleCommand (если команда состоит из нескольких запросов, разделенных точкой с запятой, то параметры могут быть в каждом запросе).
- Добавлен класс LinterMigrationSqlGenerator в Entity Provider (начиная с версии Entity Framework 6). Реализованы функции для создания таблиц и добавления колонок в таблицы.
- Устранена проблема с пакетной обработкой и хранимыми процедурами - хранимые процедуры нужно не добавлять в пакет команд, а обрабатывать их отдельно.
- Устранена проблема с последовательностями (из-за повторного FETCH значение последовательности наращивалось дважды).
Интерфейс Qt
- Устранена проблема со сборкой в версии СУБД ЛИНТЕР 6.0.15.
Интерфейс Python
- Исправлена сборка библиотеки Python через скрипт установки на ОС Linux.
- Доработан интерфейс django - добавлены самоустановка и поддержка современных версий.
- Актуализированы тесты.
Интерфейсы Perl и Perl-DBI
- Исправлена сборка интерфейсов Perl и Perl-DBI с использованием встроенных средств самого Perl (perl-скрипта и утилиты ExtUtils::MakeMaker).
- Обеспечена совместимость с версиями Perl младше 5.8.
- Добавлена проверка на использование неинициализированной переменной при чтении BLOB-данных в интерфейсе Perl-DBI.
- Исправлена некорректная передача параметра в функции записи/удаления BLOB-данных в интерфейсе Perl-DBI.
- Добавлена поддержка нового формата претранслированного запроса.
- Актуализированы тесты.
Интерфейс Ruby
- Выполнена сборка для Ruby версии 2.2.
- Добавлены отсутствующие константы, описывающие коды завершения интерфейса Ruby.
- Исправлена ошибка сегментирования и утечки памяти в функции обработки ошибок.
- Актуализированы тесты.
Интерфейсы PHP и PHP-PDO
- Исправлена сборка интерфейса PHP на ОС Linux через утилиту phpize.
- Реализована сборка PDO для использования как с MT, так и с не-MT версией PHP.
- Исправлено падение интерфейса PHP при формировании массива текущей строки выборки.
- Убраны предупреждения при сборке с макросом LONG_ALIGN, которые могли приводить к неверной работе типа BIGINT.
- Исправлен случай возврата некорректного целочисленного значения функцией Linter_GETM.
- Исправлена проблема в интерфейсе PHP-PDO c обработкой колонок с одинаковыми именами при атрибуте PDO::FETCH_LAZY.
- Исправлена проблема в интерфейсе PHP-PDO с работой PDOStatement::fetchAll со столбцами типа N(VAR)CHAR.
- Исправлена проблема в интерфейсе PHP-PDO с работой процедуры linter_handle_last_insert_id(),которая в виде строки выдает последнее значение идентификатора записи или последовательности.
- Исправлено получение информации о характеристике столбца выборки в PHP-PDO на 64-разрядном Linux (для столбца выборки с типом BYTE показатель native_type. должен иметь тип string).
- Исправлена проверка конвертации объекта класса stdClass в целочисленное значение в интерфейсе PHP-PEAR.
- Актуализированы тесты.
Интерфейс TCL
- Исправлена сборка интерфейса TCL/TK из дистрибутива при ручном указании исходных файлов TCL и TK при конфигурировании.
- Добавлена поддержка версий 8.4 и ниже.
- Изменена работа с параметрами при выполнении linter_bindpar, опции оператора отредактированы.
- Добавлен trim для значений в linter_getdata, linter_getrow.
- Поправлен список доступных опций для курсора и оператора.
- Добавлена возможность привязки NULL-значения.
- Добавлена возможность выполнения оператора без параметров.
- Реализовано получение имён владельца/таблицы/колонки, содержащих пробелы.
- Добавлен пакет тестов.
- Обновлен README.
Интерфейс LinAPI (нативный интерфейс высокого уровня для языка C)
- Поправлен разбор ошибки, полученной после выполнения процедуры; устранено некорректное поведение в случае ошибки в процедуре, возвращающей курсор; устранена неверная работа с пустым курсором, вернувшимся из процедуры.
- Поправлена обработка опций курсора cStrNumber, cPosNumber, cApiCode.
- Интерфейс Intlib (нативный интерфейс низкого уровня)
- Поправлены примеры на команду DIRK (в соответствии с изменением порядка нумерации каналов).
Документация
- Устранены отдельные опечатки и некорректные ссылки в документах «Запуск и останов в среде ОС Windows», «Запуск и останов в среде ОС UNIX, QNX», «Архитектура СУБД», «Сетевые средства», «Справочник по SQL», «Расширенный Рабочий стол СУБД ЛИНТЕР», «Архивирование и восстановление базы данных», «Интерактивный SQL», «Быстрый старт».