initial hasql support #407

Merged
vtolstov merged 8 commits from hasql into v4 2025-09-20 22:57:40 +03:00
Owner

closes #403

Signed-off-by: Vasiliy Tolstov v.tolstov@unistack.org

closes #403 Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
vtolstov added 1 commit 2025-09-18 14:35:04 +03:00
initial hasql support
Some checks failed
test / test (pull_request) Failing after 19m47s
lint / lint (pull_request) Failing after 19m59s
coverage / build (pull_request) Failing after 20m4s
2886a7fe8a
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
vtolstov added 1 commit 2025-09-18 14:35:12 +03:00
Merge branch 'v4' into hasql
Some checks failed
test / test (pull_request) Failing after 17m58s
coverage / build (pull_request) Failing after 18m40s
lint / lint (pull_request) Failing after 1m41s
ea84ac094f
vtolstov added 1 commit 2025-09-18 17:16:25 +03:00
initial hasql support
Some checks failed
lint / lint (pull_request) Successful in 4m23s
test / test (pull_request) Failing after 17m14s
coverage / build (pull_request) Failing after 17m29s
6c6916a050
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
vtolstov added 1 commit 2025-09-19 11:26:21 +03:00
add default node state criterion
Some checks failed
lint / lint (pull_request) Successful in 2m36s
test / test (pull_request) Failing after 17m14s
coverage / build (pull_request) Failing after 17m30s
e053eeac74
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
vtolstov added 1 commit 2025-09-19 11:31:16 +03:00
move
Some checks failed
lint / lint (pull_request) Successful in 3m27s
test / test (pull_request) Successful in 4m49s
coverage / build (pull_request) Failing after 17m28s
022326ddc4
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
pugnack approved these changes 2025-09-19 12:00:44 +03:00
pugnack left a comment
Member

Выглядит неплохо. Крутая штука от yandex 👍

Кстати, а были мысли в интерфейс micro.Service вносить сущность базы данных?

Выглядит неплохо. Крутая штука от yandex 👍 Кстати, а были мысли в интерфейс micro.Service вносить сущность базы данных?
pugnack reviewed 2025-09-19 12:21:53 +03:00
@@ -0,0 +13,4 @@
"golang.yandex/hasql/v2"
)
var errNoAliveNodes = errors.New("no alive nodes")
Member

Hint: думаю, что стоит сделать ее public, чтобы обрабатывать этот кейс

Hint: думаю, что стоит сделать ее public, чтобы обрабатывать этот кейс
Author
Owner

готово

