Russian Qt Forum

Qt => Базы данных => Тема начата: Termit от Ноябрь 12, 2015, 19:39



Название: Рекурсивный запрос
Отправлено: Termit от Ноябрь 12, 2015, 19:39
Выбираю данные из базы. Имею валидный запрос (выполняется в любом менеджере БД) который не нравится Qt.
Код
SQL
        WITH RECURSIVE group_tree(id_group,id_owner_group) AS (
           VALUES(51000,NULL)
           UNION ALL
           SELECT group_goods.id_group, group_goods.id_owner_group FROM [front.group_goods] AS group_goods
           , group_tree WHERE group_tree.id_group=group_goods.id_owner_group)
        SELECT id_group FROM group_tree
 

Это sqlite3 - https://www.sqlite.org/lang_with.html

Получаю ошибку "near "WITH": syntax error Unable to execute statement"

Подозреваю, что QSqlQuery проверяет какой ему там запрос передали и интерпретирует его как сам захочет...

Вопрос: Как заставить Qt выполнять такие запросы? Это вообще реально?


Название: Re: Рекурсивный запрос
Отправлено: Termit от Ноябрь 12, 2015, 19:51
Немного обманул.
консоль sqlite3 пишет ошибку синтаксиса. буду смотреть что ей не так.


Название: Re: Рекурсивный запрос
Отправлено: Termit от Ноябрь 12, 2015, 19:59
Возможность работы с такими запросами добавили в sqlite 3.8.3
Проверял через движок 3.8.11
Qt похоже использует тот который в системе 3.8.2
Попробую обновить в системе и надеюсь вопрос закрою.


Название: Re: Рекурсивный запрос
Отправлено: vbv от Ноябрь 12, 2015, 23:59
Блин. Ну как же приятно поговорить с умным человеком. :)

Вообще QSqlQuery ничего и никогда с запросом не делает он его, тупо, передает серверу в неизменном виде. Читать QSql вдумчиво.

PS: sqllite и рекурсивный запрос - не перебор ли... Хотя, народ не без героев.


Название: Re: Рекурсивный запрос
Отправлено: Termit от Ноябрь 13, 2015, 01:18
Блин. Ну как же приятно поговорить с умным человеком. :)
Та да, погорячился :)

Вообще QSqlQuery ничего и никогда с запросом не делает он его, тупо, передает серверу в неизменном виде. Читать QSql вдумчиво.
Читал и вдумчиво :). Хотел уже читать исходники, а не документацию Qt т.к. в приложении не работает, а рядом в браузере работает тот же самый запрос. Пока не понял, что проблема в движке (libqt4-sql-sqlite).

PS: sqllite и рекурсивный запрос - не перебор ли... Хотя, народ не без героев.
Мне больше нравится Postgres. Но скажу, что sqlite вполне себе база и если она предоставляет какие-то функции, так чего бы и не использовать?
На больших записях не игрался, но дерево из 6К+ элементов строит и отбирает детей за 6 мс и меня вполне такое устраивает.