powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Парсинг sql скрипта в редакторе скриптов
14 сообщений из 14, страница 1 из 1
Парсинг sql скрипта в редакторе скриптов
    #39248663
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по всему, SET TERM используется при парсинге аналогично BEGIN/END и если в начале создания процедуры или триггера прописан, к примеру, "SET TERM ^;", а после забыт "SET TERM ;^", то объект не попадает в дерево объектов, отображенного в левой панели окна редактора скриптов.
...
Рейтинг: 0 / 0
Парсинг sql скрипта в редакторе скриптов
    #39250281
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devСудя по всему, SET TERM используется при парсинге аналогично BEGIN/END и если в начале создания процедуры или триггера прописан, к примеру, "SET TERM ^;", а после забыт "SET TERM ;^", то объект не попадает в дерево объектов, отображенного в левой панели окна редактора скриптов.

Какой именно объект не попадает? Первая процедура/триггер после "SET TERM ^;" в дерево попадет. А остальные - извините...
...
Рейтинг: 0 / 0
Парсинг sql скрипта в редакторе скриптов
    #39251039
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert, не попадает именно первая процедура после "SET TERM ^;", если отсутствует "SET TERM ;^", а вторая, как раз, попадает, если корректно обрамлена "SET TERM".
...
Рейтинг: 0 / 0
Парсинг sql скрипта в редакторе скриптов
    #39251229
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без конкретного примера можно еще долго языками чесать...
...
Рейтинг: 0 / 0
Парсинг sql скрипта в редакторе скриптов
    #39251292
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert, попытался воспроизвести - не получилось. Всё вышло так как ты написал. Извини, был неправ.

Удивило, что парсер ориентируется не по ключевым выражениям создания объектов БД, таких как "CREATE TABLE", "CREATE PROCEDURE" или "CREATE TRIGGER", а по "SET TERM", смысл которого изменить маркер конца оператора для утилиты исполнения скрипта, чтобы можно было использовать ";" внутри тела триггера или процедуры. Естественно, что ни "CREATE PROCEDURE", ни "CREATE TRIGGER" или т.п. не может встречаться в теле процедуры (ни до, ни даже после последнего END процедуры). ИМХО, для отлова создания объектов, парсер вполне мог бы не замечать "SET TERM" и ориентироваться только на ключевые выражения создания объектов, если они не экранированы комментарием или одинарными кавычками.
...
Рейтинг: 0 / 0
Парсинг sql скрипта в редакторе скриптов
    #39251312
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

А тут все таки есть кое-какие мутки.

Набираем в редакторе скриптов вот такой скрипт:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create trigger T1
as
begin
end

create table T2
(
  a integer
);

create procedure p1
as
begin

end



В дерево попадает триггер и процедура. Таблицы нет. Убираем ";" после таблицы - пропадает еще и процедура. Таблица не попадает. Отсюда предположение о SET TERM - идет лесом, но проявляется, что работают еще какие-то правила и работают как-то хитро.
...
Рейтинг: 0 / 0
Парсинг sql скрипта в редакторе скриптов
    #39251365
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блиииин... Где триггеры, процедуры и иже с ними заканчиваются - определяется по закрывающему тело END'у.
Все, что после него, просто скипается до терминатора . Который - внезапно! - переопределяется командой SET TERM.
Нет ножек терминатора - нет мультика для парсера никаких объектов после END'а. Не надо ждать, что он будет корректно разбирать кривые скрипты. Такая задача перед ним не стоит и время на это тратиться не будет.
...
Рейтинг: 0 / 0
Парсинг sql скрипта в редакторе скриптов
    #39251370
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devИМХО, для отлова создания объектов, парсер вполне мог бы не замечать "SET TERM" и ориентироваться только на ключевые выражения создания объектов, если они не экранированы комментарием или одинарными кавычками.

Парсер - сюрприз! - может и без SET TERM разобраться. Но если ты использовал SET TERM в скрипте - он чё, телепатически должен догадаться, что это чисто для прикола было и можно на это забить?
...
Рейтинг: 0 / 0
Парсинг sql скрипта в редакторе скриптов
    #39251372
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

