TGViewer
There will be no singularity There will be no singularity @nosingularity · 1.95K subscribers
Post #431 303
Недавно вы единодушно проголосовали за то, чтобы я начал публиковать правила анализатора с разбором кейсов (https://t.me/nosingularity/415)

Пока я не сформулировал с чего начать. И дело не в самих правилах, с ними проблем нет. Хочется как-то структурно подойти к этим публикациям. Может быть сначала есть смысл рассказать про некоторые внутренние процессы, происходящие в базе, для большего погружения в проблему?
С другой стороны давят Даннинг с Крюгером, нашептывая "ты балбес, иди в сорцах поковыряйся" :)

Пока я собираюсь с мыслями, предлагаю всем интересующимся заглянуть в доку
https://github.com/antonrevyako/useful-links/blob/master/opensource-sql-tools.md

Например, там есть ссылки на реализацию mysql на go и репозиторий, где пытаются повторить postgres на go from the scratch.

Так же на глаза попался твиттер-тред (брррр) от Oracle Developer Advocate for SQL, где он рассказывает про различные проблемы, встречающиеся в запросах
https://twitter.com/ChrisRSaxon/status/1256233845642452994

Часть рекомендаций там с оракловским колоритом, но все равно может пригодиться.
Например, в pg есть такая бага, что count(*) работает на 10% медленнее, чем count(1). В оракле такой баги нет.

Давайте пока разберу одно правило из первых рекомендаций треда.

select * from ... where anything = NULL

ALWAYS returns no rows

Казалось бы, такое правило нужно только джунам. Кто не знает, что нельзя сравнивать с NULL'ом?

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

Во-вторых, такой же эффект будет наблюдаться при сравнении с колонкой или выражением, которое может принимать значение NULL.

Пример:
WHERE a < b + 1
,
где b может быть NULL

Отдельный вопрос сможет ли разработчик всегда понять, что b может принимать 'значения' NULL или нет, но конкретно тут, возможно, хотелось бы трактовать NULL как 0.

Пример:
WHERE a = 'string' || b 

Казалось бы,
'string' || b 
должен быть равен
'string'
, если b IS NULL.
Но фокус в том, что любые выражения с NULL дают NULL...

В этом случае стоит использовать CONCAT, который трактует NULL-значения как пустую строку.

Все ли об этом знают?
Telegram Сингулярности не будет https://twitter.com/lukaseder/status/1252919177515581441 Это не единственный заскок mysql. Пока для mysql правил не делали, но чувствуется, это будет веселая прогулка :) Да, если кто-то еще не знает, я делаю статический анализатор для SQL. Сейчас поддерживается…
More from @nosingularity
  1. Sep 19, 2026fixupx.com/KaiLentit/status/2100629518784328013/video/1
  2. Sep 18, 2026fixupx.com/iam_zachi/status/2100679300756435135
  3. Aug 30, 2026photo post
  4. Aug 25, 2026fixupx.com/meganreyno/status/2091918430374957416
  5. Aug 3, 2026Вышла новость, что Andy Pavlo приняли на борт Clickhouse Inc. Энди довольно известная фигу…
  6. Jul 23, 2026fixupx.com/unclebobmartin/status/2080257779395154409
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →