Почему имена не могут быть ключевыми словами?
От: Kolesiki  
Дата: 22.05.16 12:46
Оценка: :)
Собсно, сабж. Что мешает SQL'ю выполнять запросы вида
SELECT From FROM User WHERE ...


В MS SQL что user, что from — ключевые слова и он постоянно ругается "ошибка синтаксиса". Он что, неспособен распарсить элементарное выражение? Или (второй вариант) грамматика самого SQL настолько кривая, что ключевые слова в месте имён могут его сбить с толку?
PS
Про квадратные скобки в курсе, но я не хочу превращать запросы в придурковатый заборчик с именами. Хочу человеческий синтаксис (как он и задумывался при проектировании SQL).
Re: Почему имена не могут быть ключевыми словами?
От: Qulac Россия  
Дата: 22.05.16 13:26
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Собсно, сабж. Что мешает SQL'ю выполнять запросы вида

K>
K>SELECT From FROM User WHERE ...
K>


K>В MS SQL что user, что from — ключевые слова и он постоянно ругается "ошибка синтаксиса". Он что, неспособен распарсить элементарное выражение?

Если в одном запросе может быть очевидно где ключевое слово, а где имя, не значит, что так же будет в других запросах.

K> Или (второй вариант) грамматика самого SQL настолько кривая, что ключевые слова в месте имён могут его сбить с толку?

Напишите свою. Вообще наверное можно ослабить это требование в языке, но только зачем? Ради различных извращений?

K>PS

K>Про квадратные скобки в курсе, но я не хочу превращать запросы в придурковатый заборчик с именами. Хочу человеческий синтаксис (как он и задумывался при проектировании SQL).
Да, sql и задумывался как человеческий язык для манипулирования данными. Были также попытки создания "человеческих" языков программирования, но все они умирали либо становились инструментом только для специалистов. Такова реальность.
Программа – это мысли спрессованные в код
Отредактировано 22.05.2016 13:34 Qulac . Предыдущая версия .
Re: Почему имена не могут быть ключевыми словами?
От: Softwarer http://softwarer.ru
Дата: 22.05.16 14:17
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Собсно, сабж. Что мешает SQL'ю выполнять запросы вида


Наличие мозгов у его авторов.

K> Он что, неспособен распарсить элементарное выражение?


Напишите тот, который способен. Дело-то несложное.

K> Хочу человеческий синтаксис

K> Хочу SELECT From FROM User

Выберите уж что-нибудь одно.
Re: Почему имена не могут быть ключевыми словами?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 22.05.16 14:24
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Собсно, сабж. Что мешает SQL'ю выполнять запросы вида

K>
K>SELECT From FROM User WHERE ...
K>


K>В MS SQL что user, что from — ключевые слова и он постоянно ругается "ошибка синтаксиса". Он что, неспособен распарсить элементарное выражение? Или (второй вариант) грамматика самого SQL настолько кривая, что ключевые слова в месте имён могут его сбить с толку?

K>PS
K>Про квадратные скобки в курсе, но я не хочу превращать запросы в придурковатый заборчик с именами. Хочу человеческий синтаксис (как он и задумывался при проектировании SQL).

Варианты синтаксиса, когда ключевые слова явно выделены, а идентификаторы — нет, активно пробовались ещё в середине 60-х, получалось что-то вроде

  'if' x > y 'then'
    max := x
  'else'
    max := y
  'end' 'if'


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

Только в C# (из мейнстримных) ввели универсальный суффикс "это не ключевое слово" в виде символа @, хотя я бы взял что-то за пределами ascii — например, ¤.
И, наоборот, отдельный набор слов, которые работают как ключевые только со спец-префиксом, можно §.
The God is real, unless declared integer.
Re: Почему имена не могут быть ключевыми словами?
От: Milena США  
Дата: 22.05.16 18:26
Оценка: +1 -1
Здравствуйте, Kolesiki, Вы писали:

K>Собсно, сабж. Что мешает SQL'ю выполнять запросы вида

K>
K>SELECT From FROM User WHERE ...
K>


K>В MS SQL что user, что from — ключевые слова и он постоянно ругается "ошибка синтаксиса". Он что, неспособен распарсить элементарное выражение?

Пока не способен. Если вам легко написать такого рода парсер, обратитесь в Майрософт с предложением, может примут и внедрят в следующей версии.

