Skip to content

Commit f23af30

Browse files
author
James Cor
committed
include Wrapper values for out of band values
1 parent 6381322 commit f23af30

File tree

2 files changed

+21
-5
lines changed

2 files changed

+21
-5
lines changed

server/handler.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -870,7 +870,22 @@ func (h *Handler) resultForDefaultIter2(ctx *sql.Context, c *mysql.Conn, iter sq
870870
}
871871
resRow := make([]sqltypes.Value, len(row))
872872
for i, v := range row {
873-
resRow[i] = sqltypes.MakeTrusted(v.Typ, v.Val)
873+
if v.Val != nil || v.Val2 == nil {
874+
resRow[i] = sqltypes.MakeTrusted(v.Typ, v.Val)
875+
continue
876+
}
877+
dVal, err := v.Val2.UnwrapAny(ctx)
878+
if err != nil {
879+
return err
880+
}
881+
switch dVal := dVal.(type) {
882+
case []byte:
883+
resRow[i] = sqltypes.MakeTrusted(v.Typ, dVal)
884+
case string:
885+
resRow[i] = sqltypes.MakeTrusted(v.Typ, []byte(dVal))
886+
default:
887+
panic(fmt.Sprintf("unexpected type %T", dVal))
888+
}
874889
}
875890
ctx.GetLogger().Tracef("spooling result row %s", resRow)
876891
res.Rows = append(res.Rows, resRow)

sql/row_frame.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,20 @@ func (r Row2) Len() int {
3838
return len(r)
3939
}
4040

41+
type ValueBytes []byte
42+
4143
// Value is a logical index into a Row2. For efficiency reasons, use sparingly.
4244
type Value struct {
43-
Val ValueBytes
44-
Typ querypb.Type
45+
Val ValueBytes
46+
Val2 AnyWrapper
47+
Typ querypb.Type // TODO: consider sqltypes.Type instead
4548
}
4649

4750
// IsNull returns whether this value represents NULL
4851
func (v Value) IsNull() bool {
4952
return v.Val == nil || v.Typ == querypb.Type_NULL_TYPE
5053
}
5154

52-
type ValueBytes []byte
53-
5455
type RowFrame struct {
5556
Types []querypb.Type
5657

0 commit comments

Comments
 (0)