Имя: Пароль:
1C
1C 7.7
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;