Или (второй вариант) грамматика самого SQL настолько кривая, что ключевые слова в месте имён могут его сбить с толку?
Грамматика вполне нормальная. А вот поля c именами типа User и From трудно назвать нормальными, так они не несут никакого смысла. Обычно поля называеются UserId или UserNamе, а что такое просто User? Поэтому и не особо стоит тратить силы на написание парсера для полей, которые большиство толковых архитекторов никогда использовать не станут.

K>PS

K>Про квадратные скобки в курсе, но я не хочу превращать запросы в придурковатый заборчик с именами.
А вам программирование вообще как? Двойные кавычки вокруг строк, escape-последовательности? Не очень утомляет? А то может пойти куда-нить в маркетинг, где всегда человеческий язык используют?
Re: Почему имена не могут быть ключевыми словами?
От: _ABC_  
Дата: 22.05.16 19:05
Оценка: +6
Здравствуйте, Kolesiki, Вы писали:

K>Или (второй вариант) грамматика самого SQL настолько кривая, что ключевые слова в месте имён могут его сбить с толку?

Покажите мне здесь, где место имен, где ключевое слово:
select name, surname, from from, user

Если Вы считаете, что грамматика кривая, то предложите улучшенную грамматику "с человеческим синтаксисом, как он и
задумывался при проектировании" с описанием, как его парсить. И с учетом этой грамматики напишите вышеизложенное.
Re[2]: Почему имена не могут быть ключевыми словами?
От: Kolesiki  
Дата: 22.05.16 23:27
Оценка:
Здравствуйте, Qulac, Вы писали:

K>>В MS SQL что user, что from — ключевые слова и он постоянно ругается "ошибка синтаксиса". Он что, неспособен распарсить элементарное выражение?

Q>Если в одном запросе может быть очевидно где ключевое слово, а где имя, не значит, что так же будет в других запросах.

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

K>> Или (второй вариант) грамматика самого SQL настолько кривая, что ключевые слова в месте имён могут его сбить с толку?

Q>Напишите свою. Вообще наверное можно ослабить это требование в языке, но только зачем? Ради различных извращений?

О, да! Захотел назвать таблицу пользователей User — каков грязный ублюдок! (50 оттенков программиста)

В общем, пока по существу — ничего.
Re[2]: Почему имена не могут быть ключевыми словами?
От: Kolesiki  
Дата: 22.05.16 23:30
Оценка:
Здравствуйте, netch80, Вы писали:

N>Варианты синтаксиса, когда ключевые слова явно выделены, а идентификаторы — нет, активно пробовались ещё в середине 60-х


Вы не о том. В век подсветки синтаксиса прямо в редакторе, нет вообще никакой предпосылки помечать ключевые слова ещё и символами! Достаточно иметь однозначную грамматику.
Re[2]: Почему имена не могут быть ключевыми словами?
От: Kolesiki  
Дата: 22.05.16 23:35
Оценка: +1 -1
Здравствуйте, Milena, Вы писали:

M>Здравствуйте, Kolesiki, Вы писали:


K>>Собсно, сабж. Что мешает SQL'ю выполнять запросы вида

K>>
K>>SELECT From FROM User WHERE ...
K>>


K>>В MS SQL что user, что from — ключевые слова и он постоянно ругается "ошибка синтаксиса". Он что, неспособен распарсить элементарное выражение?

M>Пока не способен. Если вам легко написать такого рода парсер, обратитесь в Майрософт с предложением, может примут и внедрят в следующей версии.

Я спрашиваю не чем мне заняться, а принципиальный вопрос синтаксиса. Вы вообще понимаете тему? Вопрос про то, можно ли в SQL обойтись БЕЗ запрета ключевых слов как имён.

M>Грамматика вполне нормальная. А вот поля c именами типа User и From трудно назвать нормальными, так они не несут никакого смысла.


Ну да, особенно User — вообще бессмыслица какая-то, да? Подумаешь, что в 99% БД это необходимая сущность!

M> Обычно поля называеются UserId


Будем учить кого и как называть? Я вообще-то и таблицу могу назвать User — именно она и фигурирует в оригинальном сообщении. Вот только использовать я её могу только через квадратные скобки.

M>А вам программирование вообще как?


Ясно. Русский быдлятник, бессмысленный и беспощадный.
Re[2]: Почему имена не могут быть ключевыми словами?
От: Kolesiki  
Дата: 22.05.16 23:39
Оценка: :)
Здравствуйте, _ABC_, Вы писали:

