|
v7: 1sqlite и SQLITE_ENABLE_UPDATE_DELETE_LIMIT
| ☑ |
0
alyuev
06.04.23
✎
18:11
|
Djelf, подскажи пожалуйста. Ты компилил 1sqlite без опции SQLITE_ENABLE_UPDATE_DELETE_LIMIT? Просто понадобилось удалять как
DELETE FROM table
WHERE search_condition
ORDER BY criteria
LIMIT row_count OFFSET offset;
Но сейчас так не дает. Полагаю, что без опции скомпилировано.
|
|
1
alyuev
06.04.23
✎
18:13
|
Я, конечно, выкрутился:
DELETE FROM Stack WHERE rowid IN (SELECT rowid FROM Stack WHERE Пользователь='"+ИмяПользователя()+"'
|ORDER BY ДатаВремяTimeStamp DESC
| LIMIT 1)
|
|
2
alyuev
06.04.23
✎
18:16
|
А вот так, кстати, не получилось
WITH MyCTE AS (
| SELECT *
| FROM Stack
| WHERE Пользователь='"+ИмяПользователя()+"'
| ORDER BY ДатаВремяTimeStamp DESC
| LIMIT 1)
|DELETE FROM MyCTE
Ругается на отсутствие таблицы MyCTE
|
|
3
Djelf
06.04.23
✎
18:55
|
(0) Нет, я так не делал, в том смысле что SQLITE_ENABLE_UPDATE_DELETE_LIMIT не выключал (зачем бы мне это понадобилось?).
(2) Предполагаю (почти уверен в этом, но проверять лень), что удалить из виртуальной CTE таблицы ничего нельзя, нужна реальная таблица.
P.S. sqlite из-за ультра компактности кода, жертвует комментариями ошибок (их описание может быть больше чем само ядро sqlite).
P.P.S. можно проверить в какой-то консоли для PostgeSQL, sqlite пытается соответствовать именно этому диалекту sql. ошибка видимо должна быть описана подробнее.
|
|
4
alyuev
06.04.23
✎
19:03
|
(3) Т.е. если ты компилил с включенной опцией
-
SQLITE_ENABLE_UPDATE_DELETE_LIMIT
This option enables an optional ORDER BY and LIMIT clause on UPDATE and DELETE statements.
-
то по идее должен был отработать запрос в (0), но оно не работает.
|
|
5
Djelf
06.04.23
✎
20:54
|
Опции компиляции ты и сам можешь посмотреть:
PRAGMA compile_options;
|
|