Skip to content

Commit a0bc939

Browse files
authored
fix: return error when value conversion is missing (#311)
Updates #309
1 parent 29e69c7 commit a0bc939

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

rows.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ package spannerdriver
1616

1717
import (
1818
"database/sql/driver"
19+
"fmt"
1920
"io"
2021
"sync"
2122

@@ -265,7 +266,11 @@ func (r *rows) Next(dest []driver.Value) error {
265266
return err
266267
}
267268
dest[i] = v
269+
default:
270+
return fmt.Errorf("unsupported element type ARRAY<%v>", col.Type.ArrayElementType.Code)
268271
}
272+
default:
273+
return fmt.Errorf("unsupported element type %v", col.Type.Code)
269274
}
270275
// TODO: Implement struct
271276
}

rows_test.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222

2323
"cloud.google.com/go/spanner"
2424
sppb "cloud.google.com/go/spanner/apiv1/spannerpb"
25+
"google.golang.org/protobuf/types/known/structpb"
2526
)
2627

2728
type testIterator struct {
@@ -81,6 +82,9 @@ func TestRows_Next(t *testing.T) {
8182
if err == io.EOF {
8283
break
8384
}
85+
if err != nil {
86+
t.Fatal(err)
87+
}
8488
row := make([]driver.Value, 3)
8589
copy(row, dest)
8690
values = append(values, row)
@@ -109,3 +113,37 @@ func TestRows_Next(t *testing.T) {
109113
}
110114
}
111115
}
116+
117+
func TestRows_Next_Unsupported(t *testing.T) {
118+
unspecifiedType := &sppb.Type{Code: sppb.TypeCode_TYPE_CODE_UNSPECIFIED}
119+
120+
it := testIterator{
121+
metadata: &sppb.ResultSetMetadata{
122+
RowType: &sppb.StructType{
123+
Fields: []*sppb.StructType_Field{
124+
{Name: "COL1", Type: unspecifiedType},
125+
},
126+
},
127+
},
128+
rows: []*spanner.Row{
129+
newRow(t, []string{"COL1"}, []any{
130+
spanner.GenericColumnValue{
131+
Type: unspecifiedType,
132+
Value: &structpb.Value{},
133+
},
134+
}),
135+
},
136+
}
137+
138+
rows := rows{it: &it}
139+
140+
dest := make([]driver.Value, 1)
141+
err := rows.Next(dest)
142+
if err == nil {
143+
t.Fatal("expected an error, but got nil")
144+
}
145+
const expectedError = "unsupported element type TYPE_CODE_UNSPECIFIED"
146+
if err.Error() != expectedError {
147+
t.Fatalf("expected error %q, but got %q", expectedError, err.Error())
148+
}
149+
}

0 commit comments

Comments
 (0)