Skip to content

Commit 7e92c3f

Browse files
authored
Merge pull request #1256 from ydb-platform/result-set-columns
* Added `query/ResultSet.{Columns,ColumnTypes}` methods for get column names and types from query result set
2 parents 6aa48a4 + 551bb8f commit 7e92c3f

File tree

7 files changed

+978
-883
lines changed

7 files changed

+978
-883
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
* Added `query/ResultSet.{Columns,ColumnTypes}` methods for get column names and types from query result set
12
* Added experimental `retry.RetryWithResult` helper for retry lambda and return value from lambda
23

34
## v3.70.0

internal/query/result.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ func exactlyOneResultSetFromResult(ctx context.Context, r query.Result) (rs quer
315315
return nil, xerrors.WithStackTrace(err)
316316
}
317317

318-
return NewMaterializedResultSet(rows), nil
318+
return NewMaterializedResultSet(rs.Columns(), rs.ColumnTypes(), rows), nil
319319
}
320320

321321
func resultToMaterializedResult(ctx context.Context, r query.Result) (query.Result, error) {
@@ -345,7 +345,7 @@ func resultToMaterializedResult(ctx context.Context, r query.Result) (query.Resu
345345
rows = append(rows, row)
346346
}
347347

348-
resultSets = append(resultSets, NewMaterializedResultSet(rows))
348+
resultSets = append(resultSets, NewMaterializedResultSet(rs.Columns(), rs.ColumnTypes(), rows))
349349
}
350350

351351
return newMaterializedResult(resultSets), nil

internal/query/result_set.go

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/ydb-platform/ydb-go-genproto/protos/Ydb_Query"
1010

1111
"github.com/ydb-platform/ydb-go-sdk/v3/internal/stack"
12+
"github.com/ydb-platform/ydb-go-sdk/v3/internal/types"
1213
"github.com/ydb-platform/ydb-go-sdk/v3/internal/xerrors"
1314
"github.com/ydb-platform/ydb-go-sdk/v3/query"
1415
"github.com/ydb-platform/ydb-go-sdk/v3/trace"
@@ -21,8 +22,10 @@ var (
2122

2223
type (
2324
materializedResultSet struct {
24-
rows []query.Row
25-
idx int
25+
columnNames []string
26+
columnTypes []types.Type
27+
rows []query.Row
28+
idx int
2629
}
2730
resultSet struct {
2831
index int64
@@ -35,6 +38,32 @@ type (
3538
}
3639
)
3740

41+
func (rs *materializedResultSet) Columns() (columnNames []string) {
42+
return rs.columnNames
43+
}
44+
45+
func (rs *materializedResultSet) ColumnTypes() []types.Type {
46+
return rs.columnTypes
47+
}
48+
49+
func (rs *resultSet) ColumnTypes() (columnTypes []types.Type) {
50+
columnTypes = make([]types.Type, len(rs.columns))
51+
for i := range rs.columns {
52+
columnTypes[i] = types.TypeFromYDB(rs.columns[i].GetType())
53+
}
54+
55+
return columnTypes
56+
}
57+
58+
func (rs *resultSet) Columns() (columnNames []string) {
59+
columnNames = make([]string, len(rs.columns))
60+
for i := range rs.columns {
61+
columnNames[i] = rs.columns[i].GetName()
62+
}
63+
64+
return columnNames
65+
}
66+
3867
func (rs *materializedResultSet) NextRow(ctx context.Context) (query.Row, error) {
3968
if rs.idx == len(rs.rows) {
4069
return nil, xerrors.WithStackTrace(io.EOF)
@@ -47,9 +76,15 @@ func (rs *materializedResultSet) NextRow(ctx context.Context) (query.Row, error)
4776
return rs.rows[rs.idx], nil
4877
}
4978

50-
func NewMaterializedResultSet(rows []query.Row) *materializedResultSet {
79+
func NewMaterializedResultSet(
80+
columnNames []string,
81+
columnTypes []types.Type,
82+
rows []query.Row,
83+
) *materializedResultSet {
5184
return &materializedResultSet{
52-
rows: rows,
85+
columnNames: columnNames,
86+
columnTypes: columnTypes,
87+
rows: rows,
5388
}
5489
}
5590

0 commit comments

Comments
 (0)