SQLite AND и OR - возможно, есть бага или фича?, операторы AND и OR дают ошибку |
Здравствуйте, гость ( Вход | Регистрация )
SQLite AND и OR - возможно, есть бага или фича?, операторы AND и OR дают ошибку |
Iron Bug |
10.8.2010, 9:09
Сообщение
#1
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
Раз уж вспомнила сегодня про SQLite, то напишу про одну багу, на которую я наткнулась:
Есть довольно большая база (60 метров), в ней, в частности, таблица LOG такого вида:
У меня была задача выбрать довольно сложную выборку из таблицы:
При работе запрос выдавал все правильные записи, плюс несколько (порядка 7) совершенно пустых строк (все поля - NULL). Это повторялось и при вызове из моей проги, и при вызове запроса из утилитки SQLite2009Pro. Вылечилось заменой всех AND и OR в запросе на & и | соответственно. В простых запросах AND и OR работают нормально. При большой базе и длинных запросах начинаются такие глюки. Копать особо было некогда, но теперь на всякий случай я не использую AND и OR в запросах. Сообщение отредактировал Litkevich Yuriy - 10.8.2010, 13:50 |
|
|
legat |
10.8.2010, 17:28
Сообщение
#2
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 8.8.2010 Пользователь №: 1940 Спасибо сказали: 0 раз(а) Репутация: 0 |
Цитата
В простых запросах AND и OR работают нормально. При большой базе и длинных запросах начинаются такие глюки. Возможно стоит заключать всегда в скобки все условные выражения, т.е. для данного случая получится:
Просто про Sql даже в некоторых книгах пишут, что не всегда правильно расставляются приоритеты логических операций, поэтому как выход: скобки. А операторы & и | не всеми СУБД поддерживаются. |
|
|
Iron Bug |
10.8.2010, 18:43
Сообщение
#3
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
скобки не помогали. если бы всё было так просто... я это первым делом пробовала, естессна.
SQLite поддерживает и་ AND и &. а вот в чём разница - я хз. но она есть. ибо факт, что на одной и той же базе при смене только обозначений либо работает, либо глючит. пустые записи - это вообще какой-то нездоровый глюк. ибо В БАЗЕ ИХ НЕТ. откуда они берутся - я даже не могу предположить. я ещё поковыряю этот вопрос, когда время появится. и если что - напишу разработчикам SQLite. кстати, там ещё была бага, но я тогда её связывала с проблемами транзакций, хотя может это и не оно... в общем, когда у меня база дорастала примерно до 300 метров - при попытке добавления записи возвращалась ошибка, что база "занята". может, это не размер, а количество записей вредило или ещё что. в итоге я просто стала её делить вручную, по 100 метров, и проблема исчезла. но это тоже надо исследовать. Сообщение отредактировал Iron Bug - 10.8.2010, 18:47 |
|
|
Текстовая версия | Сейчас: 27.12.2024, 2:58 |