170 похожих чатов

Ребята, у меня тут с коллегой небольшая дискуссия. У

нас небольшое разногласие в плане синтаксиса query builder'а.
Какой вообще кому синтаксис больше по душе и почему?

QB("table")
.where("col1", "=", 1)
.whereColumn("col1", "=", "col2")
.whereIn("col1", [1, 2, 3])
.whereNotIn("col1", [1, 2, 3])
.whereBetween("col1", [1, 10])
.whereNotBetween("col1", [1, 10])
.whereExists(QB())
.whereNotExists(QB());

Второй вариант:
QB("table")
.where`col1 = ${1}`
.where`col1 = col2`
.where`col1 in ${[1, 2, 3]}`
.where`col1 !in ${[1, 2, 3]}`
.where`col1 between ${[1, 10]}`
.where`col1 !between ${[1, 10]}`
.where`exists ${QB()}`
.where`!exists ${QB()}`;

25 ответов

24 просмотра

Первый. Потому что скобки. Во втором они есть и далее нету..

ᅠ ᅠ
А зачем тебе скобки?

консистентность. Шучу. Ну что за вопросы.. В первом явно используем методы, а во втором это что?..

ᅠ ᅠ- Автор вопроса
][_ioN ‏ 😏
консистентность. Шучу. Ну что за вопросы.. В перво...

Ну это тегированный метод. Впервые слышишь что-ли? Да ну!

ᅠ ᅠ
Ну это тегированный метод. Впервые слышишь что-ли?...

тогда вопрос: во втором варианте есть возможность передать аргументами список методов? Как?

ᅠ ᅠ- Автор вопроса
ᅠ ᅠ
Туда можно передать всё что угодно!

В первом понятно: QB( "table" )[ method ]( ... ), а во втором как это проделать в рамках JS?

ᅠ ᅠ- Автор вопроса
][_ioN ‏ 😏
В первом понятно: QB( "table" )[ method ]( ... ), ...

А зачем так делать вообще? Никогда (очень редко) так не делай!

есть автотесты и их генерация 💁‍♂️ Будешь везде вручную всё прописывать? Я и спрашиваю, как во втором варианте можно автоматизировать процесс (не только тестов, а вообще).

ᅠ ᅠ- Автор вопроса
][_ioN ‏ 😏
есть автотесты и их генерация 💁‍♂️ Будешь везде вр...

Ну если ты хочешь написать именно так, то что тебе мешает в цикле прогнать всё? Ведь название метода одинаковое у всех. Это в первом варианте разные методы

ᅠ ᅠ
Ну если ты хочешь написать именно так, то что тебе...

В том-то и дело, что в первом варианте я могу получить список методов и прогнать всё необходимое в тестах. Во втором варианте мне уже надо гонять условия.

ᅠ ᅠ
Вообще не аргумент!

Тогда даже не знаю, что на это ответить. Используйте, что считаете удобным в вашем случае.

ᅠ ᅠ- Автор вопроса
][_ioN ‏ 😏
Тогда даже не знаю, что на это ответить. Используй...

Просто, скорее всего, тебе сложно представить всю картину, но я попробую пояснить! Дело в том, что помимо методов where* будут ещё другие и если ещё учитывать вариант orWhere, то методов условий будет слишком много и они просто засрут весь автокомплит. Но самая проблема ещё начала крыться в другом. Есть другой метод, называется having и проблема в том, что для него нужно сделать все (почти все) те же варианты типа: havingIn, havingNotIn и т.д. и тогда вообще хаос.

ᅠ ᅠ
А зачем так делать вообще? Никогда (очень редко) т...

А ты гарантируешь, что при прямой подстановке через ${val} там не будет инъекции? Выглядит так себе

ᅠ ᅠ
Просто, скорее всего, тебе сложно представить всю ...

Конечно засрут И в твоём варианте тоже засрут Надо писать raw sql

ᅠ ᅠ
Да, гарантирую!

Я пока что тебе не верю

ᅠ ᅠ- Автор вопроса
Алексей Попов
Я пока что тебе не верю

Значит ты просто не в курсе как работает tagged functions

ᅠ ᅠ- Автор вопроса
Алексей Попов
Конечно засрут И в твоём варианте тоже засрут Надо...

Ну ты знаешь, половина людей кричат, что билдеры фуфло, а другая половина кричит, что DSL лучше. Я выбрал между двумя золами.

Я правильно понимаю, что во втором варианте ни о какой инкапсуляции raw sql кода речи не идет?

ᅠ ᅠ
Просто, скорее всего, тебе сложно представить всю ...

Есть класс, предоставляющий данные методы (любые, публичные), которые мы можем получить нативными средствами JS (не мне тебе рассказывать как). Я в цикле могу прогнать всё необходимое для собственных нужд передав лишь массив необходимых мне методов (собственно - получили массив методов, передали на выполнение). having не having - вообще по боку. Суть в том, что я могу написать один (!) тест, в котором буду проверять корректность всех методов по условию, вместо написания по одному тесту на это условие для каждого (!) метода. А если их стопятьсот? Предлагаешь столько же тестов писать? А завтра поменяем что-нибудь - переписывать? Ещё и тесты править? Опять?.. О _ о Вот я и спрашиваю, есть ли во втором варианте возможность динамического построения логики выполнения? Я не спорю, мне интересно.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта