переход к определению

Обсуждение возникших проблем, предложений и ошибок dbForge for Oracle
Закрыто
Nag
Сообщения: 60
Зарегистрирован: Чт 29 сен 2011 10:26

переход к определению

Сообщение Nag » Вт 11 дек 2012 05:43

Допустим, имеем некую VIEW с именем MY_VIEW. Если в SQL-редакторе написать просто и нажать "Перейти к определению" (F12), то получим сообщение
Невозможно перейти к определению. Не найден источник навигации.
Но если написать

Код: Выделить всё

select * from my_view
поставить курсор на имя MY_VIEW и нажать F12, то чудесным образом откроется редактор вьюхи.

Внимание, вопрос! (с) Почему нельзя просто взять "слово" под курсором и поискать его среди имен объектов, вместо того, чтобы маниакально "по контексту" пытаться понять, что под курсором сейчас "находится" именно какой-то объект БД? Насколько я понимаю, такой вот анализ "контекста" зачастую является источником крайне раздражающей ошибки о "невозможности перейти к определению".

И еще один "наболевший" момент. Убедительная просьба реализовать возможность "выноса" на toolbar кнопок создания новых объектов схемы: пакет, функция, вьюха, таблица и т.д. Дабы не "рыться" постоянно в дереве объектов в поисках узла нужного типа для создания нового объекта этого типа.

Alexander

Re: переход к определению

Сообщение Alexander » Вт 11 дек 2012 18:45

Почему нельзя просто взять "слово" под курсором и поискать его среди имен объектов, вместо того, чтобы маниакально "по контексту" пытаться понять, что под курсором сейчас "находится" именно какой-то объект БД? Насколько я понимаю, такой вот анализ "контекста" зачастую является источником крайне раздражающей ошибки о "невозможности перейти к определению".
dbForge Studio for Oracle из контекста определяет предполагаемый тип объектов и поиск производится только среди предполагаемых типов объекта.
И еще один "наболевший" момент. Убедительная просьба реализовать возможность "выноса" на toolbar кнопок создания новых объектов схемы: пакет, функция, вьюха, таблица и т.д. Дабы не "рыться" постоянно в дереве объектов в поисках узла нужного типа для создания нового объекта этого типа.
На панели инструментов 'Стандартные' уже имеется кнопка 'Новый объект базы данных'. Если Вы всё же имели в виду другую функциональность, то Вы можете добавить Ваше предложение на английском языке на нашем UserVoice форуме.

Nag
Сообщения: 60
Зарегистрирован: Чт 29 сен 2011 10:26

Re: переход к определению

Сообщение Nag » Ср 12 дек 2012 06:44

Вопрос с новым объектом снимается. Я искал в "Сервис|Настройка...", вкладка "Команды". В категории "Стандартные" есть, конечно, команда "Объект базы данных...", но слово "новый" там напрочь отсутствует, посему я без всякой задней мысли его пропустил.
dbForge Studio for Oracle из контекста определяет предполагаемый тип объектов и поиск производится только среди предполагаемых типов объекта.
Я бы на Вашем месте так категорично не заявлял, что он "определяет". Надо быть скромнее: "пытается определить". Вот пара примеров его неудачных "попыток" (NB: примеры бессмысленны до абсурда и призваны просто продемонстрировать недоработки).
Пример №1

Код: Выделить всё

begin
    if 1 in (my_func('1'), my_func('2')) then
        null;
    end if;
end;
Попытка перехода к определению в первом вызове MY_FUNC не увенчалась успехом. Но, как это ни парадоксально, переход к определению во втором вызове MY_FUNC происходит.
Пример №2

Код: Выделить всё

begin
    -- блок 1
    for v_cur in (
        select
            v.id,
            v2.val as val_2,
            (
                select
                    v3.val
                from
                    my_view v3
                where
                    v3.id = v.id
            ) as val_3
        from
            my_view v
            left join my_view v2 on v2.id = v.id
    )
    loop
        null;
    end loop;

    -- блок 2
    for v_cur in (
        with my_cte as (
            select
                v.id,
                v2.val as val_2,
                (
                    select
                        v3.val
                    from
                        my_view v3
                    where
                        v3.id = v.id
                ) as val_3
            from
                my_view v
                left join my_view v2 on v2.id = v.id
        )
        select
            mc.val_2,
            mc.val_3,
            v4.val as val_4
        from
            my_cte mc
            left join my_view v4 on v4.id = mc.id
    )
    loop
        null;
    end loop;
end;
В части кода, помеченном комментарием "блок 1", все переходы к определению вьюхи MY_VIEW осуществляются. Но если слегка видоизменить запрос под курсором (см. код под комментом "блок 2"), то уже НИ В ОДНОМ из четырех использований вьюхи MY_VIEW переход не выполняется. Хотя "контекст" остался тем же: SELECT ... FROM ..., LEFT JOIN ... ON ...
И это просто пара несложных примеров, когда ваш якобы "нужный и полезный" анализ "контекста" вызова "спотыкается" на ровном месте. И именно поэтому я призываю разработчиков dbForge избавиться от идеи "параноидального парсера" и просто пытаться найти среди объектов базы слово под курсором, как это сделали разработчики того же IBExpert, TOAD и прочих сред, избавив и пользователей от лишнего геморроя, и в первую очередь себя от "изобретения велосипеда".

Alexander

Re: переход к определению

Сообщение Alexander » Ср 12 дек 2012 15:54

Мы пересмотрим реализацию данной функциональности при разработке следующих версий продукта, учитывая присланные Вами примеры.

Закрыто