_AB>Здравствуйте, Kolesiki, Вы писали:


K>>Или (второй вариант) грамматика самого SQL настолько кривая, что ключевые слова в месте имён могут его сбить с толку?

_AB>Покажите мне здесь, где место имен, где ключевое слово:
_AB>
_AB>select name, surname, from from, user 
_AB>


Очевидно же, что запрос кривой! Начало вот такое: "SELECT name, surname, from FROM" а дальше ошибочная запятая.

_AB>Если Вы считаете, что грамматика кривая, то предложите...


Опять, я не спрашиваю вас чем мне заниматься. Я спрашиваю, знаете ли вы из своей поверхностной практики запросы, которые могут привести к неоднозначности, если будет использовано ключевое слово как имя. Что, у нас и русские вопросы теперь с трудом парсятся??
Re[3]: Почему имена не могут быть ключевыми словами?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 23.05.16 03:54
Оценка:
Здравствуйте, Kolesiki, Вы писали:

N>>Варианты синтаксиса, когда ключевые слова явно выделены, а идентификаторы — нет, активно пробовались ещё в середине 60-х


K>Вы не о том. В век подсветки синтаксиса прямо в редакторе, нет вообще никакой предпосылки помечать ключевые слова ещё и символами! Достаточно иметь однозначную грамматику.


Предложите эту однозначную грамматику. Пока что, насколько я знаю, все попытки, включая от спецов мирового масштаба, провалились. Может, у вас будет оригинальный подход?
The God is real, unless declared integer.
Re[3]: Почему имена не могут быть ключевыми словами?
От: _ABC_  
Дата: 23.05.16 04:12
Оценка: +3
Здравствуйте, Kolesiki, Вы писали:

_AB>>Покажите мне здесь, где место имен, где ключевое слово:

_AB>>
_AB>>select name, surname, from from, user 
_AB>>


K>Очевидно же, что запрос кривой! Начало вот такое: "SELECT name, surname, from FROM" а дальше ошибочная запятая.

Без учета ключевых слов в качестве имен колонок, запрос абсолютно корректный.

select is_visible, is_published from sys.objects, sys.assemblies


K>Я спрашиваю, знаете ли вы из своей поверхностной практики запросы

Есть мнение, что кто-то не зная SQL, обвиняет других в поверхностной практике...
Re[3]: Почему имена не могут быть ключевыми словами?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 23.05.16 04:19
Оценка:
Здравствуйте, Kolesiki, Вы писали:

_AB>>Покажите мне здесь, где место имен, где ключевое слово:

_AB>>select name, surname, from from, user

K>Очевидно же, что запрос кривой! Начало вот такое: "SELECT name, surname, from FROM" а дальше ошибочная запятая.


Очевидно же, что вы ошибаетесь. Второе from это назначение алиаса для колонки результата.
The God is real, unless declared integer.
Re[4]: Почему имена не могут быть ключевыми словами?
От: _ABC_  
Дата: 23.05.16 04:38
Оценка:
Здравствуйте, netch80, Вы писали:

N>Очевидно же, что вы ошибаетесь.

Человек не знает о возможности использовать запятые в джойнах.
Re[3]: Почему имена не могут быть ключевыми словами?
От: _ABC_  
Дата: 23.05.16 05:40
Оценка: 14 (2) +1 :)
Здравствуйте, Kolesiki, Вы писали:

K>Что, у нас и русские вопросы теперь с трудом парсятся??

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

Вот это "человеческий синтаксис, который изначально задумывался"? Как будем парсить? Я имею в виду,
алгоритм конкретный.
select from from from where where where is null order by union select from from group by
Re[3]: Почему имена не могут быть ключевыми словами?
От: Qulac Россия  
Дата: 23.05.16 08:44
Оценка: +4 :))) :))
Здравствуйте, Kolesiki, Вы писали:

K>Здравствуйте, netch80, Вы писали:


N>>Варианты синтаксиса, когда ключевые слова явно выделены, а идентификаторы — нет, активно пробовались ещё в середине 60-х


K>Вы не о том. В век подсветки синтаксиса прямо в редакторе, нет вообще никакой предпосылки помечать ключевые слова ещё и символами! Достаточно иметь однозначную грамматику.


