Давно не трогал SQL, все больше даталог или вообще просто GUI разработка, а тут пришлось. И я, оказывается, забыл, какой это бредовый язык.
Основной бред это, конечно, текстовые запросы. Понятно, что это удобно (было когда его придумывали) чтобы, как там, бухгалтеры сами себе запросы к базе писали на естественном языке. Но блин, 50 лет уже прошло, весь мир на нем работает, неужели нельзя было за это время что-то более machine-friendly придумать? И самое смешное что запросы руками как раз никто не пишет, все ходят из программ, но обе стороны притворяются, как будто это бухгалтер ручками набил — и программист, и база.
Понятно, SQL-инъекции, которые из этого проистекают — стыд. Подсчет запятых и скобок — стыд. Куча бесполезных ресурсов, которые обе стороны тратят на парсинг «естественного языка» — ебаный стыд.
Но больше всего меня удивило, что эти запросы еще и хреново кешируются. Ну там, допустим,
SELECT * FROM users WHERE name = ?
еще куда ни шло. Но вот условный
SELECT * FROM users WHERE role IN (?, ?, ?, ?, ?)
Если тебе надо найти пользователя с одной из трех ролей — это один запрос, из пяти — другой, из двух — третий. Ну бред же, бред, бред, не может так быть (но есть).
Особенно весело, когда там какие-то айдишники, и их допустим тыща. И вот ты сидишь как дебил в своей программе генеришь эту строку сраную с тысячей вопросиков через запятую, засылаешь в базу, а в базе парсер, и тоже такой — пук пук пук, вопросик, запятая, пробел, вопросик, запятая, пробел.
ДА КАК ВЫ ЭТО ТЕРПИТЕ???