Отчёт о тестировании SQLDetective 5.0.1.182 (далее - SD), опубликованном 13 июня 2019 года. Проверки производились согласно пунктам Release Notes.
IMPROVEMENTS 0-1+1=0 из 1+1+1=3 возможных, -0.2-0.5=-0.7 за баги
SQL Editor 0 из 1 возможного
• Improved the workflow of the automatic determination of the execution plan.
Усовершенствован путь автоматического определения плана выполнения.
У данного пункта RNs весьма многозначный смысл. Либо речь идёт об утилите Explain Plan, которая является неотъемлемой частью SQL Editor. Либо речь идёт об автоматическом подборе настроек из числа "Preferences / General / Session", касающихся версии базы данных. Либо речь идёт о сугубо внутреннем программном коде, который производит общение приложения с базой данных (DOA - пакет Delphi, осуществляющий взаимосвязь базы данных Oracle с интерфейсом SQLDetective). В любой из трёх моих гипотез что-либо проверить по имеющемуся тексту RNs не представляется возможным, вернее, исследовать можно бесконечно долго и много. Поскольку тех.писательнице не разъяснили конкретику новшества, то считаю этот пункт припиской и не дам ни балла.
Database Monitor -1 из 1 возможного, за баг комплексного теста -0.2 балла
• Queries now run in a sequence, not in parallel threads.
Запросы теперь запускаются последовательно, а не в параллельных потоках.
Утилита мониторинга базы позволяет отслеживать множество процессов с точки зрения её администратора. Не могу согласиться, что для ускорения выполнения запросов их последовательное выполнение более удобно, да и для истинного мониторинга некоторых процессов более точные данные получаются при параллельном обследовании. Поэтому считаю данное новшество вредным усугублением функционала и снимаю балл за исполнение. Более полезным было бы введение опции для каждого из графиков, при значении которой администратор базы сам бы выбирал очередь или параллелизацию выполнения запросов для мониторинга процессов. Хотелось предложить проверить функционал внутренними средствами (Session Navigator, DB Examiner / Top SQL), но Session Navigator во всех билдах 5-й версии не работает, то есть открывается пустое окно после ошибки базы "ORA-29275: partial multibyte character", а в списке последних выполненных запросов "DB Examiner / Top SQL" не видно изменение параллелизации на последовательный запуск. К сожалению, в старых версиях SD (4.7, 4.4) модуль Session Navigator тоже не показывает, что запросы монитора базы выполнялись в параллельных нитях (не дополнительные сессии). За давний не исправленный баг соседнего модуля есть смысл снять -0.2 балла.
PL/SQL Debugger 1 за исполнение, -0.5 за баг
• Added the ability to view global variables.
Добавлена возможность просматривать глобальные переменные.
Поскольку пункт RNs в группе дебаггера PL/SQL кода, то речь идёт о глобальных переменных в рамках, например, пакета. Для теста создадим спецификацию и тело пакета в базе любой версии с глобальными и локальными переменными.
CREATE OR REPLACE PACKAGE glb_prm_pkg
AS
prm1_glob date;
procedure proc_1 (prm2_local in number);
END;
CREATE OR REPLACE PACKAGE BODY glb_prm_pkg
AS
procedure proc_1(prm2_local in number) IS
BEGIN
prm1_glob := sysdate + prm2_local;
END;
END;
Затем добавим их в список просматриваемых (Stored Program Editor / Watches), и в режиме включенного дебаггера (Session / PL/SQL Debugger / Start) в пошаговом исполнении одной из подпрограмм пакета посмотрим на значения переменных в текущем и предыдущем билдах SD. Также посмотрим на значения переменных через контекстное меню "Stored Program Editor / PL SQL Debugger / Evaluate Modify", через хинт (при включенной опции "Preferences / PL SQL Debugger / Tooltip expression evaluation") переменной при наведении курсора на её имя в области редактора кода. Предыдущий билд глобальную переменную везде отображал как необъявленную, хинт для неё не срабатывал, а значение локальной переменной не изменялось при пошаговом исполнении в хинте и списке Watches. Обе переменные подвешивали навсегда приложение при попытке просмотреть их значение через контекстное меню "Stored Program Editor / PL SQL Debugger / Evaluate Modify" - это серьёзный баг, почему-то до сих пор не выявленный группой разработки. Получается, что в рамках новшества был исправлен баг несменяемости значения наблюдаемой локальной переменной, но упущен из виду один из способов просмотра значения переменных. Поэтому пункт RNs получает 1 балл за исполнение и теряет -0.5 за критичный (нет вариантов обхода ошибки, приложение закрыть получается только через Диспетчер Программ) баг. Примечание к багу: пункт контекстного меню активирован в режиме запущенного дебаггера, но не выделенного курсором текста. Вероятная причина бага - парсер не в состоянии определить границы имени переменной для передачи в последующий модуль.
BUGS FIXED 0.8+1.5+0+1+0.8+0+0+0+0.8=4.9 из 1+3+1+1+1+2+1+1+1=12 возможных, -0.5-0.4-0.2=-1.1 за баги
Code Editors 0.8 из 1 возможного
• The cursor, when moved using the Ctrl+arrow keys combinations, no longer breaks on pointing to the dollar and number signs.
Курсор при его перемещении комбинацией клавиш Ctrl+стрелка больше не сбивается на символах доллара и цифр.
Для тестов нам понадобятся строки с символами доллара и цифр в разных местах: до и после пробела (а также переноса строки, табулятора, дефиса, подчёркивания), самостоятельные, комбинированные с другими символами. К редакторам кода относятся многие окна приложения, но достаточно проверить один Stored Program Editor, поскольку комбинация клавиш срабатывает в едином интерфейсном элементе SynEdit из числа Delphi возможностей, на котором написан продукт. Вполне вероятно, что ваш текст для теста поможет обнаружить и другие символы, препятствующие ожидаемой работе комбинации клавиш. Разница между кликами в предыдущем и текущем билдах заметна на строках с символом доллара, но не на цифрах, поэтому фикс получает только 0.8 балла.
PL/SQL Debugger 1+0+0.5=1.5 из 3 возможных
• The error message “Unhandled exception occurred. Debugger will be terminated.” no longer appears after an Oracle exception error is raised.
Сообщение об ошибке про уничтожение дебаггера больше не появляется после срабатывания исключения ошибки базы.
Поскольку ошибка исключения не конкретизирована, то для теста попытаемся воспроизвести его на вышеупомянутом коде. Запустим отладку пакетной процедуры, предварительно добавив блок исключений (перекомпиляцию выполним без отладчика - просто Ctrl+F9) и не задав входного значения. Да, предыдущий билд сообщал о разрушении дебаггера, тем не менее не отключал его. Фикс выполнен и получает балл.
• Unexpected error messages no longer appear if a breakpoint is set to an illegal line.
Сообщение о неожиданной ошибке больше не появляется, если точка остановки поставлена на незаконной строке.
Какие строки считаются недопустимыми для точки останова? Например, декларативная часть или разбитое на несколько строк выражение присваивания. К сожалению, мне не удалось получить неожиданную ошибку в предыдущем билде, поэтому этот пункт RNs считаю припиской и не даю балл.
• Variables are now automatically applied to the script during its execution.
Переменные теперь автоматически применяются в скрипте во время его выполнения.
О каком скрипте речь? У меня на уме два места: скрипт самой отлаживаемой подпрограммы и скрипт для отладки, формируемый в окне "Stored Program Editor / Stored Program Execution" по кнопке "Generate PL/SQL for object execution" и автоматически на открытии этого окна. Скрипт самой подпрограммы визуально не изменяется, но значения локальных переменных стали отображаться в списке Watches. Также без каких-либо изменений отображается скрипт в окне "Stored Program Editor / Stored Program Execution". Поэтому фикс получает лишь 0.5 балла за введение юзера в заблуждение подобным описанием.
SQL Editor 0 из 1 возможного
• Fixed the work of the “Bytes per character” option when it is set to “Autodetect".
Исправлена работа опции "Байт на символ", когда она установлена в автоопределение.
Переключение опции "Байт на символ" доступно на странице "General / Session" настроек приложения Preferences. Почему этот пункт RNs в группе SQL Editor - для меня загадка, потому что применение опции разбросано по всему приложению, начиная от мастера таблиц, ячеек гридов и кончая всеми редакторами и окнами, отображающими данные UTF-базы. В тексте фикса не уточняется, как именно неверно определялась пропорция: не бралось в учёт какое-то значение базы из числа параметров инициализации, либо шрифт для отображения символов в SQL Output или ячейках грида неровно форматировался, а может и что иное. Поэтому попытаемся найти разницу в отображении UTF-символов только в SQL Output закладке окна SQL Editor. В качестве теста выполним запрос с различной шириной символов:
select 'м и ш - русский текст' as fld from dual
union
select 'Ш и М - текст русский' as fld from dual
union
select 'РусскийТекст - М и Ш' as fld from dual;
в грид и текстовый вывод при различных значениях опции на любой базе, вне зависимости от её версии и utf-инсталляции. Разницы между результатами в предыдущем и текущем билдах не обнаружено, поэтому пункт RNs не получает ни балла.
Object Navigator 1 из 1 возможного
• The error “Invalid SQL statement” no longer occurs on trying to expand the Editions node.
Ошибка неверного SQL выражения больше не случается при попытке развернуть ноду Editions.
В нескольких предыдущих билдах SD на базах, поддерживающих редакции объектов, действительно был выявлен этот баг. В текущем билде доступ к списку редакций осуществляется без проблем. Фикс получает балл.
Database Monitor 0.8 из 1 возможного
• Slow SQL statements for blocked and blocking sessions now run faster in Oracle Databases 11.2. The fix also affects the Session Navigator.
Показ блокированных и блокирующих сессий теперь осуществляется быстрее в базе версии 11.2. Фикс также осуществлён и в навигаторе сессий.
В мониторе базы два графика блокированных данных отображаются на закладке Activity. В навигаторе сессий для слежения за блокированными данными сформировано три грида на закладке Locks. Для тестов воспользуемся внутренней утилитой "DB Examiner / Top SQL" и сравним значения Optimizer Cost, CPU Time, Elapsed Time для запросов
SELECT SUM(Decode(B.BLOCKER, 'YES', 1, 0)) BLOCKING, SUM(Decode(S.BLOCKING_SESSION_STATUS, 'VALID', 1, 0)) BLOCKED FROM SYS.V_$SESSION S , ( SELECT DISTINCT SID BLOCKER_SID , 'YES' BLOCKER FROM V$LOCK WHERE BLOCK=1 AND 0=0 ) B WHERE 0=0 AND B.BLOCKER_SID(+) = S.SID;
/
SELECT SUM(DATA_BLOCKS_READ) DATA_BLOCKS_READ, SUM(DATA_BLOCKS_WRITE) DATA_BLOCKS_WRITE, SUM(TEMP_BLOCKS_READ) TEMP_BLOCKS_READ, SUM(TEMP_BLOCKS_WRITE) TEMP_BLOCKS_WRITE FROM ( SELECT /*+ NO_MERGE */ SUM(PHYBLKRD) DATA_BLOCKS_READ, SUM(PHYBLKWRT) DATA_BLOCKS_WRITE, 0 TEMP_BLOCKS_READ, 0 TEMP_BLOCKS_WRITE FROM SYS.V_$FILESTAT S WHERE 0=0 UNION ALL SELECT /*+ NO_MERGE */ 0, 0, SUM(PHYBLKRD) TEMP_BLOCKS_READ, SUM(PHYBLKWRT) TEMP_BLOCKS_WRITE FROM SYS.V_$TEMPSTAT S WHERE 0=0 );
/
в процессе работы DB Monitor. К сожалению, не получится увидеть фикс в Session Navigator, так как он не показывает никаких данных из-за вышеописанного бага. В рамках комплексного тестирования обнаружен баг в DB Examiner, который перестал дублировать полный и форматированный текст ячеек столбца "SQL Text". Но поскольку один из запросов в мониторе базы был оптимизирован до
SELECT SUM(DATA_BLOCKS_READ) DATA_BLOCKS_READ, SUM(DATA_BLOCKS_WRITE) DATA_BLOCKS_WRITE, SUM(TEMP_BLOCKS_READ) TEMP_BLOCKS_READ, SUM(TEMP_BLOCKS_WRITE) TEMP_BLOCKS_WRITE FROM ( SELECT /*+ NO_MERGE */ SUM(PHYBLKRD) DATA_BLOCKS_READ, SUM(PHYBLKWRT) DATA_BLOCKS_WRITE, 0 TEMP_BLOCKS_READ, 0 TEMP_BLOCKS_WRITE FROM SYS.V_$FILESTAT S WHERE 0=0 UNION ALL SELECT /*+ NO_MERGE */ 0, 0, SUM(PHYBLKRD) TEMP_BLOCKS_READ, SUM(PHYBLKWRT) TEMP_BLOCKS_WRITE FROM SYS.V_$TEMPSTAT S WHERE 0=0 );
то пользователи смогут заметить ускорение. А мы, как тестировщики, можем это подтвердить сравнив планы исполнения. Фикс получает 0.8 балла из-за наличия блокера в Session Navigator для полной проверки.
DDL for Scheduled Jobs 0+0=0 из 2 возможных, -0.4-0.1=-0.5 за проблемы
• Replaced single quotes with double quotes in the attribute statement event_condition => ‘TAB.USER_DATA.EVENT_TYPE = ‘‘JOB_OVER_MAX_DUR’‘’.
Заменены одинарные кавычки на двойные для атрибута выражения в сложносоставном условии события.
Для проверки фикса откроем мастер задач по расписанию и попробуем создать задание со сложным условием события. Для этого на странице Schedule выберем "Inline Schedule" и "Event". В блоке Event выберем любой имеющийся объект, например, очередь в схеме SYS. Теперь можем формировать сложное условие для события через мастер формул. И тут выясняется, что все символьные строки мастер формул обрамляет только в одинарные кавычки. А это значит, что фиксить стоило не последствия (формирование DDL), а причину (интерфейс продукта). Никак не получится отметить фикс. А за давнишний прокол в мастере формул ещё и сниму -0.4 балла.
• DDL now generates with a correct attribute value RAISE_EVENTS => JOB_OVER_MAX_DUR.
Скрипт на создание задачи по расписанию теперь генерится с корректным значением JOB_OVER_MAX_DUR атрибута RAISE_EVENTS.
Указанный атрибут бывает с подобным значением в базе версии ниже 11, которой нет в моём распоряжении. Поэтому и невозможно выяснить, что же конкретно тех.писательница считала некорректным в предыдущем билде. Но попутно выяснились интерфейсные проблемы мастера задания по расписанию.
На странице General можно выбрать события из списка, который открывается в неожиданном месте, перекрывая зону вызова при минимальных размерах мастера, окно не выровнено ни по одному из элементов, что сбивает юзера с толку - не понятно для какого видимого элемента предназначен выбор значений. Пункту RNs не дам ни балла из-за пространного описания, а за интерфейсные проблемы сниму -0.1.
Installer/Updater 0 из 1 возможного
• Fixed the installation procedure on a 32-bit Windows OS.
Исправлена процедура инсталляции на 32-битную систему Windows.
К сожалению, тех.писательница не удосужилась уточнить причину проблемы, а инсталлятор и апдейтер не показали никакой разницы в стандартной функциональности. Поэтому пункт RNs не получает ни балла.
Profiler Wizard 0 из 1 возможного
• The settings to set/modify password parameters in the Profile Wizard are no longer missing.
Установка выставления и изменения параметров пароля в мастере профиля больше не пропускается.
Поскольку Профиль - объект не схемный, то подключиться к базе для тестирования надо с админскими правами. Визуально мастер профиля в предыдущем и текущем билдах не отличается, поэтому для выяснения того, ЧТО пропускалось, создадим как минимум два объекта - со значениями по-умолчанию и любыми другими. Перед созданием объекта просмотрим внимательно скрипт на создание объекта, а после его создания сгенерим DDL и их тоже сравним по билдам и исходникам. Поскольку никакой разницы ни в чём не обнаружено, то могу смело заявить, что в предыдущем билде ничто не пропускалось, а пункт RNs является припиской и не получает ни балла.
Scenes 0 из 1 возможного, -0.4 за баги
• An access violation error no longer occurs on trying to save the default scene after reconnecting a session.
Ошибка доступа больше не случается при попытке сохранить декорации по-умолчанию после переподключения сессии.
Часть навигатора объектов ContentSelector умеет сохранять и восстанавливать закреплённые закладки, что разработчиками SD названо "декорациями" этого окна. Набор закладок можно сохранить в декорацию по-умолчанию или в названную по-иному. Поскольку декорации схемо-зависимые, то для теста в предыдущем и текущем билдах подключимся поочерёдно к одной и той же сессии, закрепим одну-две закладки, выполним переподключение к базе и затем сохранение декорации. Если в предыдущем билде не получается воспроизвести ошибку доступа, то обнулим сохранённую декорацию (быстрый способ - удалить файлы "SD_ON_Scene*.*" из папки "%AppData%\Roaming\SQLDetective\Data\"; рабочие действия - включить только Default декорацию, в среднем окне проверить, что нет закреплённых закладок, иначе - открепить их). Примечание: оба билда для точности проверки нельзя запускать одновременно на одной машине, либо тесты проводите последовательно, либо на разных машинах, чтобы настройки приложения не наложились друг на друга. У меня никак не получилось воспроизвести ошибку доступа, проделывая в точности описанные шаги при различных значениях опций "Preferences / General / Object Navigator / Restore open scenes" и "Preferences / General / Object Navigator / Automatically save modified scene". Но в обоих билдах выявлен интерфейсный баг не ожидаемой работы чек-бокса: декорация по-умолчанию выключается при переподключении к базе "Session / Reconnect", включается при отключении от базы "Session / Disconnect" или при запуске приложения с подключением к базе. Изменённая декрация по-умолчанию всегда сохраняется вне зависимости от опции "Preferences / General / Object Navigator / Automatically save modified scene". Так что пункт RNs никак не может считаться сделанным и не получает балл, а за выявленные баги в работе опций снимаю -0.4 балла.
Preferences 0.8 из 1 возможного, -0.2 за баг
• Fixed local sorting of numeric columns when the “Display Numbers” option is set to “Numeric”.
Исправлена локальная сортировка числовых колонок, когда опция показа числовых значений выставлена в Numeric.
Опция показа числовых значений расположена на странице "Preferences / General" и распространяет своё действие в основном на гриды данных базы. О разнице локальной и серверной сортировки почитайте статьи "Preferences – Dataset Editors" и "Dataset Editors – Data sorting" хелпа приложения. Для тестов воспользуемся гридом Objects в навигаторе объектов, который доступен и всегда имеет необходимые для нас данные (числовые, символьные и другие поля) вне зависимости от версии базы. В предыдущем билде локальная сортировка числовых колонок при любом значении их отображения выполнялась как для символьных: сначала все, начинающиеся с 0, потом с 1 и так далее, вне зависимости от размерности чисел. В текущем билде локальная сортировка воспринимает числовые поля, как цифры со своей разрядностью, а не буквенно-числовые символы. Фикс сделан, но описан в RNs с запутыванием юзера (лишнее упоминание о настройке), поэтому получает только 0.8 балла. В процессе тестов проявился баг в порядке сортированых полей после смены серверной и локальной сортировок: открыть набор данных, отсортированный по одному полю серверно - одно поле первого порядка серверной сортировки; трижды кликнуть по несортированному полю для выставления/смены/снятия локальной сортировки - одно поле первого порядка локальной сортировки; выставить на этом же поле серверную сортировку - её порядок серверной сортировки не 2-го порядка, а неожиданно 3-го. То есть какие-то из кликов не обнулили флаг расчёта порядка серверной сортировки или локальная добавила лишний клик в соседский флаг. За баг сниму -0.2 балла.
Итого по билду: 0+4.9=4.9 баллов из 3+12=15 возможных дают 4.9/15=32% готовности и теряет -0.7-1.1=-1.8 балла.
IMPROVEMENTS 0-1+1=0 из 1+1+1=3 возможных, -0.2-0.5=-0.7 за баги
SQL Editor 0 из 1 возможного
• Improved the workflow of the automatic determination of the execution plan.
Усовершенствован путь автоматического определения плана выполнения.
У данного пункта RNs весьма многозначный смысл. Либо речь идёт об утилите Explain Plan, которая является неотъемлемой частью SQL Editor. Либо речь идёт об автоматическом подборе настроек из числа "Preferences / General / Session", касающихся версии базы данных. Либо речь идёт о сугубо внутреннем программном коде, который производит общение приложения с базой данных (DOA - пакет Delphi, осуществляющий взаимосвязь базы данных Oracle с интерфейсом SQLDetective). В любой из трёх моих гипотез что-либо проверить по имеющемуся тексту RNs не представляется возможным, вернее, исследовать можно бесконечно долго и много. Поскольку тех.писательнице не разъяснили конкретику новшества, то считаю этот пункт припиской и не дам ни балла.
Database Monitor -1 из 1 возможного, за баг комплексного теста -0.2 балла
• Queries now run in a sequence, not in parallel threads.
Запросы теперь запускаются последовательно, а не в параллельных потоках.
Утилита мониторинга базы позволяет отслеживать множество процессов с точки зрения её администратора. Не могу согласиться, что для ускорения выполнения запросов их последовательное выполнение более удобно, да и для истинного мониторинга некоторых процессов более точные данные получаются при параллельном обследовании. Поэтому считаю данное новшество вредным усугублением функционала и снимаю балл за исполнение. Более полезным было бы введение опции для каждого из графиков, при значении которой администратор базы сам бы выбирал очередь или параллелизацию выполнения запросов для мониторинга процессов. Хотелось предложить проверить функционал внутренними средствами (Session Navigator, DB Examiner / Top SQL), но Session Navigator во всех билдах 5-й версии не работает, то есть открывается пустое окно после ошибки базы "ORA-29275: partial multibyte character", а в списке последних выполненных запросов "DB Examiner / Top SQL" не видно изменение параллелизации на последовательный запуск. К сожалению, в старых версиях SD (4.7, 4.4) модуль Session Navigator тоже не показывает, что запросы монитора базы выполнялись в параллельных нитях (не дополнительные сессии). За давний не исправленный баг соседнего модуля есть смысл снять -0.2 балла.
PL/SQL Debugger 1 за исполнение, -0.5 за баг
• Added the ability to view global variables.
Добавлена возможность просматривать глобальные переменные.
Поскольку пункт RNs в группе дебаггера PL/SQL кода, то речь идёт о глобальных переменных в рамках, например, пакета. Для теста создадим спецификацию и тело пакета в базе любой версии с глобальными и локальными переменными.
CREATE OR REPLACE PACKAGE glb_prm_pkg
AS
prm1_glob date;
procedure proc_1 (prm2_local in number);
END;
CREATE OR REPLACE PACKAGE BODY glb_prm_pkg
AS
procedure proc_1(prm2_local in number) IS
BEGIN
prm1_glob := sysdate + prm2_local;
END;
END;
Затем добавим их в список просматриваемых (Stored Program Editor / Watches), и в режиме включенного дебаггера (Session / PL/SQL Debugger / Start) в пошаговом исполнении одной из подпрограмм пакета посмотрим на значения переменных в текущем и предыдущем билдах SD. Также посмотрим на значения переменных через контекстное меню "Stored Program Editor / PL SQL Debugger / Evaluate Modify", через хинт (при включенной опции "Preferences / PL SQL Debugger / Tooltip expression evaluation") переменной при наведении курсора на её имя в области редактора кода. Предыдущий билд глобальную переменную везде отображал как необъявленную, хинт для неё не срабатывал, а значение локальной переменной не изменялось при пошаговом исполнении в хинте и списке Watches. Обе переменные подвешивали навсегда приложение при попытке просмотреть их значение через контекстное меню "Stored Program Editor / PL SQL Debugger / Evaluate Modify" - это серьёзный баг, почему-то до сих пор не выявленный группой разработки. Получается, что в рамках новшества был исправлен баг несменяемости значения наблюдаемой локальной переменной, но упущен из виду один из способов просмотра значения переменных. Поэтому пункт RNs получает 1 балл за исполнение и теряет -0.5 за критичный (нет вариантов обхода ошибки, приложение закрыть получается только через Диспетчер Программ) баг. Примечание к багу: пункт контекстного меню активирован в режиме запущенного дебаггера, но не выделенного курсором текста. Вероятная причина бага - парсер не в состоянии определить границы имени переменной для передачи в последующий модуль.
BUGS FIXED 0.8+1.5+0+1+0.8+0+0+0+0.8=4.9 из 1+3+1+1+1+2+1+1+1=12 возможных, -0.5-0.4-0.2=-1.1 за баги
Code Editors 0.8 из 1 возможного
• The cursor, when moved using the Ctrl+arrow keys combinations, no longer breaks on pointing to the dollar and number signs.
Курсор при его перемещении комбинацией клавиш Ctrl+стрелка больше не сбивается на символах доллара и цифр.
Для тестов нам понадобятся строки с символами доллара и цифр в разных местах: до и после пробела (а также переноса строки, табулятора, дефиса, подчёркивания), самостоятельные, комбинированные с другими символами. К редакторам кода относятся многие окна приложения, но достаточно проверить один Stored Program Editor, поскольку комбинация клавиш срабатывает в едином интерфейсном элементе SynEdit из числа Delphi возможностей, на котором написан продукт. Вполне вероятно, что ваш текст для теста поможет обнаружить и другие символы, препятствующие ожидаемой работе комбинации клавиш. Разница между кликами в предыдущем и текущем билдах заметна на строках с символом доллара, но не на цифрах, поэтому фикс получает только 0.8 балла.
PL/SQL Debugger 1+0+0.5=1.5 из 3 возможных
• The error message “Unhandled exception occurred. Debugger will be terminated.” no longer appears after an Oracle exception error is raised.
Сообщение об ошибке про уничтожение дебаггера больше не появляется после срабатывания исключения ошибки базы.
Поскольку ошибка исключения не конкретизирована, то для теста попытаемся воспроизвести его на вышеупомянутом коде. Запустим отладку пакетной процедуры, предварительно добавив блок исключений (перекомпиляцию выполним без отладчика - просто Ctrl+F9) и не задав входного значения. Да, предыдущий билд сообщал о разрушении дебаггера, тем не менее не отключал его. Фикс выполнен и получает балл.
• Unexpected error messages no longer appear if a breakpoint is set to an illegal line.
Сообщение о неожиданной ошибке больше не появляется, если точка остановки поставлена на незаконной строке.
Какие строки считаются недопустимыми для точки останова? Например, декларативная часть или разбитое на несколько строк выражение присваивания. К сожалению, мне не удалось получить неожиданную ошибку в предыдущем билде, поэтому этот пункт RNs считаю припиской и не даю балл.
• Variables are now automatically applied to the script during its execution.
Переменные теперь автоматически применяются в скрипте во время его выполнения.
О каком скрипте речь? У меня на уме два места: скрипт самой отлаживаемой подпрограммы и скрипт для отладки, формируемый в окне "Stored Program Editor / Stored Program Execution" по кнопке "Generate PL/SQL for object execution" и автоматически на открытии этого окна. Скрипт самой подпрограммы визуально не изменяется, но значения локальных переменных стали отображаться в списке Watches. Также без каких-либо изменений отображается скрипт в окне "Stored Program Editor / Stored Program Execution". Поэтому фикс получает лишь 0.5 балла за введение юзера в заблуждение подобным описанием.
SQL Editor 0 из 1 возможного
• Fixed the work of the “Bytes per character” option when it is set to “Autodetect".
Исправлена работа опции "Байт на символ", когда она установлена в автоопределение.
Переключение опции "Байт на символ" доступно на странице "General / Session" настроек приложения Preferences. Почему этот пункт RNs в группе SQL Editor - для меня загадка, потому что применение опции разбросано по всему приложению, начиная от мастера таблиц, ячеек гридов и кончая всеми редакторами и окнами, отображающими данные UTF-базы. В тексте фикса не уточняется, как именно неверно определялась пропорция: не бралось в учёт какое-то значение базы из числа параметров инициализации, либо шрифт для отображения символов в SQL Output или ячейках грида неровно форматировался, а может и что иное. Поэтому попытаемся найти разницу в отображении UTF-символов только в SQL Output закладке окна SQL Editor. В качестве теста выполним запрос с различной шириной символов:
select 'м и ш - русский текст' as fld from dual
union
select 'Ш и М - текст русский' as fld from dual
union
select 'РусскийТекст - М и Ш' as fld from dual;
в грид и текстовый вывод при различных значениях опции на любой базе, вне зависимости от её версии и utf-инсталляции. Разницы между результатами в предыдущем и текущем билдах не обнаружено, поэтому пункт RNs не получает ни балла.
Object Navigator 1 из 1 возможного
• The error “Invalid SQL statement” no longer occurs on trying to expand the Editions node.
Ошибка неверного SQL выражения больше не случается при попытке развернуть ноду Editions.
В нескольких предыдущих билдах SD на базах, поддерживающих редакции объектов, действительно был выявлен этот баг. В текущем билде доступ к списку редакций осуществляется без проблем. Фикс получает балл.
Database Monitor 0.8 из 1 возможного
• Slow SQL statements for blocked and blocking sessions now run faster in Oracle Databases 11.2. The fix also affects the Session Navigator.
Показ блокированных и блокирующих сессий теперь осуществляется быстрее в базе версии 11.2. Фикс также осуществлён и в навигаторе сессий.
В мониторе базы два графика блокированных данных отображаются на закладке Activity. В навигаторе сессий для слежения за блокированными данными сформировано три грида на закладке Locks. Для тестов воспользуемся внутренней утилитой "DB Examiner / Top SQL" и сравним значения Optimizer Cost, CPU Time, Elapsed Time для запросов
SELECT SUM(Decode(B.BLOCKER, 'YES', 1, 0)) BLOCKING, SUM(Decode(S.BLOCKING_SESSION_STATUS, 'VALID', 1, 0)) BLOCKED FROM SYS.V_$SESSION S , ( SELECT DISTINCT SID BLOCKER_SID , 'YES' BLOCKER FROM V$LOCK WHERE BLOCK=1 AND 0=0 ) B WHERE 0=0 AND B.BLOCKER_SID(+) = S.SID;
/
SELECT SUM(DATA_BLOCKS_READ) DATA_BLOCKS_READ, SUM(DATA_BLOCKS_WRITE) DATA_BLOCKS_WRITE, SUM(TEMP_BLOCKS_READ) TEMP_BLOCKS_READ, SUM(TEMP_BLOCKS_WRITE) TEMP_BLOCKS_WRITE FROM ( SELECT /*+ NO_MERGE */ SUM(PHYBLKRD) DATA_BLOCKS_READ, SUM(PHYBLKWRT) DATA_BLOCKS_WRITE, 0 TEMP_BLOCKS_READ, 0 TEMP_BLOCKS_WRITE FROM SYS.V_$FILESTAT S WHERE 0=0 UNION ALL SELECT /*+ NO_MERGE */ 0, 0, SUM(PHYBLKRD) TEMP_BLOCKS_READ, SUM(PHYBLKWRT) TEMP_BLOCKS_WRITE FROM SYS.V_$TEMPSTAT S WHERE 0=0 );
/
в процессе работы DB Monitor. К сожалению, не получится увидеть фикс в Session Navigator, так как он не показывает никаких данных из-за вышеописанного бага. В рамках комплексного тестирования обнаружен баг в DB Examiner, который перестал дублировать полный и форматированный текст ячеек столбца "SQL Text". Но поскольку один из запросов в мониторе базы был оптимизирован до
SELECT SUM(DATA_BLOCKS_READ) DATA_BLOCKS_READ, SUM(DATA_BLOCKS_WRITE) DATA_BLOCKS_WRITE, SUM(TEMP_BLOCKS_READ) TEMP_BLOCKS_READ, SUM(TEMP_BLOCKS_WRITE) TEMP_BLOCKS_WRITE FROM ( SELECT /*+ NO_MERGE */ SUM(PHYBLKRD) DATA_BLOCKS_READ, SUM(PHYBLKWRT) DATA_BLOCKS_WRITE, 0 TEMP_BLOCKS_READ, 0 TEMP_BLOCKS_WRITE FROM SYS.V_$FILESTAT S WHERE 0=0 UNION ALL SELECT /*+ NO_MERGE */ 0, 0, SUM(PHYBLKRD) TEMP_BLOCKS_READ, SUM(PHYBLKWRT) TEMP_BLOCKS_WRITE FROM SYS.V_$TEMPSTAT S WHERE 0=0 );
то пользователи смогут заметить ускорение. А мы, как тестировщики, можем это подтвердить сравнив планы исполнения. Фикс получает 0.8 балла из-за наличия блокера в Session Navigator для полной проверки.
DDL for Scheduled Jobs 0+0=0 из 2 возможных, -0.4-0.1=-0.5 за проблемы
• Replaced single quotes with double quotes in the attribute statement event_condition => ‘TAB.USER_DATA.EVENT_TYPE = ‘‘JOB_OVER_MAX_DUR’‘’.
Заменены одинарные кавычки на двойные для атрибута выражения в сложносоставном условии события.
Для проверки фикса откроем мастер задач по расписанию и попробуем создать задание со сложным условием события. Для этого на странице Schedule выберем "Inline Schedule" и "Event". В блоке Event выберем любой имеющийся объект, например, очередь в схеме SYS. Теперь можем формировать сложное условие для события через мастер формул. И тут выясняется, что все символьные строки мастер формул обрамляет только в одинарные кавычки. А это значит, что фиксить стоило не последствия (формирование DDL), а причину (интерфейс продукта). Никак не получится отметить фикс. А за давнишний прокол в мастере формул ещё и сниму -0.4 балла.
• DDL now generates with a correct attribute value RAISE_EVENTS => JOB_OVER_MAX_DUR.
Скрипт на создание задачи по расписанию теперь генерится с корректным значением JOB_OVER_MAX_DUR атрибута RAISE_EVENTS.
Указанный атрибут бывает с подобным значением в базе версии ниже 11, которой нет в моём распоряжении. Поэтому и невозможно выяснить, что же конкретно тех.писательница считала некорректным в предыдущем билде. Но попутно выяснились интерфейсные проблемы мастера задания по расписанию.
Клик по троеточию позиционирует новое окно, не выровняв его по ресурсному элементу |
Installer/Updater 0 из 1 возможного
• Fixed the installation procedure on a 32-bit Windows OS.
Исправлена процедура инсталляции на 32-битную систему Windows.
К сожалению, тех.писательница не удосужилась уточнить причину проблемы, а инсталлятор и апдейтер не показали никакой разницы в стандартной функциональности. Поэтому пункт RNs не получает ни балла.
Profiler Wizard 0 из 1 возможного
• The settings to set/modify password parameters in the Profile Wizard are no longer missing.
Установка выставления и изменения параметров пароля в мастере профиля больше не пропускается.
Поскольку Профиль - объект не схемный, то подключиться к базе для тестирования надо с админскими правами. Визуально мастер профиля в предыдущем и текущем билдах не отличается, поэтому для выяснения того, ЧТО пропускалось, создадим как минимум два объекта - со значениями по-умолчанию и любыми другими. Перед созданием объекта просмотрим внимательно скрипт на создание объекта, а после его создания сгенерим DDL и их тоже сравним по билдам и исходникам. Поскольку никакой разницы ни в чём не обнаружено, то могу смело заявить, что в предыдущем билде ничто не пропускалось, а пункт RNs является припиской и не получает ни балла.
Scenes 0 из 1 возможного, -0.4 за баги
• An access violation error no longer occurs on trying to save the default scene after reconnecting a session.
Ошибка доступа больше не случается при попытке сохранить декорации по-умолчанию после переподключения сессии.
Часть навигатора объектов ContentSelector умеет сохранять и восстанавливать закреплённые закладки, что разработчиками SD названо "декорациями" этого окна. Набор закладок можно сохранить в декорацию по-умолчанию или в названную по-иному. Поскольку декорации схемо-зависимые, то для теста в предыдущем и текущем билдах подключимся поочерёдно к одной и той же сессии, закрепим одну-две закладки, выполним переподключение к базе и затем сохранение декорации. Если в предыдущем билде не получается воспроизвести ошибку доступа, то обнулим сохранённую декорацию (быстрый способ - удалить файлы "SD_ON_Scene*.*" из папки "%AppData%\Roaming\SQLDetective\Data\"; рабочие действия - включить только Default декорацию, в среднем окне проверить, что нет закреплённых закладок, иначе - открепить их). Примечание: оба билда для точности проверки нельзя запускать одновременно на одной машине, либо тесты проводите последовательно, либо на разных машинах, чтобы настройки приложения не наложились друг на друга. У меня никак не получилось воспроизвести ошибку доступа, проделывая в точности описанные шаги при различных значениях опций "Preferences / General / Object Navigator / Restore open scenes" и "Preferences / General / Object Navigator / Automatically save modified scene". Но в обоих билдах выявлен интерфейсный баг не ожидаемой работы чек-бокса: декорация по-умолчанию выключается при переподключении к базе "Session / Reconnect", включается при отключении от базы "Session / Disconnect" или при запуске приложения с подключением к базе. Изменённая декрация по-умолчанию всегда сохраняется вне зависимости от опции "Preferences / General / Object Navigator / Automatically save modified scene". Так что пункт RNs никак не может считаться сделанным и не получает балл, а за выявленные баги в работе опций снимаю -0.4 балла.
Preferences 0.8 из 1 возможного, -0.2 за баг
• Fixed local sorting of numeric columns when the “Display Numbers” option is set to “Numeric”.
Исправлена локальная сортировка числовых колонок, когда опция показа числовых значений выставлена в Numeric.
Опция показа числовых значений расположена на странице "Preferences / General" и распространяет своё действие в основном на гриды данных базы. О разнице локальной и серверной сортировки почитайте статьи "Preferences – Dataset Editors" и "Dataset Editors – Data sorting" хелпа приложения. Для тестов воспользуемся гридом Objects в навигаторе объектов, который доступен и всегда имеет необходимые для нас данные (числовые, символьные и другие поля) вне зависимости от версии базы. В предыдущем билде локальная сортировка числовых колонок при любом значении их отображения выполнялась как для символьных: сначала все, начинающиеся с 0, потом с 1 и так далее, вне зависимости от размерности чисел. В текущем билде локальная сортировка воспринимает числовые поля, как цифры со своей разрядностью, а не буквенно-числовые символы. Фикс сделан, но описан в RNs с запутыванием юзера (лишнее упоминание о настройке), поэтому получает только 0.8 балла. В процессе тестов проявился баг в порядке сортированых полей после смены серверной и локальной сортировок: открыть набор данных, отсортированный по одному полю серверно - одно поле первого порядка серверной сортировки; трижды кликнуть по несортированному полю для выставления/смены/снятия локальной сортировки - одно поле первого порядка локальной сортировки; выставить на этом же поле серверную сортировку - её порядок серверной сортировки не 2-го порядка, а неожиданно 3-го. То есть какие-то из кликов не обнулили флаг расчёта порядка серверной сортировки или локальная добавила лишний клик в соседский флаг. За баг сниму -0.2 балла.
Итого по билду: 0+4.9=4.9 баллов из 3+12=15 возможных дают 4.9/15=32% готовности и теряет -0.7-1.1=-1.8 балла.
Комментариев нет:
Отправить комментарий