SASGIS - SAS.Планета |
View Issue Details |
|
ID | Project | Category | View Status | Date Submitted | Last Update |
0002857 | SAS.Планета | [All Projects] Баг | public | 15-10-2015 15:54 | 03-03-2017 09:11 |
|
Reporter | sheavy | |
Assigned To | zed | |
Priority | normal | Severity | minor | Reproducibility | always |
Status | resolved | Resolution | fixed | |
Platform | Windows | OS | 7 | OS Version | Professional |
Product Version | 151010 | |
Target Version | 151111 | Fixed in Version | 151111 | |
|
Summary | 0002857: Редактирование базы данны меток двумя пользователями |
Description | - Добавление меток: Возникает ошибка если один пользователь добавил метку после того как другой пользователь добавил другую метку.
Текст ошибки: EMarkSystemORMError: MarkSystemORM: ID id empty!
- Редактирование меток: если метка была удалена другим пользователем, после сохранения изменений, метка пропадает без объяснения причин. Кажется, есть смысл перед сохранением проверить, есть ли она еще в базе и если нет, сообщить об этом.
- Удаление меток: проходит без ошибок. |
Steps To Reproduce | Ошибка воспроизводится при работе Microsoft SQL через ODBC.
Версия 151410.9122 Nigtly |
Additional Information | Пользуясь случаем, хотел поблагодарить за инцидент 0002854: Работа с Microsoft SQL через ODBC |
Tags | БД, метки, многопользоватеская |
Relationships | related to | 0002859 | confirmed | | Редактирование метки, удаленной другим пользователем | related to | 0003186 | confirmed | | Ошибка при многопользовательской работе с базой меток в базе MySql |
|
Attached Files | |
|
Issue History |
Date Modified | Username | Field | Change |
15-10-2015 15:54 | sheavy | New Issue | |
15-10-2015 15:55 | sheavy | Tag Attached: метки | |
15-10-2015 15:55 | sheavy | Tag Attached: многопользоватеская | |
15-10-2015 15:56 | sheavy | Tag Attached: БД | |
15-10-2015 19:23 | zed | Note Added: 0016569 | |
15-10-2015 19:26 | zed | Status | new => confirmed |
15-10-2015 19:33 | zed | Note Added: 0016570 | |
16-10-2015 14:46 | sheavy | Note Added: 0016573 | |
16-10-2015 14:48 | zed | Note Added: 0016574 | |
16-10-2015 15:21 | vdemidov | Note Added: 0016575 | |
16-10-2015 15:30 | zed | Note Added: 0016576 | |
16-10-2015 15:33 | vdemidov | Note Added: 0016577 | |
16-10-2015 15:57 | sheavy | Note Added: 0016578 | |
16-10-2015 16:32 | vdemidov | Relationship added | related to 0002859 |
20-10-2015 18:51 | zed | Note Added: 0016602 | |
20-10-2015 18:52 | zed | Status | confirmed => resolved |
20-10-2015 18:52 | zed | Fixed in Version | => 151111 |
20-10-2015 18:52 | zed | Resolution | open => fixed |
20-10-2015 18:52 | zed | Assigned To | => zed |
20-10-2015 18:52 | zed | Product Version | .Nightly => 151010 |
20-10-2015 18:52 | zed | Target Version | => 151111 |
20-10-2015 18:52 | zed | Note Edited: 0016602 | bug_revision_view_page.php?bugnote_id=16602#r6751 |
03-03-2017 09:11 | vdemidov | Relationship added | related to 0003186 |
Notes |
|
(0016569)
|
zed
|
15-10-2015 19:23
|
|
О, а это грабли из-за дефолтной оптимизации в mORMot:
> by default, any INSERT will compute the new ID from an internal variable
> - it is very fast and reliable, unless external IDs can be created
> outside this engine
> - you can set EngineAddUseSelectMaxID=true to execute a slower
> 'select max(ID) from TableName' SQL statement before each EngineAdd()
> - a lighter alternative may be to call EngineAddForceSelectMaxID only when required
И при попытке выставить EngineAddUseSelectMaxID в True, как сказано в доках, вылазит ещё какая-то ошибка, опять же, внутри mORMot: "TODBCStatement - TODBCLib error: [24000] [Microsoft][ODBC Driver 11 for SQL Server]Недопустимое состояние курсора (0)". Интересно, что 2 метки даёт поставить, а вот на третьей падает. Надо идти на форум synopse и выяснять что не так... |
|
|
(0016570)
|
zed
|
15-10-2015 19:33
|
|
Показательно, что в тоже самое время, в случае с MySQL всё работает просто замечательно. |
|
|
(0016573)
|
sheavy
|
16-10-2015 14:46
|
|
Да, и правда, в MySQL гораздо лучше.
Но оказывается даже для него второй пункт актуален:
> - Редактирование меток: если метка была удалена другим пользователем, после сохранения изменений, метка пропадает без объяснения причин. Кажется, есть смысл перед сохранением проверить, есть ли она еще в базе и если нет, сообщить об этом. |
|
|
(0016574)
|
zed
|
16-10-2015 14:48
|
|
>второй пункт актуален:
Это другая проблема и её надо решать отдельно. |
|
|
|
Имхо, самый простой способ решать проблемы конфликтов редактирования (а удаление, это тоже частный случай редактирования) это добавить в метку что-то типа версии (например хэш данных, или счетчик из базы данных, или вообще GUID), которое будет автоматически изменяться при каждом сохранении, и перед сохранением проверять не поменялась ли эта версия. И если поменялась (удаление метки сбрасывает версию в 0), то нужно как минимум сообщать об этом пользователю, а как максимум пытаться автоматически мержить изменения (у нас есть предыдущая версия, есть то что в базе сейчас, и есть то что на редактировали). Но это все потребует кучу изменений в самом САС. |
|
|
(0016576)
|
zed
|
16-10-2015 15:30
|
|
Я когда занимался проектированием схемы БД спрашивал - а не добавить ли ещё чего-нибудь. Предложений тогда я так и не услышал. Хотел даже в метки таймштампы писать, но vasketsov меня от этого отговорил. Поэтому, сейчас способа разрешить конфликт редактирования невозможно. Будет сохраняться последнее изменение без всяких вопросов. По поводу удаления редактируемой метки - надо будет посмотреть. |
|
|
|
А я, когда говорил что ничего не нужно, подразумевал исключительно однопользовательский режим работы с метками. Поддержку других СУБД ты прикрутил позже. А вообще никто не заставляет использовать одну схему базы для локальной базы и для работы с сервером. |
|
|
(0016578)
|
sheavy
|
16-10-2015 15:57
|
|
>>второй пункт актуален:
> Это другая проблема и её надо решать отдельно.
сделал отдельный тикет 0002859 (нет прав сделать связь) |
|
|
(0016602)
|
zed
|
20-10-2015 18:51
(edited on: 20-10-2015 18:52) |
|
Выяснил что не так: synopse.info/forum/viewtopic.php?pid=18248 - оказывается, помогает отключение встроенного кэширования стейтментов, так что отключил и падать перестало. Возможно это баг фреймворка, так что если его пофиксят, то кэширование можно будет включить назад. И возможно это актуально только для MS SQL, но для надёжности отключил для всех СУБД.
|
|