Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вопрос по сорсам v.3 / 15 сообщений из 15, страница 1 из 1
15.09.2016, 17:44
    #39309832
U-gene
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сорсам v.3
Объясните пожалуйста по механизму обработку ошибок в 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
15.09.2016, 17:57
    #39309840
U-gene
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сорсам v.3
Добавлю.

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

Код: 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
15.09.2016, 17:58
    #39309841
U-gene
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сорсам v.3
Добавлю.

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

Код: 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
15.09.2016, 18:22
    #39309847
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сорсам v.3
isc_sqlerr это SQLCODE, он обычно (хоть и не всегда) передается при всех DSQL ошибках. Т.к. его объявили устаревшим, то можешь вообще забить и не использовать isc_sqlerr.
...
Рейтинг: 0 / 0
15.09.2016, 18:25
    #39309849
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сорсам v.3
U-geneпросто добавил строки в message2.sql
в system_errors2.sql тоже, надеюсь?
...
Рейтинг: 0 / 0
15.09.2016, 19:15
    #39309865
U-gene
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сорсам v.3
dimitr,

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

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

Но в систем_еррорс я нашел -901. Правильно я понимаю, что это какая то классификация сообщений по группам? Однако пока, что куда писать что бы добавить сообщение для своей ошибки, я не разобрал.
...
Рейтинг: 0 / 0
15.09.2016, 19:25
    #39309873
U-gene
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сорсам v.3
похоже он ищет в system_errors2 по комбинации -901 и текстового кода "dsql_unsupported_in_auto_trans", и находит пару кодов 13, 951, которой в message2 соответствует требуемое сообщение.
...
Рейтинг: 0 / 0
16.09.2016, 17:08
    #39310500
U-gene
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сорсам v.3
Правильно я понимаю, что если добавлять строки в system_errors2.sql, то также надо менять и facilities2.sql? Кажется, там последний столбец содержит общее число ошибок по каждому "блоку".
...
Рейтинг: 0 / 0
16.09.2016, 17:10
    #39310502
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сорсам v.3
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
16.09.2016, 17:16
    #39310509
U-gene
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сорсам v.3
Dimitry Sibiryakov,

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

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

https://lists.sourceforge.net/lists/listinfo/firebird-devel
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16.09.2016, 19:11
    #39310571
U-gene
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сорсам v.3
Логики не понимаю....а может оно и не нужно?
Например в 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
16.09.2016, 19:53
    #39310599
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сорсам v.3
U-gene,

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


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