Skip to content

Commit d909cd1

Browse files
authored
Merge pull request #1081 from ydb-platform/indexed-scanner
added implementation of indexed scanner
2 parents d73708a + b48902d commit d909cd1

File tree

12 files changed

+733
-70
lines changed

12 files changed

+733
-70
lines changed

internal/query/column.go

Lines changed: 0 additions & 39 deletions
This file was deleted.

internal/query/execute_query.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func executeQueryRequest(a *allocator.Allocator, sessionID, q string, settings e
3232
request.SessionId = sessionID
3333
request.ExecMode = Ydb_Query.ExecMode(settings.ExecMode())
3434
request.TxControl = settings.TxControl().ToYDB(a)
35-
request.Query = queryFromText(a, q, settings.Syntax())
35+
request.Query = queryFromText(a, q, Ydb_Query.Syntax(settings.Syntax()))
3636
request.Parameters = settings.Params().ToYDB(a)
3737
request.StatsMode = Ydb_Query.StatsMode(settings.StatsMode())
3838
request.ConcurrentResultSets = false

internal/query/result_set.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"io"
77

8+
"github.com/ydb-platform/ydb-go-genproto/protos/Ydb"
89
"github.com/ydb-platform/ydb-go-genproto/protos/Ydb_Query"
910

1011
"github.com/ydb-platform/ydb-go-sdk/v3/internal/xerrors"
@@ -16,7 +17,7 @@ var _ query.ResultSet = (*resultSet)(nil)
1617
type resultSet struct {
1718
index int64
1819
recv func() (*Ydb_Query.ExecuteQueryResponsePart, error)
19-
columns []query.Column
20+
columns []*Ydb.Column
2021
currentPart *Ydb_Query.ExecuteQueryResponsePart
2122
rowIndex int
2223
done chan struct{}
@@ -33,7 +34,7 @@ func newResultSet(
3334
recv: recv,
3435
currentPart: part,
3536
rowIndex: -1,
36-
columns: newColumns(part.GetResultSet().GetColumns()),
37+
columns: part.GetResultSet().GetColumns(),
3738
done: make(chan struct{}),
3839
}
3940
}

internal/query/row.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ type row struct {
1414
scannerStruct
1515
}
1616

17-
func newRow(columns []query.Column, v *Ydb.Value) (*row, error) {
17+
func newRow(columns []*Ydb.Column, v *Ydb.Value) (*row, error) {
1818
data := newScannerData(columns, v.GetItems())
1919

2020
return &row{

internal/query/scanner_data.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,14 @@ package query
22

33
import (
44
"github.com/ydb-platform/ydb-go-genproto/protos/Ydb"
5-
6-
"github.com/ydb-platform/ydb-go-sdk/v3/query"
75
)
86

97
type scannerData struct {
10-
columns []query.Column
8+
columns []*Ydb.Column
119
values []*Ydb.Value
1210
}
1311

14-
func newScannerData(columns []query.Column, values []*Ydb.Value) *scannerData {
12+
func newScannerData(columns []*Ydb.Column, values []*Ydb.Value) *scannerData {
1513
return &scannerData{
1614
columns: columns,
1715
values: values,

internal/query/scanner_indexed.go

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package query
22

33
import (
4+
"fmt"
5+
"reflect"
6+
7+
"github.com/ydb-platform/ydb-go-sdk/v3/internal/value"
48
"github.com/ydb-platform/ydb-go-sdk/v3/internal/xerrors"
59
"github.com/ydb-platform/ydb-go-sdk/v3/query"
610
)
@@ -22,5 +26,24 @@ func (s scannerIndexed) Scan(dst ...interface{}) error {
2226
return xerrors.WithStackTrace(errWrongArgumentsCount)
2327
}
2428

25-
return xerrors.WithStackTrace(ErrNotImplemented)
29+
for i := range dst {
30+
v := value.FromYDB(s.data.columns[i].GetType(), s.data.values[i])
31+
if err := value.CastTo(v, dst[i]); err != nil {
32+
to := reflect.ValueOf(dst[i])
33+
if to.Kind() != reflect.Pointer {
34+
return xerrors.WithStackTrace(
35+
fmt.Errorf("dst[%d] type is not a pointer ('%s')", i,
36+
to.Kind().String(),
37+
))
38+
}
39+
vv := reflect.ValueOf(v)
40+
if vv.CanConvert(to.Elem().Type()) {
41+
to.Elem().Set(vv.Convert(to.Elem().Type()))
42+
} else {
43+
return xerrors.WithStackTrace(err)
44+
}
45+
}
46+
}
47+
48+
return nil
2649
}

0 commit comments

Comments
 (0)