|
Парсинг sql скрипта в редакторе скриптов
|
|||
---|---|---|---|
#18+
Судя по всему, SET TERM используется при парсинге аналогично BEGIN/END и если в начале создания процедуры или триггера прописан, к примеру, "SET TERM ^;", а после забыт "SET TERM ;^", то объект не попадает в дерево объектов, отображенного в левой панели окна редактора скриптов. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2016, 09:33 |
|
Парсинг sql скрипта в редакторе скриптов
|
|||
---|---|---|---|
#18+
rdb_devСудя по всему, SET TERM используется при парсинге аналогично BEGIN/END и если в начале создания процедуры или триггера прописан, к примеру, "SET TERM ^;", а после забыт "SET TERM ;^", то объект не попадает в дерево объектов, отображенного в левой панели окна редактора скриптов. Какой именно объект не попадает? Первая процедура/триггер после "SET TERM ^;" в дерево попадет. А остальные - извините... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2016, 16:48 |
|
Парсинг sql скрипта в редакторе скриптов
|
|||
---|---|---|---|
#18+
IBExpert, не попадает именно первая процедура после "SET TERM ^;", если отсутствует "SET TERM ;^", а вторая, как раз, попадает, если корректно обрамлена "SET TERM". ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2016, 10:00 |
|
Парсинг sql скрипта в редакторе скриптов
|
|||
---|---|---|---|
#18+
Без конкретного примера можно еще долго языками чесать... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2016, 14:17 |
|
Парсинг sql скрипта в редакторе скриптов
|
|||
---|---|---|---|
#18+
IBExpert, попытался воспроизвести - не получилось. Всё вышло так как ты написал. Извини, был неправ. Удивило, что парсер ориентируется не по ключевым выражениям создания объектов БД, таких как "CREATE TABLE", "CREATE PROCEDURE" или "CREATE TRIGGER", а по "SET TERM", смысл которого изменить маркер конца оператора для утилиты исполнения скрипта, чтобы можно было использовать ";" внутри тела триггера или процедуры. Естественно, что ни "CREATE PROCEDURE", ни "CREATE TRIGGER" или т.п. не может встречаться в теле процедуры (ни до, ни даже после последнего END процедуры). ИМХО, для отлова создания объектов, парсер вполне мог бы не замечать "SET TERM" и ориентироваться только на ключевые выражения создания объектов, если они не экранированы комментарием или одинарными кавычками. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2016, 15:14 |
|
Парсинг sql скрипта в редакторе скриптов
|
|||
---|---|---|---|
#18+
IBExpert, А тут все таки есть кое-какие мутки. Набираем в редакторе скриптов вот такой скрипт: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
В дерево попадает триггер и процедура. Таблицы нет. Убираем ";" после таблицы - пропадает еще и процедура. Таблица не попадает. Отсюда предположение о SET TERM - идет лесом, но проявляется, что работают еще какие-то правила и работают как-то хитро. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2016, 15:36 |
|
Парсинг sql скрипта в редакторе скриптов
|
|||
---|---|---|---|
#18+
Блиииин... Где триггеры, процедуры и иже с ними заканчиваются - определяется по закрывающему тело END'у. Все, что после него, просто скипается до терминатора . Который - внезапно! - переопределяется командой SET TERM. Нет ножек терминатора - нет мультика для парсера никаких объектов после END'а. Не надо ждать, что он будет корректно разбирать кривые скрипты. Такая задача перед ним не стоит и время на это тратиться не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2016, 16:26 |
|
Парсинг sql скрипта в редакторе скриптов
|
|||
---|---|---|---|
#18+
rdb_devИМХО, для отлова создания объектов, парсер вполне мог бы не замечать "SET TERM" и ориентироваться только на ключевые выражения создания объектов, если они не экранированы комментарием или одинарными кавычками. Парсер - сюрприз! - может и без SET TERM разобраться. Но если ты использовал SET TERM в скрипте - он чё, телепатически должен догадаться, что это чисто для прикола было и можно на это забить? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2016, 16:32 |
|
Парсинг sql скрипта в редакторе скриптов
|
|||
---|---|---|---|
#18+
IBExpert, Во-о-от! P.S. Это в основном для ТСа было... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2016, 16:33 |
|
Парсинг sql скрипта в редакторе скриптов
|
|||
---|---|---|---|
#18+
IBExpertПарсер - сюрприз! - может и без SET TERM разобраться. Но если ты использовал SET TERM в скрипте - он чё, телепатически должен догадаться, что это чисто для прикола было и можно на это забить? Воу-воу!... Зачем так нервничать? Я ни в коем случае не наезжаю, ни к чему не принуждаю, очень ценю твой титанический труд и считаю твой инструмент лучшим из того, что есть как в свободном доступе, так и среди коммерческих продуктов. Мне, всего лишь, показалось странным некоторое поведение анализатора скрипта и, конечно, хотелось, чтобы твой анализатор скриптов был более гибок и сообщал пользователю о пропущенных ключевых элементах языка (таких как "SET TERM", "END" или ";"), как это делает, к примеру анализатор кода C++ в NetBeans, отмечая красными и желтыми черточками на поле панели прокрутки место, где допущена ошибка, пропуск ключевого элемента или сомнительное использование. IBExpertНе надо ждать, что он будет корректно разбирать кривые скрипты. Такая задача перед ним не стоит и время на это тратиться не будет. Ну, как говорится, на "нет" и суда нет. Дареному коню в зубы не смотрят. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2016, 09:26 |
|
Парсинг sql скрипта в редакторе скриптов
|
|||
---|---|---|---|
#18+
rdb_devо пропущенных ключевых элементах языка (таких как "SET TERM" да что ты. SET TERM сам знаешь для чего нужен. Потому что парсер "скриптов" определяет конец оператора как ;. Что там до этого пропущено, любому парсеру абсолютно пофиг. По идее, "парсер" ибэксперта должен тупо скармливать серверу поступающие команды, и ругаться точно так же, как сервер. Другое дело, что есть такая хреновина, как ИБЕСкрипт, но, как мне кажется, это мало меняет ситуацию. Если скрипт кривой, то рано или поздно парсер ИБЕ или ФБ выматерится. А вот как оно там должно было быть, ни тот ни другой парсер вряд-ли сможет предположить. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2016, 23:22 |
|
Парсинг sql скрипта в редакторе скриптов
|
|||
---|---|---|---|
#18+
rdb_dev, кроме того, SET TERM это ни разу не "элемент языка", это команда ISQL. Кроме ISQL об этой команде знают только те, кто хочет. Например, сам ФБ про эту "команду" знать не знает. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2016, 23:23 |
|
Парсинг sql скрипта в редакторе скриптов
|
|||
---|---|---|---|
#18+
rdb_dev, и наконец (че-то многословен я на ночь) - никаких "скриптов" ни у Firebird ни у InterBase нет, и не было. Оне выполняют команды DML и DDL только поштучно. Все "скриптовые" прибамбасы - исключительно внешние. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2016, 23:26 |
|
Парсинг sql скрипта в редакторе скриптов
|
|||
---|---|---|---|
#18+
kdvкроме того, SET TERM это ни разу не "элемент языка", это команда ISQL. Кроме ISQL об этой команде знают только те, кто хочет. Например, сам ФБ про эту "команду" знать не знает. Именно так я и написал: rdb_dev... а по "SET TERM", смысл которого изменить маркер конца оператора для утилиты исполнения скрипта, чтобы можно было использовать ";" внутри тела триггера или процедуры. Для анализатора скрипта совершенно не принципиально, чем является "SET TERM" - элементом языка (DDL/DML) или же директивой исполнителю скриптов. Это имеет значение только при выполнении скрипта. kdvЕсли скрипт кривой, то рано или поздно парсер ИБЕ или ФБ выматерится. А вот как оно там должно было быть, ни тот ни другой парсер вряд-ли сможет предположить. Это понятно... Но хотелось бы видеть очевидные ошибки заранее, чтобы при выполнении полумегабайтного скрипта не искать потом место сбоя и перезапускать выполнение, выделяя оставшийся кусок в несколько тысяч строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 09:28 |
|
|
start [/forum/topic.php?fid=42&fpage=23&tid=1599280]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 154ms |
0 / 0 |