2012-03-05 2 views
2

Enviroment: Какао на Mac OS X Snow LeopardSQLite выражение предел максимальной глубины

Я достиг максимума (по умолчанию) глубина для SQLite запроса:

Expression tree is too large (maximum depth 1000) 

SQLite documentation сказать, чтобы установить SQLITE_MAX_EXPR_DEPTH при компиляции, но КАК? Я использую рамки по умолчанию sqlite3, импортированные с:

#import <sqlite3.h> 

примечания: я считаю, что максимальная глубина выражения может быть снижена (не увеличивается) во время выполнения с:

sqlite3_limit(db,SQLITE_LIMIT_EXPR_DEPTH,size) 

это правильно?

+0

любая удача с этим? – QED

ответ

2

Вы правы в отношении всех своих утверждений (это настройка времени компиляции, она может быть опущена, не поднятая во время выполнения). Ваши варианты ограничивают ваш запрос или связывают пользовательскую сборку SQLite с вашим производственным приложением.

Хорошая вещь о SQLite заключается в том, что ее довольно просто построить. Читайте о custom builds. Кроме того, проект SQLite XCode от Apple для OS X 10.6.8 составляет here. Независимо от того, используете ли вы проект Apple или делаете самостоятельно, легко создать общую библиотеку для статической ссылки в ваш исполняемый файл для отправки с вашим проектом. Вам придется беспокоиться о совместимости при выпуске кода, но это цена, которую вы платите за сложные запросы.

Вы также можете задать вопрос об упрощении вашего сложного запроса в другом вопросе.

+1

BINGO! Спасибо! автоответ для потомков: Для решения этой проблемы я использую sqlite3 [amalgamation] [1] (ZIP-архив содержит весь исходный код C для SQLite 3.7.10, объединенный в один исходный файл), шаг: 1. скачать конец импорта sqlite.h и .c в вашем проекте 2. Снимите рамочным SQLite 3. Найдите SQLITE_MAX_EXPR_DEPTH 1000 в sqlite.c и заменить SQLITE_MAX_EXPR_DEPTH 0 пользоваться;) [1]: HTTP: // WWW. sqlite.org/sqlite-amalgamation-3071000.zip – Kappe

3

Более простое решение (хотя и далеко не идеальное).

У меня была такая же ошибка, и мне пришлось использовать реализацию SQLite по умолчанию SQLite (запрос к базе данных аудио системы).

Проблема возникла, поскольку я удалил некоторые «бесполезные» круглые скобки, поэтому я их отложил, не более ошибок.

Сбои:

id = 387 OR id = 388 OR id = 390 OR id = 391 [...] OR id = 392 

не откажет:

(id = 387 OR id = 388 [...] OR id = 390) OR (id = 391 [...] OR id = 392) OR (... 

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

Смежные вопросы