sqlx получая на вход запрос вида SELECT x FROM y WHERE x IN ($1, $2, $3) и аргументы под этот запрос как ...interface{} подменяет их на реальные значения? Конкретно интересует каким образом мы получаем строки с допустим enum типов (сгенерированных через enumer и имеющих методы вроде UnmarshalText/JSON), пролистал код либы, но ответа для себя не нашел.
> подменяет их на реальные значения она их и не подменяет, это механизм бд - placeholders
ок, а в какой момент мы конвертируем все заданные аргументы в строки, чтобы передать их дальше в нормальном виде?
что такое «нормальный вид»?) почему обязательно строки - у пг есть и бинарный протокол)
в нормальный вид я имею ввиду, что когда я передаю тип uuid.UUID в качестве параметра я на выходе получу запрос с WHERE id = '3124124124-242424-24', мне интересно как мы делаем переход от какого-то конкретного типа к представлению в виде строки.
https://youtu.be/Uojy57I-xP0
уже на сервере бд туда вы передаете «вот запрос», «вот параметры для него»
еще вы можете делать «вот запрос» а потом N раз «вот параметры»
Все не так, драйвер кастит в нужный ему тип данные которые вы передали как аргумент
ну я к тому что драйвер не подставляет в запрос сами параметры это отдельные сущности что передаются
А это смотря какой драйвер и как настроить
ух, это прям откровение для меня)
есть какие-то что по дефолту подставляют на уровне приложения?
В исходники пг зашита хэш мапа, какие типы во что кастить. В некоторых драйверах можно указать свою логику
а доклад что кидали выше это про «узнает про эту мапу для каждого нового подключения и тд. потому сделали оптимизацию»?
Доклад про местные костыли и не только. А в случае с этой мапой - просто решили принебречь лишними запросами к бд, приняв на веру, что все реплики бд находятся в одной конфигурации в данный момент времени, если я правильно понял
ага, я его видимо давно смотрел таки
Правильно сказано, это механизм placeholdes. На уровне go-кода вообще такого нет, со стороны go на сервер передается отдельно запрос «SELECT x FROM y WHERE x IN (?, ?, ?)» (в зависимости от диалекта плейсхолдеры могут по-разному отмечаться), и отдельно передаются параметры
Обсуждают сегодня