готово
vtolstov marked this conversation as resolved
pugnack reviewed 2025-09-19 12:22:24 +03:00
@@ -0,0 +15,4 @@
var errNoAliveNodes = errors.New("no alive nodes")
func newSQLRowError() *sql.Row {
Member

Хм, что-то очень "грязное". А по другому, видимо, никак, верно понял?

Хм, что-то очень "грязное". А по другому, видимо, никак, верно понял?
Author
Owner

да, почему-то в го решили, что по другому нельзя. Переделываю на sql/driver

да, почему-то в го решили, что по другому нельзя. Переделываю на sql/driver
Author
Owner

оставил для совместимости и заимлементил драйвер

оставил для совместимости и заимлементил драйвер
vtolstov marked this conversation as resolved
pugnack reviewed 2025-09-19 12:23:14 +03:00
@@ -0,0 +228,4 @@
}
// ClusterOptions contains cluster specific options
type ClusterOptions struct {
Member

Предлагаю для читаемости вынести в отдельный файлик cluster_options.go и перегнать туда все опции и билдеры и сгруппировать их там

Предлагаю для читаемости вынести в отдельный файлик cluster_options.go и перегнать туда все опции и билдеры и сгруппировать их там
Author
Owner

готово

готово
vtolstov marked this conversation as resolved
pugnack reviewed 2025-09-19 12:25:20 +03:00
@@ -0,0 +478,4 @@
return nil
}
func (c *Cluster) SetConnMaxLifetime(td time.Duration) {
Member

тут получается из-за hasql.Alive — выставит коннект только по доступным нодам, а те что в моменте будет недоступны не получат настройку и за ними придется следить, если появятся?

тут получается из-за hasql.Alive — выставит коннект только по доступным нодам, а те что в моменте будет недоступны не получат настройку и за ними придется следить, если появятся?
Author
Owner

Да, после переделки на sql/driver может лучше будет

Да, после переделки на sql/driver может лучше будет
Author
Owner

убрал, в случае кластера уже подаются инстансы где нужно сконфигурить пулы, для кластера нужно выключить это дело.

убрал, в случае кластера уже подаются инстансы где нужно сконфигурить пулы, для кластера нужно выключить это дело.
vtolstov marked this conversation as resolved
pugnack reviewed 2025-09-19 12:25:53 +03:00
@@ -0,0 +479,4 @@
}
func (c *Cluster) SetConnMaxLifetime(td time.Duration) {
c.hasql.NodesIter(hasql.NodeStateCriterion(hasql.Alive))(func(n *hasql.Node[Querier]) bool {
Member

IDE подсвечивает, что можно убрать лишнее приведение типа hasql.NodeStateCriterion(hasql.Alive) и просто отдавать hasql.Alive.

Аналогично в строках: 489, 496, 503, 511

IDE подсвечивает, что можно убрать лишнее приведение типа hasql.NodeStateCriterion(hasql.Alive) и просто отдавать hasql.Alive. Аналогично в строках: 489, 496, 503, 511
Author
Owner

убрал методы

убрал методы
vtolstov marked this conversation as resolved
pugnack reviewed 2025-09-19 12:26:18 +03:00
@@ -0,0 +10,4 @@
"golang.yandex/hasql/v2"
)
func TestNewCluster(t *testing.T) {
Member

Читать тяжело, что тестирует тест.

Кмк, тут лучше разбить на атомарные тесты, а не general flow. Могу взять в работу (проксирую стажерам или сам).

Читать тяжело, что тестирует тест. Кмк, тут лучше разбить на атомарные тесты, а не general flow. Могу взять в работу (проксирую стажерам или сам).
Author
Owner

Ок

Ок
vtolstov marked this conversation as resolved
vtolstov added 1 commit 2025-09-20 22:27:45 +03:00
implement driver
Some checks failed
lint / lint (pull_request) Successful in 2m43s
test / test (pull_request) Successful in 4m53s
coverage / build (pull_request) Failing after 17m18s
f92e18897a
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
Author
Owner

Выглядит неплохо. Крутая штука от yandex 👍

Кстати, а были мысли в интерфейс micro.Service вносить сущность базы данных?

неа, была мысль сделать micro-store-sql который позволяет забиндить имя запроса к запросу и сделать реализацию методов Read/Write и тп.

> Выглядит неплохо. Крутая штука от yandex 👍 > > Кстати, а были мысли в интерфейс micro.Service вносить сущность базы данных? неа, была мысль сделать micro-store-sql который позволяет забиндить имя запроса к запросу и сделать реализацию методов Read/Write и тп.
Author
Owner

добавил имплементацию драйвера для sql/driver чтобы можно было используя кластер создать драйвер и его использовать как *sql.DB

добавил имплементацию драйвера для sql/driver чтобы можно было используя кластер создать драйвер и его использовать как *sql.DB
vtolstov added 2 commits 2025-09-20 22:46:51 +03:00
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
split files
Some checks failed
lint / lint (pull_request) Successful in 2m27s
test / test (pull_request) Failing after 17m13s
coverage / build (pull_request) Failing after 17m30s
614b740c56
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
vtolstov merged commit ab051405c5 into v4 2025-09-20 22:57:39 +03:00
vtolstov deleted branch hasql 2025-09-20 22:57:41 +03:00
Sign in to join this conversation.
No description provided.