@lab:~$ cat smth/sheets
🤬🤬🤬
Именно так выглядит моя Queen после того, как я понял, что всего одна строчка в интерфейсе драйвера повлечёт за собой каскад изменений, которые по размеру будут сопоставимы с половиной всей библиотеки...
Вот кстати та самая строчка:
type Driver interface {
Exec(ctx context.Context, fn func(*sql.Tx) error) error
}Казалось бы, что не так? А то, что в мире есть не только SQL-базы данных, но ещё и NoSQL, а значит наш sql.Tx специфичен только для database/sql. И в целом бо́льшая часть кода привязана к SQL.
Причём я знал, что в тулзе будут не только SQL-миграции, но в начале разработки сделал упор именно на них, думая, что NoSQL по аналогии с другими библиотеками добавлю без лишних проблем. А потом случился неприятный инцидент при попытке добавить поддержку MongoDB, что вставило палки в колёса — ведь в драйвере есть строчка выше, и в целом логика работы с NoSQL отличается намного сильнее, чем я ожидал.
Что ж, с велосипеда мы упали. Как чинить этот дёготь? Если честно, сижу ночью и пытаюсь найти тот самый оптимальный вариант, как сделать по уму...
Были идеи, конечно — и какой-нибудь Session-интерфейс намутить, но тут теряется как лёгкость понимания API, так и типобезопасность. Как и в следующем варианте, где я думал исхитриться через type switch, что меня в целом не устраивает, поскольку пропадал бы автокомплит и есть шансы поймать приколюху в проде. Был также вариант сделать просто отдельный драйвер для NoSQL, но это настолько отвратительный костыль, что мне аж плохо стало.
И тут как итог всего брейншторма выбор падает на два варианта:
• базовый интерфейс + расширения под каждую БД
• дженерики
Конечно, есть вариант переписать частично лишь Driver.Exec, но мне не нравятся эти правки, которые ни вам, ни нам. Либо делать хорошо, либо не делать вовсе, так что поутру придётся садиться за рефакторинг королевы. Да, потрачу чуть больше времени и чуть больше попаболи, но зато будущий я скажет себе спасибо (по крайней мере на это надеюсь).
Ну и статейка с более подробным разбором проблем и самим переездом в будущем не заставит себя ждать. В целом не думаю, что планы по релизу Queen в первую неделю марта 2026 сдвинутся из-за этого — наоборот, даже надеюсь, что все эти новшества ускорят внедрение поддержки новых баз данных.
У медведя совсем опилки в голове мёдом заплыли, видите до чего доводит одно маленькое упущение несколько недель назад🥴🥴🥴
тильт конечно имеется ⚠️
