powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопрос по сорсам v.3
15 сообщений из 15, страница 1 из 1
Вопрос по сорсам v.3
    #39309832
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объясните пожалуйста по механизму обработку ошибок в DML командах.
Например, когда мне потребовалось ввести новые ошибки для обработки DDL команд, я просто добавил строки в message2.sql, но там связь по кодам очевидная, а здесь - нет.

Надо, что бы в какой то MyNewDMLstmt::dsqlPass, при проверках, если они не прошли, выводилось сообщение об ошибке. Понятно, что надо написать что то типа

Код: plaintext
1.
ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-804) <<  Arg::Gds(isc_dsql_var_count_err));



Но что значит "-804", "isc_dsql_var_count_err" и где эти коды прописывать? Подскажите, куда смотреть.
...
Рейтинг: 0 / 0
Вопрос по сорсам v.3
    #39309840
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавлю.

Например, в коде есть такой вызов

Код: plaintext
1.
2.
ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-901) <<
				  Arg::Gds(isc_dsql_unsupported_in_auto_trans) << Arg::Str("[color=red]SUSPEND[/color]"));



И что-то мне подсказывает, что он имеет отношение к следующей строке в messages2.sql

Код: plaintext
1.
2.
3.
('dsql_unsupported_in_auto_trans', 'PASS1_statement',
 'pass1.cpp', NULL, 13, 951, NULL, 
'@1 is not supported inside IN AUTONOMOUS TRANSACTION block', NULL, NULL);

подозреваю, что вместо @1 здесь пропишется SUSPEND.
но что значит -901?
вдруг мне вместо isc_error что то свое нужно? как это определить? где это прописывать?
...
Рейтинг: 0 / 0
Вопрос по сорсам v.3
    #39309841
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавлю.

Например, в коде есть такой вызов

Код: plaintext
1.
2.
ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-901) <<
				  Arg::Gds(isc_dsql_unsupported_in_auto_trans) << Arg::Str("SUSPEND["));



И что-то мне подсказывает, что он имеет отношение к следующей строке в messages2.sql

Код: plaintext
1.
2.
3.
('dsql_unsupported_in_auto_trans', 'PASS1_statement',
 'pass1.cpp', NULL, 13, 951, NULL, 
'@1 is not supported inside IN AUTONOMOUS TRANSACTION block', NULL, NULL);

подозреваю, что вместо @1 здесь пропишется SUSPEND.
но что значит -901?
вдруг мне вместо isc_error что то свое нужно? как это определить? где это прописывать?
...
Рейтинг: 0 / 0
Вопрос по сорсам v.3
    #39309847
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
isc_sqlerr это SQLCODE, он обычно (хоть и не всегда) передается при всех DSQL ошибках. Т.к. его объявили устаревшим, то можешь вообще забить и не использовать isc_sqlerr.
...
Рейтинг: 0 / 0
Вопрос по сорсам v.3
    #39309849
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
U-geneпросто добавил строки в message2.sql
в system_errors2.sql тоже, надеюсь?
...
Рейтинг: 0 / 0
Вопрос по сорсам v.3
    #39309865
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr,

Нет, не добавлял.
Но по добавленным только в message2 строкам ошибки успешно отрабатываются, по крайне мере через isql.
Может потому , что добавил туда строки путем копирования аналогичных строк для существующих сообщения из того же модуля и заменой на новые только некоторых полей ("номер кода", "имя модуля","текст сообщения").

Опять же, навскидку между ними нет связи 1:1 (в одном ~3400 строк, в другом 1200)

Но в систем_еррорс я нашел -901. Правильно я понимаю, что это какая то классификация сообщений по группам? Однако пока, что куда писать что бы добавить сообщение для своей ошибки, я не разобрал.
...
Рейтинг: 0 / 0
Вопрос по сорсам v.3
    #39309873
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
похоже он ищет в system_errors2 по комбинации -901 и текстового кода "dsql_unsupported_in_auto_trans", и находит пару кодов 13, 951, которой в message2 соответствует требуемое сообщение.
...
Рейтинг: 0 / 0
Вопрос по сорсам v.3
    #39310500
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно я понимаю, что если добавлять строки в system_errors2.sql, то также надо менять и facilities2.sql? Кажется, там последний столбец содержит общее число ошибок по каждому "блоку".
...
Рейтинг: 0 / 0
Вопрос по сорсам v.3
    #39310502
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr1) Choose the facility for your error
2) Bump next error number in facilities.sql for your facility
3) Add a record into /system_errors.sql at the tail (for your facility)
4) Add a record into messages.sql at the tail (for your facility)
5) Rebuild

then optionally:

6) Use the new error code
7) Rebuild
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по сорсам v.3
    #39310509
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Спасибо!!!!!!!!!
...
Рейтинг: 0 / 0
Вопрос по сорсам v.3
    #39310512
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще есть sql_stqtes2.sql . Там перечислены коды, которые используются в system_error2.sql . Ка понять, какой код чему соответствует?

Еще орг.вопрос - вот эта классная подсказка от dimitr, у таких есть какое то централизованное хранилище?
...
Рейтинг: 0 / 0
Вопрос по сорсам v.3
    #39310515
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
U-geneу таких есть какое то централизованное хранилище?

https://lists.sourceforge.net/lists/listinfo/firebird-devel
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по сорсам v.3
    #39310571
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Логики не понимаю....а может оно и не нужно?
Например в StoreNode::internal Dsql Pass генерится ошибка

Код: plaintext
1.
2.
ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-804) << 
       Arg::Gds(isc_dsql_var_count_err));


По идее, раз она из DSQL, то ее fac_code должен равняться 7, но на самом деле ее fac_code 0(jrd).

Или здесь есть какое то другое объяснение?
Можно ли на эти тонкости ваще забить?
...
Рейтинг: 0 / 0
Вопрос по сорсам v.3
    #39310599
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
U-gene,

DSQL уже давно интегрирован в ядро, поэтому можно смело использовать нулевой фасилити
...
Рейтинг: 0 / 0
Вопрос по сорсам v.3
    #39469117
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему при обработки "CREATE PROCEDURE ..." prepareStatement(...), вместе с парсом, вызывается два раза? Первый в DSQLprepare фазе, второй в DSQL_execute_immediate? Какой в этом смысл? Команда выполняется через isql, v3.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопрос по сорсам v.3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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