🦾 IT-Качалка Давида Шекунца 💪
2025-05-16 06:53
🦾 IT-Качалка Давида Шекунца 💪
Тут 3 момента:- Не слышал про jooq- Он вроде только под Java, SQLi сейчас под Go, но я буду его расширять (надо просто дописать теймплейты для других языков)- У него классическая дот нотация (select().from()...), я использую функциональную нотацию (query(select(), from(), ...), что (1) намного ближе к SQL, (2) результат любой функции это объект { sql: string, args: any[] }, а значит можно самому писать функции / такие структуры и использовать их внутри, то есть, если тебе нужна какая-то кастомизация, не надо лезть в библиотеку и расширять методы объектов, (3) мы не ограничены конкретной БД, то есть, даже если нет интроспекции на какую-то БД, сами типы можно написать вручную, а SQLi будет спокойно работать с любым SQL синтаксисом
Как пример кастомизации: у нашей кастомной базы есть оператор MERGE table WHERE ... COLLISION ..., которая сливает несколько записей вместе, в SQLi функции merge и collision нет, но мы можем сделать так:function merge(tableName: string) { return { sql: `MERGE ${tableName}`, }}function collision(type: "free" | "restricted") { return { sql: `COLLISION $`, args: [type] }} И использовать так:query(merge(tableName), where(...), collision("free"))То есть, даже не надо комитить что-то в SQLi чтобы добавить новые операторы