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 ответов

10 просмотров

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

ᅠ ᅠ- Автор вопроса
ᅠ ᅠ
А зачем тебе скобки?

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

ᅠ ᅠ- Автор вопроса
][_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 - вообще по боку. Суть в том, что я могу написать один (!) тест, в котором буду проверять корректность всех методов по условию, вместо написания по одному тесту на это условие для каждого (!) метода. А если их стопятьсот? Предлагаешь столько же тестов писать? А завтра поменяем что-нибудь - переписывать? Ещё и тесты править? Опять?.. О _ о Вот я и спрашиваю, есть ли во втором варианте возможность динамического построения логики выполнения? Я не спорю, мне интересно.

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

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

здравствуйте. совершаю вот такую вещь: strcpy(line, (char)current_number); где current number — неподписанный шорт, line — массив чаров. ругань следующая: main.c:29:30: error...
Roberto's Ширгозиев
13
Можно попросить небольшое ревью кода? Тут немнога, я ничего интереснее не придумал, чем написать аналог tree в качестве практики с cmake. https://github.com/hrimov/tree-unix/...
Andrew Hrimov
11
Всем привет. Ребят подскажите пожалуйста. Вопрос по дизасемблировани. Начну с начала. У меня есть скомпилированная программа на ГО (я разработчик) - в ней есть защита лицензии...
Zloy
11
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
кто тебе сказал, что она угроблена? многие только начинают жизнь, после увольнения из Гугла, Майкрософта, Оракла,...
Alex Kom
9
В альтернативе у нас сидеть горбатиться на дядю в галерах, пока не помрешь или пока тебя не заменят более молодым сотрудником, который готов гребсти в два раза дешевле. Вот и ...
Кабан Кабанов
7
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Карта сайта