entity icon indicating copy to clipboard operation
entity copied to clipboard

Падает сохранение объекта со вложенными таблицами, при использовании автоинкремента (SQLite)

Open dvakor opened this issue 6 years ago • 11 comments

При использовании автоинкремента в идентификаторах и ПодчиненнаяТаблица, сохранение "главной" сущности выкидывает исключение Внешнее исключение (Microsoft.Data.Sqlite.SqliteException): SQLite Error 19: 'FOREIGN KEY constraint failed'.

Пример кода:

//Файл Источник.os
&ПодчиненнаяТаблица(Тип = "Массив", ТипЭлемента = "ОписаниеПараметра")
Перем Параметры Экспорт;
МенеджерСущностей.ДобавитьКлассВМодель(Тип("ОписаниеПараметра"));
МенеджерСущностей.ДобавитьКлассВМодель(Тип("ОписаниеИсточника"));
МенеджерСущностей.Инициализировать();

Параметр = Параметры.Создать();
Параметр.Имя = "Тест";
Параметр.Значение = "фывыфв";
Параметр.Сохранить();

Источник = Источники.Создать();
Источник.Наименование = "Тест";
Источник.Тип = "Файл";
Источник.Параметры.Добавить(Параметр);
Источник.Сохранить();

dvakor avatar Oct 04 '19 12:10 dvakor

Можно взглянуть на объявление класса "ОписаниеПараметра"?

nixel2007 avatar Oct 04 '19 12:10 nixel2007

Можно взглянуть на объявление класса "ОписаниеПараметра"?

&Идентификатор
&ГенерируемоеЗначение
&Колонка(Тип = "Целое")
Перем Идентификатор Экспорт;

&Колонка(Тип = "Строка")
Перем Имя Экспорт;

&Колонка(Тип = "Строка")
Перем Значение Экспорт;

dvakor avatar Oct 04 '19 12:10 dvakor

develop-ветка? можешь включить вывод лога oscript.lib.entity.connector.sqlite в DEBUG?

nixel2007 avatar Oct 04 '19 12:10 nixel2007

https://pastebin.com/VGERrfvk

ветка и девелоп и @otymko которая с ПГ

dvakor avatar Oct 04 '19 12:10 dvakor

Еще трабл с удалением. Я кстати заметил, что не удаляется записи в таблице связей, в моей примере это ОписаниеИсточника_Параметры, сделал так

Сущность.Параметры.Очистить(); Сущность.Записать(); Сущность.Удалить();

так работает кароч) Вопрос тогда в том баг или фича это?

dvakor avatar Oct 04 '19 13:10 dvakor

Включи еще лог oscript.lib.entity.manager, пожалуйста.

nixel2007 avatar Oct 04 '19 13:10 nixel2007

https://pastebin.com/27uVSimT чет он мало логирует совсем :(

dvakor avatar Oct 04 '19 13:10 dvakor

Такое же исключение возникает и при использовании ссылок при записи "главной" сущности, недавно мы обсуждали это в телеграмме https://t.me/oscript_library/61236. Увидел похожий ишуз не стал заводить новый. Пока решил вопрос так:

Исправил функцию: https://github.com/nixel2007/entity/blob/9172c8f270361fa1cb1b74bc010ff0de8b8d5d7c/src/internal/%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D0%B5%D0%BC%D1%8B%D0%B5%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B/%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D0%BE%D1%80%D0%9A%D0%BE%D0%BD%D0%BD%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%B0SQLiteWeb.os#L17

на:

Функция ИДПоследнейДобавленнойЗаписи(Соединение, Запрос) Экспорт
    Запрос = НовыйЗапрос(Соединение);
    Запрос.Текст = "SELECT last_insert_rowid();";
    Результат = Запрос.Выполнить().Выгрузить();
    Возврат Результат[0].Получить(0);
КонецФункции

geolone avatar Jun 22 '22 03:06 geolone

Вообще это выглядит как вполне валидный фикс изначально невалидной обработки результата запроса... Правильно понимаю, что этот фикс чинит обе проблемы?

nixel2007 avatar Jun 22 '22 10:06 nixel2007

Я кроме окружения oscript.web не пробовал.

geolone avatar Jun 22 '22 10:06 geolone

А этот коннектор как раз специализирован для ос.веба

nixel2007 avatar Jun 22 '22 11:06 nixel2007