Да точно! Нужно было в грамматику добавить два вида символов: цветные(нужный цвет) для ключевых слов, бесцветные — для всего остального и было бы прекрасно. Только потом на rsdn кто ни будь бы спрашивал: Почему я не могу обозвать таблицу именем из "цветных" символов?
Программа – это мысли спрессованные в код
Re: Почему имена не могут быть ключевыми словами?
От: alpha21264 СССР  
Дата: 23.05.16 11:56
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Про квадратные скобки в курсе, но я не хочу превращать запросы в придурковатый заборчик с именами. Хочу человеческий синтаксис (как он и задумывался при проектировании SQL).


Нужно быть очень большим извращенцем, чтобы давать имена совпадающие с ключевыми словами. Относится к любому языку. В том числе и не компьютерному.

Течёт вода Кубань-реки куда велят большевики.
Re[2]: Почему имена не могут быть ключевыми словами?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 23.05.16 12:59
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Нужно быть очень большим извращенцем, чтобы давать имена совпадающие с ключевыми словами. Относится к любому языку. В том числе и не компьютерному.


На следующий день вдруг введут в язык новое ключевое слово, и оно совпадёт с твоим названием переменной.
Например, category. И что, от этого ты мгновенно станешь извращенцем? Ну, впрочем, наверно, станешь, раз так настаиваешь

А у нормальных языков есть средства описать, что какой-то идентификатор — гарантированно не ключевое слово, даже если совпало.
Жаль, что среди языков программирования таких мало — C# (префикс — @class), Erlang (синтаксис квотинга атома — 'if' вместо if)...
Надеюсь, скоро таких будет больше.
The God is real, unless declared integer.
Re[3]: Почему имена не могут быть ключевыми словами?
От: _ABC_  
Дата: 23.05.16 13:17
Оценка:
Здравствуйте, netch80, Вы писали:

N>А у нормальных языков есть средства описать, что какой-то идентификатор — гарантированно не ключевое слово, даже если совпало.

У SQL тоже есть, только ТС они не устраивают.
Re[3]: Почему имена не могут быть ключевыми словами?
От: Milena США  
Дата: 23.05.16 14:41
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Здравствуйте, Milena, Вы писали:


M>>Здравствуйте, Kolesiki, Вы писали:


K>>>Собсно, сабж. Что мешает SQL'ю выполнять запросы вида

K>>>
K>>>SELECT From FROM User WHERE ...
K>>>


K>>>В MS SQL что user, что from — ключевые слова и он постоянно ругается "ошибка синтаксиса". Он что, неспособен распарсить элементарное выражение?

M>>Пока не способен. Если вам легко написать такого рода парсер, обратитесь в Майрософт с предложением, может примут и внедрят в следующей версии.

K>Я спрашиваю не чем мне заняться, а принципиальный вопрос синтаксиса. Вы вообще понимаете тему? Вопрос про то, можно ли в SQL обойтись БЕЗ запрета ключевых слов как имён.

Я ответила на ваш вопрос — смотрите выше жирным. Ключевое слово тут "Пока", хотя я сильно сомневаюсь в необходимость вкладывать сотни человекочасов в то, что нужно единицам.

M>>Грамматика вполне нормальная. А вот поля c именами типа User и From трудно назвать нормальными, так они не несут никакого смысла.

K>Ну да, особенно User — вообще бессмыслица какая-то, да? Подумаешь, что в 99% БД это необходимая сущность!
Ну как сказать. У меня и в прошлой компании, и в этой таблица такого типа называется Users — о боже, и как-то нам даже не приходится квадратные скобки писать!

M>> Обычно поля называеются UserId

K>Будем учить кого и как называть? Я вообще-то и таблицу могу назвать User — именно она и фигурирует в оригинальном сообщении. Вот только использовать я её могу только через квадратные скобки.
Забавно, что вы готовы истратить огромное количество времени на страдания о том, как трудно писать код с квадратными скобками и какой он нечеловеческий, хотя за это время можно было эти самые скобки везде проставить и жить счастливо. Будьте проще — есть то, что есть. 10-15 лет назад был SQL Server 2000, который не поддерживал IntelliSense, хотя в ORACLE это все работало без проблем, а теперь SQL позволяет писать даже запросы к Hadoop. Так не забить ли на эту мелочь с синтаксисом и не переключиться ли на решение реальных проблем вместо борьбы с квадратными скобками?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.