03.08.2015
Список изменений в СУБД ЛИНТЕР за март-июль 2015 года

Новые возможности СУБД

  • В команду 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», «Быстрый старт».