initial hasql support #407
Reference in New Issue
Block a user
No description provided.
Delete Branch "hasql"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
closes #403
Signed-off-by: Vasiliy Tolstov v.tolstov@unistack.org
Выглядит неплохо. Крутая штука от yandex 👍
Кстати, а были мысли в интерфейс micro.Service вносить сущность базы данных?
@@ -0,0 +13,4 @@
"golang.yandex/hasql/v2"
)
var errNoAliveNodes = errors.New("no alive nodes")
Hint: думаю, что стоит сделать ее public, чтобы обрабатывать этот кейс
готово
@@ -0,0 +15,4 @@
var errNoAliveNodes = errors.New("no alive nodes")
func newSQLRowError() *sql.Row {
Хм, что-то очень "грязное". А по другому, видимо, никак, верно понял?
да, почему-то в го решили, что по другому нельзя. Переделываю на sql/driver
оставил для совместимости и заимлементил драйвер
@@ -0,0 +228,4 @@
}
// ClusterOptions contains cluster specific options
type ClusterOptions struct {
Предлагаю для читаемости вынести в отдельный файлик cluster_options.go и перегнать туда все опции и билдеры и сгруппировать их там
готово
@@ -0,0 +478,4 @@
return nil
}
func (c *Cluster) SetConnMaxLifetime(td time.Duration) {
тут получается из-за hasql.Alive — выставит коннект только по доступным нодам, а те что в моменте будет недоступны не получат настройку и за ними придется следить, если появятся?
Да, после переделки на sql/driver может лучше будет
убрал, в случае кластера уже подаются инстансы где нужно сконфигурить пулы, для кластера нужно выключить это дело.
@@ -0,0 +479,4 @@
}
func (c *Cluster) SetConnMaxLifetime(td time.Duration) {
c.hasql.NodesIter(hasql.NodeStateCriterion(hasql.Alive))(func(n *hasql.Node[Querier]) bool {
IDE подсвечивает, что можно убрать лишнее приведение типа hasql.NodeStateCriterion(hasql.Alive) и просто отдавать hasql.Alive.
Аналогично в строках: 489, 496, 503, 511
убрал методы
@@ -0,0 +10,4 @@
"golang.yandex/hasql/v2"
)
func TestNewCluster(t *testing.T) {
Читать тяжело, что тестирует тест.
Кмк, тут лучше разбить на атомарные тесты, а не general flow. Могу взять в работу (проксирую стажерам или сам).
Ок
неа, была мысль сделать micro-store-sql который позволяет забиндить имя запроса к запросу и сделать реализацию методов Read/Write и тп.
добавил имплементацию драйвера для sql/driver чтобы можно было используя кластер создать драйвер и его использовать как *sql.DB