powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / SQLite [игнор отключен] [закрыт для гостей] / информативный CONSTRAINT
6 сообщений из 6, страница 1 из 1
информативный CONSTRAINT
    #36274359
905
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при добавлении записи и нарушении ограничения выдается не информативное "constraint failed Unable to fetch row
", хотелось бы получать имя ограничения, например "constraint my_constr_name failed Unable to fetch row"
возможно ли это?
...
Рейтинг: 0 / 0
информативный CONSTRAINT
    #36274833
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
В багтрекере эскулайта неинформативность сообщения о нарушении CONSTRAINT уже как баг отмечена, так что со временем поправят.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
информативный CONSTRAINT
    #37039151
Oleg Zhovtanyuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напишу здесь же, чтоб новую тему не открывать...

Есть сходная проблема с самописными констрейнтами (эмуляция внешних ключей через триггеры): не получается в текст сообщения об ошибке воткнуть ID проблемной записи.

Например:

есть констрейнт
Код: plaintext
1.
CONSTRAINT UserGroups_userID_fkey FOREIGN KEY (userID) REFERENCES Users(id) ON UPDATE CASCADE ON DELETE NO ACTION

и есть эмулирующие его триггеры (сделанные genfkey'ем)
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE TRIGGER genfkey9_insert_referencing BEFORE INSERT ON "UserGroups" WHEN 
    new."userID" IS NOT NULL AND NOT EXISTS (SELECT  1  FROM "Users" WHERE new."userID" == "id")
BEGIN
  SELECT RAISE(ABORT, 'constraint failed');
END;
...

Если сообщение об ошибке заменить на
Код: plaintext
'insert violates constraint "UserGroups_userID_fkey": key is not present in table "Users"

то все ОК. Но вот добавить значение ID не получается - SQLite ругается

Код: plaintext
'insert violates constraint "UserGroups_userID_fkey": key [userID = ' || new."userID" || '] is not present in table "Users"

RAISE в принципе не жрет выражения, или я его готовить не умею?
...
Рейтинг: 0 / 0
информативный CONSTRAINT
    #37039367
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg ZhovtanyukRAISE в принципе не жрет выражения, или я его готовить не умею?
Можно увидить:
1) copy&paste оригинального кода RAISE с добавлением ID ?
2) текст ошибки ?
...
Рейтинг: 0 / 0
информативный CONSTRAINT
    #37039551
Oleg Zhovtanyuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry ArefievOleg ZhovtanyukRAISE в принципе не жрет выражения, или я его готовить не умею?
Можно увидить:
1) copy&paste оригинального кода RAISE с добавлением ID ?
2) текст ошибки ?

Конечно.

Код: plaintext
1.
2.
3.
4.
5.
CREATE TRIGGER genfkey9_insert_referencing BEFORE INSERT ON "UserGroups" WHEN 
    new."userID" IS NOT NULL AND NOT EXISTS (SELECT  1  FROM "Users" WHERE new."userID" == "id")
BEGIN
  SELECT RAISE(ABORT, 'insert violates constraint "genfkey9_insert_referencing": key [userID =' || new."userID" || '] is not present in table "Users"');
END;

Код: plaintext
Error: near "||": syntax error

А если убрать конкатенацию,

Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE TRIGGER genfkey9_insert_referencing BEFORE INSERT ON "UserGroups" WHEN 
    new."userID" IS NOT NULL AND NOT EXISTS (SELECT  1  FROM "Users" WHERE new."userID" == "id")
BEGIN
  SELECT RAISE(ABORT, new.userID);
END;


то

Код: plaintext
Error: near ".": syntax error

Наконец, если оставить только имя поля (RAISE(ABORT, userID)), то RAISE, что с кавычками, что без, трактует его как строковую константу, и триггер создается... но при вставке мы получим

Код: plaintext
Error: userID

Sic. Нужно-то знать, какой именно ID...
...
Рейтинг: 0 / 0
информативный CONSTRAINT
    #37039878
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда ... Похоже что вторым аргументом RAISE может быть только строковая константа.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / информативный CONSTRAINT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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