Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Выполняется недописанный запрос / 9 сообщений из 9, страница 1 из 1
05.11.2015, 12:40
    #39095170
PPA
PPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполняется недописанный запрос
Привет.

Случайно заметил ошибку в тексте sql который sqlite кушал без исключения.

Код: sql
1.
select * from table where id



в таблице поле id есть, но условие к нему дописать забыли.
почему это работает и какое условие в этом случае применяется?

В oracle ругается
SQL> select * from tttt where id;
select * from tttt where id
ORA-00920: неверен реляционный оператор

--
~PPA() {} //
...
Рейтинг: 0 / 0
05.11.2015, 16:36
    #39095631
pit_alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполняется недописанный запрос
PPA,

Код: sql
1.
select * from table where id



аналог

Код: sql
1.
select * from table where id is not null and id <> 0 
...
Рейтинг: 0 / 0
05.11.2015, 18:39
    #39095802
PPA
PPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполняется недописанный запрос
pit_alex,

Версия похоже на правду - а это документировано или просто подобрано методом тыка?

sqlite> CREATE TABLE t(id int);
sqlite> select count(*) from t;
0
sqlite> insert into t(id) values (0);
sqlite> insert into t(id) values (1);
sqlite> select * from t;
0
1
sqlite> select * from t where id;
1
sqlite> insert into t(id) values ('xxxx');
sqlite> select * from t where id;
1
sqlite> insert into t(id) values (2);
sqlite> insert into t(id) values (3);
sqlite> select * from t where id;
1
2
3
sqlite> select * from t;
0
1
xxxx
2
3
sqlite>
...
Рейтинг: 0 / 0
06.11.2015, 09:29
    #39096171
PPA
PPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполняется недописанный запрос
pit_alex,

Спасибо. сходится.
sqlite тут зачем-то неявно кастит к bool
проверил в mysql - он тоже такой sql выполняет - разработчики засыпали грабли листвой :)

В доке пишут, что типа bool в sqlite нет вообще

1.1 Boolean Datatype
SQLite does not have a separate Boolean storage class. Instead, Boolean values are stored as integers 0 (false) and 1 (true).
...
Рейтинг: 0 / 0
06.11.2015, 10:48
    #39096272
pit_alex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполняется недописанный запрос
PPA,

Определял методом тыка, а вообще SQLite достаточно странный зверек, иногда на такое натыкаешься ... :)
...
Рейтинг: 0 / 0
06.11.2015, 18:36
    #39096910
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполняется недописанный запрос
PPAВ доке пишут, что типа bool в sqlite нет вообще

1.1 Boolean Datatype
SQLite does not have a separate Boolean storage class. Instead, Boolean values are stored as integers 0 (false) and 1 (true).Все верно. Точно так-же как в Си. Оттуда же скорее всего и данный прикол синтаксиса растет.
Но в Си это часть спецификации, а тут - недокументированная фича. Так что использовать не рекомендуется.
...
Рейтинг: 0 / 0
06.11.2015, 18:47
    #39096926
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполняется недописанный запрос
White OwlВсе верно. Точно так-же как в Си. Оттуда же скорее всего и данный прикол синтаксиса растет.
Но в Си это часть спецификации, а тут - недокументированная фича. Так что использовать не рекомендуется.Нет, вру. К Си это отношения не имеет, хотя и очень похоже.
Сейчас копаюсь в parse.y - там всего одна секция "Expression Processing" и нету жесткого разделения на "выражение часть выражений" и "выражение часть списка". В общем, это артефакт от попытки упростить CFG.
...
Рейтинг: 0 / 0
06.11.2015, 18:55
    #39096931
PPA
PPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполняется недописанный запрос
White Owl,

За такие неявные и очень опасные приведения из С и придумали 30 лет назад С++

Автор sqlite на этот запрос ответил так:
"Why is the fact that SQLite can handle boolean expressions that
befuddle Oracle a problem?"

Сам я считаю, что Oracle в этом случае помогает избежать ошибки.
может программист хотел написать условие, отвлекся и забыл это сделать
а запрос работает! в sql ведь нет диагностики типа warning из С/C++

У себя я это вообще случайно заметил
из-за того что это поле было ID - оно работало верно
...
Рейтинг: 0 / 0
06.11.2015, 19:18
    #39096945
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполняется недописанный запрос
PPAWhite Owl,

За такие неявные и очень опасные приведения из С и придумали 30 лет назад С++Вовсе не за это. И вот как раз синтаксис типа if(variable) прекрасно портирован в С++.

PPAАвтор sqlite на этот запрос ответил так:
"Why is the fact that SQLite can handle boolean expressions that
befuddle Oracle a problem?"Ну правильно в общем-то.
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Выполняется недописанный запрос / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]