Во-о-от!

P.S. Это в основном для ТСа было...
...
Рейтинг: 0 / 0
Парсинг sql скрипта в редакторе скриптов
    #39251656
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertПарсер - сюрприз! - может и без SET TERM разобраться. Но если ты использовал SET TERM в скрипте - он чё, телепатически должен догадаться, что это чисто для прикола было и можно на это забить?
Воу-воу!... Зачем так нервничать? Я ни в коем случае не наезжаю, ни к чему не принуждаю, очень ценю твой титанический труд и считаю твой инструмент лучшим из того, что есть как в свободном доступе, так и среди коммерческих продуктов. Мне, всего лишь, показалось странным некоторое поведение анализатора скрипта и, конечно, хотелось, чтобы твой анализатор скриптов был более гибок и сообщал пользователю о пропущенных ключевых элементах языка (таких как "SET TERM", "END" или ";"), как это делает, к примеру анализатор кода C++ в NetBeans, отмечая красными и желтыми черточками на поле панели прокрутки место, где допущена ошибка, пропуск ключевого элемента или сомнительное использование.

IBExpertНе надо ждать, что он будет корректно разбирать кривые скрипты. Такая задача перед ним не стоит и время на это тратиться не будет.
Ну, как говорится, на "нет" и суда нет. Дареному коню в зубы не смотрят.
...
Рейтинг: 0 / 0
Парсинг sql скрипта в редакторе скриптов
    #39252385
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devо пропущенных ключевых элементах языка (таких как "SET TERM"
да что ты. SET TERM сам знаешь для чего нужен. Потому что парсер "скриптов" определяет конец оператора как ;.
Что там до этого пропущено, любому парсеру абсолютно пофиг. По идее, "парсер" ибэксперта должен тупо скармливать серверу поступающие команды, и ругаться точно так же, как сервер. Другое дело, что есть такая хреновина, как ИБЕСкрипт, но, как мне кажется, это мало меняет ситуацию.

Если скрипт кривой, то рано или поздно парсер ИБЕ или ФБ выматерится. А вот как оно там должно было быть, ни тот ни другой парсер вряд-ли сможет предположить.
...
Рейтинг: 0 / 0
Парсинг sql скрипта в редакторе скриптов
    #39252386
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

кроме того, SET TERM это ни разу не "элемент языка", это команда ISQL. Кроме ISQL об этой команде знают только те, кто хочет. Например, сам ФБ про эту "команду" знать не знает.
...
Рейтинг: 0 / 0
Парсинг sql скрипта в редакторе скриптов
    #39252387
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

и наконец (че-то многословен я на ночь) - никаких "скриптов" ни у Firebird ни у InterBase нет, и не было. Оне выполняют команды DML и DDL только поштучно. Все "скриптовые" прибамбасы - исключительно внешние.
...
Рейтинг: 0 / 0
Парсинг sql скрипта в редакторе скриптов
    #39252492
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvкроме того, SET TERM это ни разу не "элемент языка", это команда ISQL. Кроме ISQL об этой команде знают только те, кто хочет. Например, сам ФБ про эту "команду" знать не знает.
Именно так я и написал:
rdb_dev... а по "SET TERM", смысл которого изменить маркер конца оператора для утилиты исполнения скрипта, чтобы можно было использовать ";" внутри тела триггера или процедуры.
Для анализатора скрипта совершенно не принципиально, чем является "SET TERM" - элементом языка (DDL/DML) или же директивой исполнителю скриптов. Это имеет значение только при выполнении скрипта.

kdvЕсли скрипт кривой, то рано или поздно парсер ИБЕ или ФБ выматерится. А вот как оно там должно было быть, ни тот ни другой парсер вряд-ли сможет предположить.
Это понятно... Но хотелось бы видеть очевидные ошибки заранее, чтобы при выполнении полумегабайтного скрипта не искать потом место сбоя и перезапускать выполнение, выделяя оставшийся кусок в несколько тысяч строк.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Парсинг sql скрипта в редакторе скриптов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]