Skip to content

Commit 2d0d3eb

Browse files
sql/ydb: added support for global/local, unique, sync/async indexes
1 parent 0744021 commit 2d0d3eb

File tree

3 files changed

+44
-16
lines changed

3 files changed

+44
-16
lines changed

go.sum

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -105,12 +105,8 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5
105105
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
106106
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
107107
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
108-
github.com/ydb-platform/ydb-go-genproto v0.0.0-20251125145508-6d7ef87db5cb h1:LZ6dhVfWzhicf/P5Xh7fA0Jd7rfGduxmB2QZpD+Lz9Q=
109-
github.com/ydb-platform/ydb-go-genproto v0.0.0-20251125145508-6d7ef87db5cb/go.mod h1:Er+FePu1dNUieD+XTMDduGpQuCPssK5Q4BjF+IIXJ3I=
110108
github.com/ydb-platform/ydb-go-genproto v0.0.0-20251222105147-0bf751469a4a h1:nRqONRrMFulP2bTWM2RRnPM1VDhWuBZg4ULXkG4xXdk=
111109
github.com/ydb-platform/ydb-go-genproto v0.0.0-20251222105147-0bf751469a4a/go.mod h1:Er+FePu1dNUieD+XTMDduGpQuCPssK5Q4BjF+IIXJ3I=
112-
github.com/ydb-platform/ydb-go-sdk/v3 v3.123.0 h1:VwaqDpAbNJ+PvPV7meiCuUptsqLhPkHq5tMYu45BrX8=
113-
github.com/ydb-platform/ydb-go-sdk/v3 v3.123.0/go.mod h1:/LjMxb/rXmoGAAnImoqAFIlhO5ampHacbvDetQitCk4=
114110
github.com/ydb-platform/ydb-go-sdk/v3 v3.125.0 h1:KPnGV2diuX1A4/1zXLO1UWHJokWC8yICzEfjdkSUWKo=
115111
github.com/ydb-platform/ydb-go-sdk/v3 v3.125.0/go.mod h1:/LjMxb/rXmoGAAnImoqAFIlhO5ampHacbvDetQitCk4=
116112
github.com/zclconf/go-cty v1.14.4 h1:uXXczd9QDGsgu0i/QFR/hzI5NYCHLf6NQw/atrbnhq8=
@@ -187,8 +183,6 @@ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoA
187183
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
188184
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
189185
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
190-
google.golang.org/genproto/googleapis/rpc v0.0.0-20251213004720-97cd9d5aeac2 h1:2I6GHUeJ/4shcDpoUlLs/2WPnhg7yJwvXtqcMJt9liA=
191-
google.golang.org/genproto/googleapis/rpc v0.0.0-20251213004720-97cd9d5aeac2/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
192186
google.golang.org/genproto/googleapis/rpc v0.0.0-20251222181119-0a764e51fe1b h1:Mv8VFug0MP9e5vUxfBcE3vUkV6CImK3cMNMIDFjmzxU=
193187
google.golang.org/genproto/googleapis/rpc v0.0.0-20251222181119-0a764e51fe1b/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ=
194188
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
@@ -198,8 +192,6 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8
198192
google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
199193
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
200194
google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
201-
google.golang.org/grpc v1.77.0 h1:wVVY6/8cGA6vvffn+wWK5ToddbgdU3d8MNENr4evgXM=
202-
google.golang.org/grpc v1.77.0/go.mod h1:z0BY1iVj0q8E1uSQCjL9cppRj+gnZjzDnzV0dHhrNig=
203195
google.golang.org/grpc v1.78.0 h1:K1XZG/yGDJnzMdd/uZHAkVqJE+xIDOcmdSFZkBUicNc=
204196
google.golang.org/grpc v1.78.0/go.mod h1:I47qjTo4OKbMkjA/aOOwxDIiPSBofUtQUI5EfpWvW7U=
205197
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=

sql/ydb/attributes.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Copyright 2021-present The Atlas Authors. All rights reserved.
2+
// This source code is licensed under the Apache 2.0 license found
3+
// in the LICENSE file in the root directory of this source tree.
4+
5+
//go:build !ent
6+
7+
package ydb
8+
9+
import "ariga.io/atlas/sql/schema"
10+
11+
// YDBIndexType represents YDB-specific index attributes.
12+
type YDBIndexAttributes struct {
13+
schema.Attr
14+
Global bool // GLOBAL, LOCAL
15+
Sync bool // SYNC, ASYNC
16+
}

sql/ydb/migrate.go

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -282,27 +282,47 @@ func (s *state) alterTable(t *schema.Table, changes []schema.Change) error {
282282
return nil
283283
}
284284

285-
func (s *state) addIndexes(src schema.Change, t *schema.Table, adds ...*schema.AddIndex) error {
286-
for _, add := range adds {
287-
idx := add.I
285+
func (s *state) addIndexes(src schema.Change, t *schema.Table, indexes ...*schema.AddIndex) error {
286+
for _, add := range indexes {
287+
index := add.I
288+
indexAttrs := YDBIndexAttributes{}
289+
sqlx.Has(index.Attrs, &indexAttrs)
290+
288291
b := s.Build("ALTER TABLE").
289292
Table(t).
290293
P("ADD INDEX").
291-
Ident(idx.Name).
292-
P("GLOBAL ON")
294+
Ident(index.Name)
295+
296+
if indexAttrs.Global {
297+
b.P("GLOBAL")
298+
} else {
299+
b.P("LOCAL")
300+
}
301+
302+
if index.Unique {
303+
b.P("UNIQUE")
304+
}
305+
306+
if indexAttrs.Sync {
307+
b.P("SYNC")
308+
} else {
309+
b.P("ASYNC")
310+
}
311+
312+
b.P("ON")
293313

294-
s.indexParts(b, idx.Parts)
314+
s.indexParts(b, index.Parts)
295315

296316
reverseOp := s.Build("ALTER TABLE").
297317
Table(t).
298318
P("DROP INDEX").
299-
Ident(idx.Name).
319+
Ident(index.Name).
300320
String()
301321

302322
s.append(&migrate.Change{
303323
Cmd: b.String(),
304324
Source: src,
305-
Comment: fmt.Sprintf("create index %q to table: %q", idx.Name, t.Name),
325+
Comment: fmt.Sprintf("create index %q to table: %q", index.Name, t.Name),
306326
Reverse: reverseOp,
307327
})
308328
}

0 commit comments

Comments
 (0)